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

📄 uart.lst

📁 AVR单片机ATMEGA128实习之—串口通信(附带Proteus仿真例子)
💻 LST
📖 第 1 页 / 共 2 页
字号:
__text_start:
__start:
    005A EFCF      LDI	R28,0xFF
    005B E1D0      LDI	R29,0x10
    005C BFCD      OUT	P3D,R28
    005D BFDE      OUT	P3E,R29
    005E 51C0      SUBI	R28,0x10
    005F 40D0      SBCI	R29,0
    0060 EA0A      LDI	R16,0xAA
    0061 8308      STD	R16,0+Y
    0062 2400      CLR	R0
    0063 E2E7      LDI	R30,0x27
    0064 E0F1      LDI	R31,1
    0065 E011      LDI	R17,1
    0066 33EB      CPI	R30,0x3B
    0067 07F1      CPC	R31,R17
    0068 F011      BEQ	0x006B
    0069 9201      ST	R0,Z+
    006A CFFB      RJMP	0x0066
    006B 8300      STD	R16,0+Z
    006C E8EC      LDI	R30,0x8C
    006D E0F0      LDI	R31,0
    006E E0A0      LDI	R26,0
    006F E0B1      LDI	R27,1
    0070 E010      LDI	R17,0
    0071 3BE3      CPI	R30,0xB3
    0072 07F1      CPC	R31,R17
    0073 F021      BEQ	0x0078
    0074 95C8      LPM
    0075 9631      ADIW	R30,1
    0076 920D      ST	R0,X+
    0077 CFF9      RJMP	0x0071
    0078 940E007B  CALL	_main
_exit:
    007A CFFF      RJMP	_exit
FILE: G:\猛\avr实践\UART\UART.c
(0001) #include <iom128.h>
(0002) #include <macros.h>
(0003) 
(0004) //LED 开关定义
(0005) 
(0006) #define	  Red_LED_on		PORTB&~BIT(0)
(0007) #define	  Red_LED_off		PORTB|(1<<0)
(0008) #define	  Green_LED_on		PORTB&(~(1<<1))
(0009) #define	  Green_LED_off		PORTB|(1<<1)
(0010) #define	  Yellow_LED_on		PORTB&(~(1<<2))
(0011) #define	  Yellow_LED_off	PORTB|(1<<2)
(0012) 
(0013) //UART
(0014) unsigned char Rx_counter = 0;
(0015) unsigned char Tx_counter = 0;
(0016) unsigned char Tx_data_buf[] = {222,111,100,50,20,10,5,2,1,22};
(0017) unsigned char Tx_data;
(0018) unsigned char Rx_data_buf[12];
(0019) unsigned char Rx_data;
(0020) unsigned char UART0_TX_flag	= 1;
(0021) unsigned char UART0_RX_flag	= 1;
(0022) unsigned char Type_flag = 4;
(0023) //Display
(0024) unsigned char number_bai;
(0025) unsigned char number_shi;
(0026) unsigned char number_ge ;
(0027) unsigned char Display_type;
(0028) unsigned char Display_value;
(0029) unsigned char LED_table[]=
(0030) {  
(0031)    0x3F,  //"0"
(0032)    0x06,  //"1"
(0033)    0x5B,  //"2"
(0034)    0x4F,  //"3"
(0035)    0x66,  //"4"
(0036)    0x6D,  //"5"
(0037)    0x7D,  //"6"
(0038)    0x07,  //"7"
(0039)    0x7F,  //"8"
(0040)    0x6F,  //"9"
(0041)    0x77,  //"A"
(0042)    0x7C,  //"B"
(0043)    0x39,  //"C"
(0044)    0x5E,  //"D"
(0045)    0x79,  //"E"
(0046)    0x71,  //"F"
(0047)    0x76,  //"H"
(0048)    0x38,  //"L"
(0049)    0x37,  //"n"
(0050)    0x3E,  //"u"
(0051)    0x73,  //"P"
(0052)    0x5C,  //"o"
(0053)    0x40,  //"-"
(0054)    0x00,  //熄灭                     
(0055) };
(0056) 
(0057) //use for test;
(0058) unsigned char m;
(0059) 
(0060) //define Interrupt Vactor
(0061) 
(0062) #pragma interrupt_handler UART0_TX_INT:21		//外部中断0
(0063) #pragma interrupt_handler UART0_RX_INT:19		//外部中断1
(0064) #pragma interrupt_handler External_INT_0:2		//外部中断0
(0065) #pragma interrupt_handler External_INT_1:3		//外部中断1
(0066) #pragma interrupt_handler External_INT_2:4		//外部中断2
(0067) 
(0068) //pre_define
(0069) 
(0070) void Port_initialize(void);
(0071) void INT_initialize(void);
(0072) void UART_initialize(void);
(0073) 
(0074) void UART0_TX_INT(void);
(0075) void UART0_RX_INT(void);
(0076) void External_INT_0(void);
(0077) void External_INT_1(void);
(0078) void External_INT_2(void);
(0079) 
(0080) void LED_Display(unsigned char Type,unsigned char Data);
(0081) void DATA_to_NUM(unsigned char data);
(0082) void Delay(void);
(0083) 
(0084) 
(0085) void main(void)
(0086) {
(0087) 	unsigned char i;
(0088) 	
(0089) 	Port_initialize();
_main:
  i                    --> R22
    007B D05F      RCALL	_Port_initialize
(0090) 	UART_initialize();
    007C D06E      RCALL	_UART_initialize
(0091) 	INT_initialize();
    007D D064      RCALL	_INT_initialize
(0092) 	
(0093) 	for (; ; )
(0094) 	{
(0095) 		switch (Type_flag)
    007E 9140010E  LDS	R20,0x10E
    0080 2755      CLR	R21
    0081 3040      CPI	R20,0
    0082 0745      CPC	R20,R21
    0083 F069      BEQ	0x0091
    0084 3041      CPI	R20,1
    0085 E0E0      LDI	R30,0
    0086 075E      CPC	R21,R30
    0087 F089      BEQ	0x0099
    0088 3042      CPI	R20,2
    0089 E0E0      LDI	R30,0
    008A 075E      CPC	R21,R30
    008B F0A9      BEQ	0x00A1
    008C 3043      CPI	R20,3
    008D E0E0      LDI	R30,0
    008E 075E      CPC	R21,R30
    008F F0C9      BEQ	0x00A9
    0090 C020      RJMP	0x00B1
(0096) 		{
(0097) 			case 0:				//发送的数值
(0098) 			{
(0099) 				Display_type = 0;
    0091 2422      CLR	R2
    0092 92200129  STS	_Display_type,R2
(0100) 				Display_value = Tx_data;
    0094 9020013A  LDS	R2,_Tx_data
    0096 92200128  STS	_Display_value,R2
(0101) 			
(0102) 			}break;
    0098 C01B      RJMP	0x00B4
(0103) 		
(0104) 			case 1:				//发送计数
(0105) 			{
(0106) 				Display_type = 1;
    0099 E081      LDI	R24,1
    009A 93800129  STS	_Display_type,R24
(0107) 				Display_value = Tx_counter;
    009C 90200101  LDS	R2,0x101
    009E 92200128  STS	_Display_value,R2
(0108) 			
(0109) 			}break;
    00A0 C013      RJMP	0x00B4
(0110) 
(0111) 			case 2:				//接收的数值
(0112) 			{
(0113) 				Display_type = 2;
    00A1 E082      LDI	R24,2
    00A2 93800129  STS	_Display_type,R24
(0114) 				Display_value = Rx_data;
    00A4 9020012D  LDS	R2,_Rx_data
    00A6 92200128  STS	_Display_value,R2
(0115) 
(0116) 			}break;
    00A8 C00B      RJMP	0x00B4
(0117) 
(0118) 			case 3:				//接收计数
(0119) 			{
(0120) 				Display_type = 3;
    00A9 E083      LDI	R24,3
    00AA 93800129  STS	_Display_type,R24
(0121) 				Display_value = Rx_counter;
    00AC 90200100  LDS	R2,0x100
    00AE 92200128  STS	_Display_value,R2
(0122) 			
(0123) 			}break;
    00B0 C003      RJMP	0x00B4
(0124) 
(0125) 			default:
(0126) 			{
(0127) 				Display_type = 0x0f;
    00B1 E08F      LDI	R24,0xF
    00B2 93800129  STS	_Display_type,R24
(0128) 				
(0129) 			}break;
(0130) 		}
(0131) 
(0132) 		LED_Display(Display_type,Display_value);		//数码管显示
    00B4 91200128  LDS	R18,_Display_value
    00B6 91000129  LDS	R16,_Display_type
    00B8 D0EA      RCALL	_LED_Display
(0133) 		
(0134) 		if (UART0_TX_flag == 0)
    00B9 9020010C  LDS	R2,0x10C
    00BB 2022      TST	R2
    00BC F459      BNE	0x00C8
(0135) 		{
(0136) 			PORTB = Red_LED_on;
    00BD 98C0      CBI	P18,0
(0137) 
(0138) 			for (i=0;i<10 ;i++ )
    00BE 2766      CLR	R22
    00BF C002      RJMP	0x00C2
(0139) 			{
(0140) 				Delay();
    00C0 D038      RCALL	_Delay
    00C1 9563      INC	R22
    00C2 306A      CPI	R22,0xA
    00C3 F3E0      BCS	0x00C0
(0141) 			}
(0142) 
(0143) 			UART0_TX_flag = 1;
    00C4 E081      LDI	R24,1
    00C5 9380010C  STS	0x10C,R24
(0144) 		}
    00C7 C001      RJMP	0x00C9
(0145) 		else
(0146) 		{
(0147) 			PORTB = Red_LED_off;
    00C8 9AC0      SBI	P18,0
(0148) 		}
(0149) 		
(0150) 		if (UART0_RX_flag == 0)
    00C9 9020010D  LDS	R2,0x10D
    00CB 2022      TST	R2
    00CC F459      BNE	0x00D8
(0151) 		{
(0152) 			PORTB = Green_LED_on;
    00CD 98C1      CBI	P18,1
(0153) 
(0154) 			for (i=0;i<10 ;i++ )
    00CE 2766      CLR	R22
    00CF C002      RJMP	0x00D2
(0155) 			{
(0156) 				Delay();
    00D0 D028      RCALL	_Delay
    00D1 9563      INC	R22
    00D2 306A      CPI	R22,0xA
    00D3 F3E0      BCS	0x00D0
(0157) 			}
(0158) 
(0159) 			UART0_RX_flag = 1;
    00D4 E081      LDI	R24,1
    00D5 9380010D  STS	0x10D,R24
(0160) 		}
    00D7 CFA6      RJMP	0x007E
(0161) 		else
(0162) 		{
(0163) 			PORTB = Green_LED_off;
    00D8 9AC1      SBI	P18,1
    00D9 CFA4      RJMP	0x007E
    00DA 9508      RET
(0164) 		}
(0165) 	}
(0166) }
(0167) 
(0168) void Port_initialize(void)
(0169) {
(0170) 	DDRA = 0xFF;
_Port_initialize:
    00DB EF8F      LDI	R24,0xFF
    00DC BB8A      OUT	P1A,R24
(0171) 	DDRB = 0xFF;
    00DD BB87      OUT	P17,R24
(0172) 	DDRD = 0x00;
    00DE 2422      CLR	R2
    00DF BA21      OUT	P11,R2
(0173) 	PORTB = 0xFF;
    00E0 BB88      OUT	P18,R24
(0174) }
    00E1 9508      RET
(0175) void INT_initialize(void)
(0176) {
(0177) 	EICRA = 0xaa;		//fall edge trigger
_INT_initialize:
    00E2 EA8A      LDI	R24,0xAA
    00E3 9380006A  STS	0x6A,R24
(0178) 	EICRB = 0x00;		//no influence
    00E5 2422      CLR	R2
    00E6 BE2A      OUT	P3A,R2
(0179) 	EIMSK = 0x0f;
    00E7 E08F      LDI	R24,0xF
    00E8 BF89      OUT	P39,R24
(0180) 
(0181) 	SEI();
    00E9 9478      BSET	7
(0182) 
(0183) }
    00EA 9508      RET
(0184) void UART_initialize(void)
(0185) {
(0186) 	CLI();
_UART_initialize:
    00EB 94F8      BCLR	7
(0187) 	
(0188) 	UBRR0H = 0x00;
    00EC 2422      CLR	R2
    00ED 92200090  STS	0x90,R2
(0189) 	UBRR0L = 0x67;		//波特率9600bps
    00EF E687      LDI	R24,0x67
    00F0 B989      OUT	P09,R24
(0190) 	UCSR0A = 0x00;
    00F1 B82B      OUT	P0B,R2
(0191) 	UCSR0B = 0x98;		//11011000接收与发送使能
    00F2 E988      LDI	R24,0x98
    00F3 B98A      OUT	P0A,R24
(0192) 	UCSR0C = 0x26;		//00100110帧格式: 8bits,1stop bit,P 校验
    00F4 E286      LDI	R24,0x26
    00F5 93800095  STS	0x95,R24
(0193) 
(0194) 	SEI();
    00F7 9478      BSET	7
(0195) }
    00F8 9508      RET
(0196) void Delay(void)
(0197) {
(0198) 	unsigned int i;
(0199) 
(0200) 	for ( i = 0; i < 6000; i++ )
_Delay:
  i                    --> R16
    00F9 2700      CLR	R16
    00FA 2711      CLR	R17
    00FB C003      RJMP	0x00FF
(0201) 	{
(0202) 		NOP();
    00FC 0000      NOP
    00FD 5F0F      SUBI	R16,0xFF
    00FE 4F1F      SBCI	R17,0xFF
    00FF 3700      CPI	R16,0x70
    0100 E1E7      LDI	R30,0x17
    0101 071E      CPC	R17,R30
    0102 F3C8      BCS	0x00FC
(0203) 	}
(0204) }
    0103 9508      RET
_UART0_TX_INT:
    0104 922A      ST	R2,-Y
    0105 938A      ST	R24,-Y
    0106 939A      ST	R25,-Y
    0107 93EA      ST	R30,-Y
    0108 93FA      ST	R31,-Y
    0109 B62F      IN	R2,P3F
    010A 922A      ST	R2,-Y
(0205) 
(0206) void UART0_TX_INT(void)
(0207) {
(0208) 	UART0_TX_flag = 0;
    010B 2422      CLR	R2
    010C 9220010C  STS	0x10C,R2
(0209) 	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -