Надо с частотой дискретизации опросить 1 дискретный вход.Если он равен 0,то 1 дискретный выход равен 1.если он равен 1,то 1д.выход равен 0.Надо опрашивать каждые 50мс по прерыванию таймер/счетчик 0. На выходе показывать данные с входа порт 1 и выхода порт 0.По схеме первый дискретный вход соответствует на цпу порту 1.0,а выход — порту 0.0
Вот написал код, но не работает...
; ОПРЕДЕЛЕНИЯ
Counter EQU R3 ; Счетчик 50 мс-ых интервалов
Flag EQU R4 ; Признак окончания интервала в 50 мк
; Настройка векторов прерываний
org 00h ; Reset
jmp begin ; Запуск микроконтроллера
org 0Bh ; Прерывание от таймера 0
jmp Timer0_Int ; переход на обработчик
; Обработчик прерывания от таймера 0
org 30h
Timer0_Int:
; настраиваем таймер на 50 мс цикл
MOV TH0, #3Ch ; старший байт таймера
MOV TL0, #0B0h ; младший байт таймера
MOV flag, #50 ; выставляем признак того, что прошло 50 мк
RETI ; выходим из обработчика прерывания
; Программа микроконтроллера
org 50h ; адрес начала программы
begin:
; настраиваем таймер0 на 50 мс цикл
MOV TMOD,#01H ; таймер0 в режим 1
MOV TH0, #3Ch ; старший байт таймера
MOV TL0, #0B0h ; младший байт таймера
; Инициализируем работу с прерываниями
MOV IE, #0 ; обнуляем
SETB ET0 ; Прерывание от таймера 0 - по переполнению
SETB EA ; разрешаем прерывания
SETB TR0 ; запуск таймера 0
; цикл работы программы
next:
; Проверяем окончание интервала в 50 мк
CJNE flag, #50, check ;
SJMP next ; идем снова на проверку окончания 50 мк
check:
; обнуляем признак 50 мк
MOV flag, #0
JB P1.0,continue
SETB P0.0
SJMP next;
continue:
CLR P0.0
SJMP next;
end ; конец программы
16.05.07 21:10: Перенесено модератором из 'Алгоритмы' — Кодт
добавлена разметка — Кодт