Приклад програми спряження послідовним інтерфейсом
$mod51
;Програма відображає прийняті байти на статичному індикаторі
;та передає у відповідь байти збільшені на 1
mov SCON, #01010010b ;Ініціалізація послідовного інтерфейсу
mov TMOD, #00100000b ;Налаштування таймера 1
mov TH1, #254 ;Частота передачі 9600
setb TR1 ;Запуск таймера
MLoop:
jnb RI, MLoop_NotRI ;Отримано байт?
clr RI ;Очистка ознаки прийому
mov a, SBUF ;Читання прийнятого байта
mov DPTR, #0B000h ;Відображення на статичному індикаторі
movx @DPTR, a
inc a ;Інкримент байта і передача
jnb TI, $ ;Очікування закінчення передачі
clr TI ;Очистка ознаки закінчення передачі
mov SBUF, a ;Передача байта
MLoop_NotRI:
jmp MLoop
END
Наступний фрагмент демонструє приклад реалізації функцій налаштування послідовного інтерфейсу, прийому та передачі байта.
uart_init:
;Ініціалізація УАПП на швидкість 9600
mov SCON, #01010010b ;Ініціалізація послідовного інтерфейсу
mov TMOD, #00100000b ;Налаштування таймера 1
mov TH1, #254 ;Частота передачі 9600
setb TR1 ;Запуск таймера
ret
uart_rx:
;Очікує прийому байта. Прийнятий байт кладе в R7
jnb RI, $ ;Очікування закінчення прийому
clr RI ;Очистка ознаки закінчення прийом
mov R7, SBUF ;Читання прийнятого байта
ret
uart_tx:
;Очікує звільнення передавача після чого передає байт R7
jnb TI, $ ;Очікування закінчення передачі
clr TI ;Очистка ознаки закінчення передачі
mov SBUF, R7 ;Передача байта
ret
Варіанти індивідуальних завдань
Передавати коди натиснутих клавіш послідовним інтерфейсом.
На вхід УАПП поступають символи '0'..'9'. Відображати останні 4 цифри на статичному індикаторі.
Відображати суму всіх отриманих байт.
По запиту '?' відповідати прізвищем студента. Рядок відповіді закінчувати символом CR (#0Dh).
На кожний символ '0'..'9' відповісти назвою цифри "zero".."nine", для всіх інших символів відповідати "unknown". Рядок відповіді закінчувати символом CR (#0Dh).
Завдання вибирають із таблиці 15 згідно варіанту
Таблиця 13. Завдання для лабораторної роботи №7
Швидкість |
600 |
1200 |
2400 |
4800 |
9600 |
19200 |
38400 |
Завдання 1 |
15 |
20 |
25 |
30 |
0 |
5 |
10 |
Завдання 2 |
16 |
21 |
26 |
31 |
1 |
6 |
11 |
Завдання 3 |
17 |
22 |
27 |
32 |
2 |
7 |
12 |
Завдання 4 |
18 |
23 |
28 |
33 |
3 |
8 |
13 |
Завдання 5 |
19 |
24 |
29 |
34 |
4 |
9 |
14 |