📄 uart.s
字号:
.module UART.c
.area data(ram, con, rel)
_Rx_counter::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile G:\猛\avr实践\UART\UART.c
.dbsym e Rx_counter _Rx_counter c
_Tx_counter::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile G:\猛\avr实践\UART\UART.c
.dbsym e Tx_counter _Tx_counter c
_Tx_data_buf::
.blkb 2
.area idata
.byte 222,'o
.area data(ram, con, rel)
.dbfile G:\猛\avr实践\UART\UART.c
.blkb 2
.area idata
.byte 'd,50
.area data(ram, con, rel)
.dbfile G:\猛\avr实践\UART\UART.c
.blkb 2
.area idata
.byte 20,10
.area data(ram, con, rel)
.dbfile G:\猛\avr实践\UART\UART.c
.blkb 2
.area idata
.byte 5,2
.area data(ram, con, rel)
.dbfile G:\猛\avr实践\UART\UART.c
.blkb 2
.area idata
.byte 1,22
.area data(ram, con, rel)
.dbfile G:\猛\avr实践\UART\UART.c
.dbsym e Tx_data_buf _Tx_data_buf A[10:10]c
_UART0_TX_flag::
.blkb 1
.area idata
.byte 1
.area data(ram, con, rel)
.dbfile G:\猛\avr实践\UART\UART.c
.dbsym e UART0_TX_flag _UART0_TX_flag c
_UART0_RX_flag::
.blkb 1
.area idata
.byte 1
.area data(ram, con, rel)
.dbfile G:\猛\avr实践\UART\UART.c
.dbsym e UART0_RX_flag _UART0_RX_flag c
_Type_flag::
.blkb 1
.area idata
.byte 4
.area data(ram, con, rel)
.dbfile G:\猛\avr实践\UART\UART.c
.dbsym e Type_flag _Type_flag c
_LED_table::
.blkb 2
.area idata
.byte 63,6
.area data(ram, con, rel)
.dbfile G:\猛\avr实践\UART\UART.c
.blkb 2
.area idata
.byte 91,'O
.area data(ram, con, rel)
.dbfile G:\猛\avr实践\UART\UART.c
.blkb 2
.area idata
.byte 'f,'m
.area data(ram, con, rel)
.dbfile G:\猛\avr实践\UART\UART.c
.blkb 2
.area idata
.byte 125,7
.area data(ram, con, rel)
.dbfile G:\猛\avr实践\UART\UART.c
.blkb 2
.area idata
.byte 127,'o
.area data(ram, con, rel)
.dbfile G:\猛\avr实践\UART\UART.c
.blkb 2
.area idata
.byte 'w,124
.area data(ram, con, rel)
.dbfile G:\猛\avr实践\UART\UART.c
.blkb 2
.area idata
.byte 57,94
.area data(ram, con, rel)
.dbfile G:\猛\avr实践\UART\UART.c
.blkb 2
.area idata
.byte 'y,'q
.area data(ram, con, rel)
.dbfile G:\猛\avr实践\UART\UART.c
.blkb 2
.area idata
.byte 'v,56
.area data(ram, con, rel)
.dbfile G:\猛\avr实践\UART\UART.c
.blkb 2
.area idata
.byte 55,62
.area data(ram, con, rel)
.dbfile G:\猛\avr实践\UART\UART.c
.blkb 2
.area idata
.byte 's,92
.area data(ram, con, rel)
.dbfile G:\猛\avr实践\UART\UART.c
.blkb 2
.area idata
.byte 64,0
.area data(ram, con, rel)
.dbfile G:\猛\avr实践\UART\UART.c
.dbsym e LED_table _LED_table A[24:24]c
.area vector(rom, abs)
.org 80
jmp _UART0_TX_INT
.area data(ram, con, rel)
.dbfile G:\猛\avr实践\UART\UART.c
.area vector(rom, abs)
.org 72
jmp _UART0_RX_INT
.area data(ram, con, rel)
.dbfile G:\猛\avr实践\UART\UART.c
.area vector(rom, abs)
.org 4
jmp _External_INT_0
.area data(ram, con, rel)
.dbfile G:\猛\avr实践\UART\UART.c
.area vector(rom, abs)
.org 8
jmp _External_INT_1
.area data(ram, con, rel)
.dbfile G:\猛\avr实践\UART\UART.c
.area vector(rom, abs)
.org 12
jmp _External_INT_2
.area data(ram, con, rel)
.dbfile G:\猛\avr实践\UART\UART.c
.area text(rom, con, rel)
.dbfile G:\猛\avr实践\UART\UART.c
.dbfunc e main _main fV
; i -> R22
.even
_main::
.dbline -1
.dbline 86
; #include <iom128.h>
; #include <macros.h>
;
; //LED 开关定义
;
; #define Red_LED_on PORTB&~BIT(0)
; #define Red_LED_off PORTB|(1<<0)
; #define Green_LED_on PORTB&(~(1<<1))
; #define Green_LED_off PORTB|(1<<1)
; #define Yellow_LED_on PORTB&(~(1<<2))
; #define Yellow_LED_off PORTB|(1<<2)
;
; //UART
; unsigned char Rx_counter = 0;
; unsigned char Tx_counter = 0;
; unsigned char Tx_data_buf[] = {222,111,100,50,20,10,5,2,1,22};
; unsigned char Tx_data;
; unsigned char Rx_data_buf[12];
; unsigned char Rx_data;
; unsigned char UART0_TX_flag = 1;
; unsigned char UART0_RX_flag = 1;
; unsigned char Type_flag = 4;
; //Display
; unsigned char number_bai;
; unsigned char number_shi;
; unsigned char number_ge ;
; unsigned char Display_type;
; unsigned char Display_value;
; unsigned char LED_table[]=
; {
; 0x3F, //"0"
; 0x06, //"1"
; 0x5B, //"2"
; 0x4F, //"3"
; 0x66, //"4"
; 0x6D, //"5"
; 0x7D, //"6"
; 0x07, //"7"
; 0x7F, //"8"
; 0x6F, //"9"
; 0x77, //"A"
; 0x7C, //"B"
; 0x39, //"C"
; 0x5E, //"D"
; 0x79, //"E"
; 0x71, //"F"
; 0x76, //"H"
; 0x38, //"L"
; 0x37, //"n"
; 0x3E, //"u"
; 0x73, //"P"
; 0x5C, //"o"
; 0x40, //"-"
; 0x00, //熄灭
; };
;
; //use for test;
; unsigned char m;
;
; //define Interrupt Vactor
;
; #pragma interrupt_handler UART0_TX_INT:21 //外部中断0
; #pragma interrupt_handler UART0_RX_INT:19 //外部中断1
; #pragma interrupt_handler External_INT_0:2 //外部中断0
; #pragma interrupt_handler External_INT_1:3 //外部中断1
; #pragma interrupt_handler External_INT_2:4 //外部中断2
;
; //pre_define
;
; void Port_initialize(void);
; void INT_initialize(void);
; void UART_initialize(void);
;
; void UART0_TX_INT(void);
; void UART0_RX_INT(void);
; void External_INT_0(void);
; void External_INT_1(void);
; void External_INT_2(void);
;
; void LED_Display(unsigned char Type,unsigned char Data);
; void DATA_to_NUM(unsigned char data);
; void Delay(void);
;
;
; void main(void)
; {
.dbline 89
; unsigned char i;
;
; Port_initialize();
xcall _Port_initialize
.dbline 90
; UART_initialize();
xcall _UART_initialize
.dbline 91
; INT_initialize();
xcall _INT_initialize
.dbline 93
;
; for (; ; )
L2:
.dbline 94
; {
.dbline 95
; switch (Type_flag)
lds R20,_Type_flag
clr R21
cpi R20,0
cpc R20,R21
breq L9
X0:
cpi R20,1
ldi R30,0
cpc R21,R30
breq L10
cpi R20,2
ldi R30,0
cpc R21,R30
breq L11
cpi R20,3
ldi R30,0
cpc R21,R30
breq L12
xjmp L6
X1:
.dbline 96
; {
L9:
.dbline 98
; case 0: //发送的数值
; {
.dbline 99
; Display_type = 0;
clr R2
sts _Display_type,R2
.dbline 100
; Display_value = Tx_data;
lds R2,_Tx_data
sts _Display_value,R2
.dbline 102
;
; }break;
.dbline 102
xjmp L7
L10:
.dbline 105
;
; case 1: //发送计数
; {
.dbline 106
; Display_type = 1;
ldi R24,1
sts _Display_type,R24
.dbline 107
; Display_value = Tx_counter;
lds R2,_Tx_counter
sts _Display_value,R2
.dbline 109
;
; }break;
.dbline 109
xjmp L7
L11:
.dbline 112
;
; case 2: //接收的数值
; {
.dbline 113
; Display_type = 2;
ldi R24,2
sts _Display_type,R24
.dbline 114
; Display_value = Rx_data;
lds R2,_Rx_data
sts _Display_value,R2
.dbline 116
;
; }break;
.dbline 116
xjmp L7
L12:
.dbline 119
;
; case 3: //接收计数
; {
.dbline 120
; Display_type = 3;
ldi R24,3
sts _Display_type,R24
.dbline 121
; Display_value = Rx_counter;
lds R2,_Rx_counter
sts _Display_value,R2
.dbline 123
;
; }break;
.dbline 123
xjmp L7
L6:
.dbline 126
;
; default:
; {
.dbline 127
; Display_type = 0x0f;
ldi R24,15
sts _Display_type,R24
.dbline 129
;
; }break;
.dbline 129
L7:
.dbline 132
; }
;
; LED_Display(Display_type,Display_value); //数码管显示
lds R18,_Display_value
lds R16,_Display_type
xcall _LED_Display
.dbline 134
;
; if (UART0_TX_flag == 0)
lds R2,_UART0_TX_flag
tst R2
brne L13
.dbline 135
; {
.dbline 136
; PORTB = Red_LED_on;
cbi 0x18,0
.dbline 138
;
; for (i=0;i<10 ;i++ )
clr R22
xjmp L18
L15:
.dbline 139
.dbline 140
xcall _Delay
.dbline 141
L16:
.dbline 138
inc R22
L18:
.dbline 138
cpi R22,10
brlo L15
.dbline 143
; {
; Delay();
; }
;
; UART0_TX_flag = 1;
ldi R24,1
sts _UART0_TX_flag,R24
.dbline 144
; }
xjmp L14
L13:
.dbline 146
; else
; {
.dbline 147
; PORTB = Red_LED_off;
sbi 0x18,0
.dbline 148
; }
L14:
.dbline 150
;
; if (UART0_RX_flag == 0)
lds R2,_UART0_RX_flag
tst R2
brne L19
.dbline 151
; {
.dbline 152
; PORTB = Green_LED_on;
cbi 0x18,1
.dbline 154
;
; for (i=0;i<10 ;i++ )
clr R22
xjmp L24
L21:
.dbline 155
.dbline 156
xcall _Delay
.dbline 157
L22:
.dbline 154
inc R22
L24:
.dbline 154
cpi R22,10
brlo L21
.dbline 159
; {
; Delay();
; }
;
; UART0_RX_flag = 1;
ldi R24,1
sts _UART0_RX_flag,R24
.dbline 160
; }
xjmp L2
L19:
.dbline 162
.dbline 163
sbi 0x18,1
.dbline 164
.dbline 165
.dbline 93
.dbline 93
xjmp L2
X2:
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r i 22 c
.dbend
.dbfunc e Port_initialize _Port_initialize fV
.even
_Port_initialize::
.dbline -1
.dbline 169
; else
; {
; PORTB = Green_LED_off;
; }
; }
; }
;
; void Port_initialize(void)
; {
.dbline 170
; DDRA = 0xFF;
ldi R24,255
out 0x1a,R24
.dbline 171
; DDRB = 0xFF;
out 0x17,R24
.dbline 172
; DDRD = 0x00;
clr R2
out 0x11,R2
.dbline 173
; PORTB = 0xFF;
out 0x18,R24
.dbline -2
.dbline 174
; }
L25:
.dbline 0 ; func end
ret
.dbend
.dbfunc e INT_initialize _INT_initialize fV
.even
_INT_initialize::
.dbline -1
.dbline 176
; void INT_initialize(void)
; {
.dbline 177
; EICRA = 0xaa; //fall edge trigger
ldi R24,170
sts 106,R24
.dbline 178
; EICRB = 0x00; //no influence
clr R2
out 0x3a,R2
.dbline 179
; EIMSK = 0x0f;
ldi R24,15
out 0x39,R24
.dbline 181
;
; SEI();
sei
.dbline -2
.dbline 183
;
; }
L26:
.dbline 0 ; func end
ret
.dbend
.dbfunc e UART_initialize _UART_initialize fV
.even
_UART_initialize::
.dbline -1
.dbline 185
; void UART_initialize(void)
; {
.dbline 186
; CLI();
cli
.dbline 188
;
; UBRR0H = 0x00;
clr R2
sts 144,R2
.dbline 189
; UBRR0L = 0x67; //波特率9600bps
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -