mov BUFFER_VAL3, SBUF
clr P2.7
clr REN
ret
display_results:
mov P1, BUFFER_VAL1 ;на защёлки дисплея -
;1 байт пакета
setb P2.0 ;такт на защёлку 1
clr P2.0
mov P1, BUFFER_VAL2
setb P2.1
clr P2.1
mov P1, BUFFER_VAL3
setb P2.2
clr P2.2
ret
initialize_xchange:
clr EX0 ;запрет на запросы
;о считывании операндов
call read_values ;считать операнды
call transmit_values ;передать операнды
call recieve_values ;получить пакет с результатом
call display_results ;отобразить пакет
setb EX0
reti
UART_message_handler:
reti
ORG 0003h ;вектор прерывания INT0
jmp initialize_xchange ;начало цикла обмена
ORG 0023h ;вектор прерывания UART
jmp UART_message_handler ;переход на
;обработчик UART
ORG 0000h
jmp main
END
Листинг для 2-го устройства (приём-отображение-расчёт-передача)
;Calculating module
BUFFER_VAL1 SET R0 ;буфер данных 1
BUFFER_VAL2 SET R1 ; ... 2
BUFFER_VAL3 SET R2 ; ... 3
ORG 0100h
main:
call init_devices ;инициализация модулей и
;регистров
main_cycle:jmp main_cycle ;ожидание прерывания от
;передатчика
init_devices:
clr EA ;запрет прерываний во
;время инициализации
mov P3, #0FFh ;альтернативные функции порта
;INT0 используется для сигнализации о
;готовности передатчика
mov P0, #00h
mov P1, #00h ;порт - выход на защёлки монитора
mov P2, #00h ;порт управления
;P2.0 - CLK для защёлки
;позиции 1
;P2.1 - ... 2
;P2.2 - ... 3
;P2.6 - сброс
;P2.7 - запрос у передатчика/подтверждение
setb P2.6 ;сброс
clr P2.6
mov SCON, #01000000b ;установка UART в режим 1
mov PCON, #10000000b ;без удвоения скорости передачи
;настройка частоты передачи UART
mov TMOD, #00100000b ;установка таймера 1
;в режим 2 (8-битный с перезагрузкой)
mov TCON, #00000101b ;реагировать на срез
;по внешним линиям
;INT0 и INT1
mov TH1, #97h ;перезагружаемое значение таймера
mov TL1,TH1 ;начальная установка счётчика
setb TR1 ;старт таймера
mov IE, #00010001b ;разрешить прерывания от UART и
;по линии INT0
mov IP, #00010000b ;более приоритетно
;прерывание по UART
setb EA ;глобально разрешить прерывания
ret
transmit_values:
setb P2.7 ;запрос на приём
;результата
clr EA
l_wait_ready_transmit:jb P3.2, l_wait_ready_transmit ;ожидание готовности
clr IE0
setb EA
mov SBUF, BUFFER_VAL1
l_wait_transmit1:jnb TI, l_wait_transmit1
clr TI
mov SBUF, BUFFER_VAL2
l_wait_transmit2:jnb TI, l_wait_transmit2
clr TI
mov SBUF, BUFFER_VAL3
l_wait_transmit3:jnb TI, l_wait_transmit3
clr TI
clr P2.7
ret
recieve_values:
setb REN ;разрешить приём по UART
setb P2.7 ;установить флаг
;готовности к приёму
l_wait_recieve1:jnb RI, l_wait_recieve1 ;ожидание получения
;операнда 1
clr RI
mov BUFFER_VAL1, SBUF ;сохранение операнда 1
l_wait_recieve2:jnb RI, l_wait_recieve2
clr RI
mov BUFFER_VAL2, SBUF
l_wait_recieve3:jnb RI, l_wait_recieve3
clr RI
mov BUFFER_VAL3, SBUF
clr P2.7 ;сброс флага готовности
;к приёму
clr REN ;запрет приёма
ret
display_values:
mov P1, BUFFER_VAL1 ;подача на защёлки
;1-го операнда
setb P2.0 ;генерация такта для защёлки 1
clr P2.0
mov P1, BUFFER_VAL2
setb P2.1
clr P2.1
mov P1, BUFFER_VAL3
setb P2.2
clr P2.2
ret
calculate_values:
;реализация формулы
;BUFFER_VAL2=min(BUFFER_VAL1,BUFFER_VAL2)+BUFFER_VAL3
;BUFFER_VAL1=02H
;BUFFER_VAL3=BUFFER_VAL1 xor BUFFER_VAL2
clr C
mov A, BUFFER_VAL1
subb A, BUFFER_VAL2
jc l_val1
mov A, BUFFER_VAL2
jmp l_adding
l_val1:mov A, BUFFER_VAL1
l_adding:add A, BUFFER_VAL3
mov BUFFER_VAL1, #02h
mov BUFFER_VAL2, A
xrl A, BUFFER_VAL1
mov BUFFER_VAL3, A
ret
initialize_xchange:
clr EX0 ;запрет на запросы
;от передатчика
call recieve_values ;получить операнды
clr EA ;не прерывать во
;время вычислений
call display_values ;отобразить полученные операнды
call calculate_values ;вычислить результат
setb EA
call transmit_values ;передача пакета
;с результатом
setb EX0
reti
UART_message_handler:
reti
ORG 0003h ;вектор прерывания INT0
jmp initialize_xchange ;начало цикла обмена
ORG 0023h ;вектор прерывания UART
jmp UART_message_handler ;переход на
;обработчик UART
ORG 0000h
jmp main
END
Схема электрическая принципиальная.
Выводы: к достоинствам UART в MCS-51 можно отнести минимальное число линий для дуплексной передачи данных, приём данных в фоновом режиме, возможность настройки частоты передачи, к недостаткам – отсутствие линий запроса и подтверждения готовности, неявная взаимосвязь модулей устройства (для настройки скорости передачи используется таймер 1).
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.