Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2013, 19:14   #1
_Iren_
Пользователь
 
Регистрация: 22.04.2012
Сообщений: 10
Вопрос Intel8051, кнопки, индикаторы

доброго времени суток) появилась задача: программирование контроллера клавиатуры из 16 кнопок (4×4), код кнопки выводится на двухразрядный семи сегментный индикатор. все это на основе микросхемы intel8051.
к задаче прилагался нерабочий код. путем изменений получилось вот так:

Код:
ORG 0000H   ; смещение при загрузке кода будет равно 0
    LJMP    SBROS   ; переход на сброс
 
    ORG 000BH   ; смещение на 11 байт
    LJMP    TIME_00 ; переход на обработку переполнения таймера
 
    ORG 0100H   ; пропускаем первые 256 байт, которые отводятся под блок PSP
    
DIGITS: DB  03fh,06h,05bh,04fh,066h,06dh,07dh,07h,07fh,06fh ; цифры на индикаторе от 0 до 9
 
SBROS:  CLR TCON.4      ; остановка таймера 
    MOV R3, #00H    ; обнуляем R3
    MOV TMOD, #1    ; запускаем т/с в режиме таймера
    MOV P1, #00H    ; обнуляем P1
    MOV P3, #00H    ; обнуляем P3 
 
START:  CLR A   ; очищаем аккумулятор
    CLR C   ; обнуляем флаг переноса
    MOV R5, #10H    ; Нач. значение для перебора строк
    MOV R1, #004H   ; счетчик декрементов при вычислении смещений регистра строк
 
; CJNE - сравнивает значения первых двх операндов и выполняет ветвление, если операнды не равны 
READ_ROW:   CJNE    R4, #0, READ_ROW;  проверка не нажата ли предыдущая кнопкаMOV   A, R5
    RRC A   ; Сдвиг содержимого аккумулятора вправо. седьмой бит = С
    JC  START   ; если установлен перенос (с=1), переход на метку старт 
    DEC R1  ; уменьшаем R1 - прошла обработка одной строки, переход на следующую
    MOV R5, A   ; в R5 помещаем следующую строку
    MOV P0, R5  ;подсветка очередной строки
 
    MOV A, P1   ;считывание столбцов 
    JZ  READ_ROW    ; переход, если содержимое аккумулятора равно 0
    
 
    MOV R4, #1      ; нажата ли кнопка в данной строке
    MOV DPTR, #DIGITS
 
    MOV R2, #0      ;счётчик инкрементов для вычисления номера столбца   
NEXT:   INC R2
    RRC A   ; Сдвиг содержимого аккумулятора вправо через флаг переноса
    JNC NEXT    ; если установлен перенос, переход на метку next
    ; JB - если бит равен нулю. вычисление первой цифры номера кнопки
    JB P1.0, OUT1_0      
        JB P1.1, OUT1_0
        JB P1.3, OUT1_1
        JB P1.2, OUT1_0
 
OUT1_1: MOV P2, #00000110B ; код единицы
    LJMP    OUT2
OUT1_0: MOV P2, #00111111B ; код нуля
 
OUT2:   MOV A, R1       ;вычисление второй цифры номера кнопки
    MOV B, #004H    ; число смещений
    MUL AB
    DEC R2
    ADD A, R2
 
    MOVC    A, @A+DPTR  ; загружает аккумулятор константой из памяти программы
    MOV P3, A   ; выдает константу в индикатор - P3
    
    MOV TH0, #76
    MOV TL0, #01
    MOV IE, #10000010B  ;   прерывания разрешены для T/C0
    SETB    TCON.4
    LJMP    READ_ROW
 
TIME_00:    INC R3  ;обработки прерывания по переполнению таймера 0
    CJNE    R3, #20, CYCLE  ;ожидание 1 сек
 
    CLR TCON.4      ;остановка таймер 0
    MOV P2, #0      ;погашение индикатора порта 2
    MOV P3, #0      ;погашение индикатора порта 3
    MOV R4, #0      ;сброс флажка индикации предыдущей кнопки
    MOV R3, #00H
CYCLE:  RETI
 
    END
при запуске программы происходит опрос клавиатуры построчно. но если кнопка нажата, ничего, к сожалению, не происходит соответственно, не получается определить какая именно кнопка нажата, чтобы вывести ее номер на индикатор..
помогите, кто чем может)
_Iren_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Индикаторы CapsLock, NumLock, ScrollLock-не работают. Листинг внутри ИринаForeve Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 28.11.2012 12:19
кнопки rabotin Помощь студентам 3 27.02.2012 15:17
Индикаторы в адресной строке Phantom JavaScript, Ajax 4 02.03.2010 12:13
UCOZ: Кнопки кнопки на изображении ReDuX HTML и CSS 19 25.04.2008 02:39
триггерные кнопки и кнопки переключатели в DELPHI MARGO Помощь студентам 3 12.11.2007 17:35