⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.s

📁 AVR单片机ATMEGA128实习之—串口通信(附带Proteus仿真例子)
💻 S
📖 第 1 页 / 共 2 页
字号:
	.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 + -