-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathusart_without_array.asm
executable file
·96 lines (90 loc) · 3.1 KB
/
usart_without_array.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
.include "m32def.inc"
.org 0
jmp reset ; вектор прерывания по сброрсу
jmp int_0 ; вектор прерывания по внешнему входу INT0
jmp int_1 ; вектор прерывания по внешнему входу INT1
jmp int_2 ; вектор прерывания по внешнему входу INT2
jmp timer2_comp ; вектор прерывания по совпадению T/C2
jmp timer2_ovf ; вектор прерывания по переполнению T/C2
jmp timer1_capt ; вектор прерывания по захвату T/C1
jmp timer1_compa ; вектор прерывания по совпадению T/C1A
jmp timer1_compb ; вектор прерывания по совпадению T/C1B
jmp timer1_ovf ; вектор прерывания по переполнению T/C2
jmp timer0_comp ; вектор прерывания по совпадению T/C0
jmp timer0_ovf ; вектор прерывания по переполнению T/C2
jmp spi_cts ; вектор прерывания по окончанию обмена SPI
jmp usart_rxc ; вектор прерывания по окончанию приема USART
jmp usart_udre ; вектор прерывания когда UDR передатчика ...
jmp usart_txc ; вектор прерывания по окончании передачи USART
jmp a_d_c ; вектор прерывания по окончании преобразовании АЦП
jmp ee_rdy ; вектор прерывания по готовности EEPROM
jmp ana_comp ; вектор прерывания от аналогового компаратора
jmp t_w_i ; вектор прерывания по окончании обмена TWI
jmp spm_rdy ; вектор прерывания по готовности SPM
; ПОДПРОГРАММА ИНИЦИАЛИЗАЦИИ
reset:
cli; флаг i=0 все прерывания запрещены
ldi r16, 0x04 ; задаем Stack Pointer size High
out SPH, r16
ldi r16, 0x5f; задаем Stack Pointer size Low
out SPL, r16
ldi r16, 0x02
out DDRD, r16 ; установка PD1-PD0 на выход и вход соответственно
;настройка USART
ldi r16, 0x00 ; Настройка BAUD = 9600 бит/с при F = 16 МГц, 0,15625% погрешность
out UBRRH, r16
ldi r16, 0x67
out UBRRL, r16 ; запись числа 103(104,16 - 1) в UBRR
ldi r16, 0b10110100; выбор UCSRC и установка размера посылки (7 бит), бит нечетности и один стоп бит
out UCSRC, r16
ldi r16, 0b00011000;
out UCSRB, r16; включение отправки и приема
ldi r16, 0x00
out UCSRA, r16; очистка флагов
sei; разрешение работы прерываний
main: nop
sbic UCSRA, 7; проверка флага наличия данных в регистре UDR(recieve)
rcall peredacha_PK ; вызов подпрограммы проверки работы USART
rjmp main ; переход в начало программы
peredacha_PK:
in r16, UDR
nop
wait_0: sbis UCSRA, 5 ; проверка на то, пуст ли регистр UDR
rjmp wait_0
out UDR, r9 ; отравка данных из регистра r9 в регистр UDR(transmit)
nop
wait_1: sbis UCSRA, 5 ; проверка на то, пуст ли регистр UDR
rjmp wait_1
out UDR, r10 ; отравка данных из регистра r10 в регистр UDR(transmit)
nop
wait_2: sbis UCSRA, 5 ; проверка на то, пуст ли регистр UDR
rjmp wait_2
out UDR, r11 ; отравка данных из регистра r11 в регистр UDR(transmit)
nop
wait_3: sbis UCSRA, 5 ; проверка на то, пуст ли регистр UDR
rjmp wait_3
out UDR, r12 ; отравка данных из регистра r12 в регистр UDR(transmit)
nop
wait_4: sbis UCSRA, 5 ; проверка на то, пуст ли регистр UDR
rjmp wait_4
ret ; возврат из подпрограммы
int_0:
int_1:
int_2:
timer2_comp:
timer2_ovf:
timer1_capt:
timer1_compa:
timer1_compb:
timer1_ovf:
timer0_comp:
timer0_ovf:
spi_cts:
usart_rxc:
usart_udre:
usart_txc:
a_d_c:
ee_rdy:
ana_comp:
t_w_i:
spm_rdy: reti