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

📄 uart.lst

📁 该代码是ATMEGA16单片机下的串口通讯程序
💻 LST
字号:
__start:
__text_start:
    002B E5CF      LDI	R28,0x5F
    002C E0D4      LDI	R29,4
    002D BFCD      OUT	P3D,R28
    002E BFDE      OUT	P3E,R29
    002F 51C0      SUBI	R28,0x10
    0030 40D0      SBCI	R29,0
    0031 EA0A      LDI	R16,0xAA
    0032 8308      STD	R16,0+Y
    0033 2400      CLR	R0
    0034 E6E2      LDI	R30,0x62
    0035 E0F0      LDI	R31,0
    0036 E010      LDI	R17,0
    0037 36E2      CPI	R30,0x62
    0038 07F1      CPC	R31,R17
    0039 F011      BEQ	0x003C
    003A 9201      ST	R0,Z+
    003B CFFB      RJMP	0x0037
    003C 8300      STD	R16,0+Z
    003D E5E4      LDI	R30,0x54
    003E E0F0      LDI	R31,0
    003F E6A0      LDI	R26,0x60
    0040 E0B0      LDI	R27,0
    0041 E010      LDI	R17,0
    0042 35E6      CPI	R30,0x56
    0043 07F1      CPC	R31,R17
    0044 F021      BEQ	0x0049
    0045 95C8      LPM
    0046 9631      ADIW	R30,1
    0047 920D      ST	R0,X+
    0048 CFF9      RJMP	0x0042
    0049 940E004C  CALL	_main
_exit:
    004B CFFF      RJMP	_exit
FILE: D:\ELECTRICS\MCU\AVR\ICC_EXAM\UART\uart.c
(0001) // **************************************************************
(0002) // *** 		              AVR单片机应用程序 	  	          ***
(0003) // ***                    RS232通信演示程序	  		          ***
(0004) // ***                       2005年10月                       ***
(0005) // ***      目标MCU:MEGA16,晶振:内部(INT)8MHZ,19200,8bit,N,1 ***
(0006) // ***		   实现将PC机串行给MEGA16的数送回给PCS机		  ***			  
(0007) // **************************************************************
(0008) #include<iom16v.h>
(0009) #include<macros.h>
(0010) #include "uart.h"
(0011) 
(0012) /*声明串口接收中断入口*/
(0013) #pragma interrupt_handler uart_rx:12 
(0014) unsigned char data_tx=0,data_rx=0; //定义发送缓存和接收缓存
(0015) 
(0016) 
(0017) 
(0018) /*RS232通信main函数*/	
(0019) void main(void)
(0020) {
(0021)  CLI();		   							    //关中断
_main:
    004C 94F8      BCLR	7
(0022)  uart_init();  	 					        //串口初始化		  
    004D D00F      RCALL	_uart_init
(0023)  SEI();										//开中断					  
    004E 9478      BSET	7
(0024)  while(1)
    004F CFFF      RJMP	0x004F
(0025)  {uart_rx;}
(0026) }
    0050 9508      RET
_uart_rx:
    0051 940E006C  CALL	push_lset
(0027) 
(0028) /*串口接收函数*/
(0029) void uart_rx(void) 
(0030) { 
(0031)    data_rx = UDR;
    0053 B02C      IN	R2,P0C
    0054 92200061  STS	0x61,R2
(0032)    data_tx=data_rx;
    0056 92200060  STS	0x60,R2
(0033)    putchar(data_tx);  
    0058 2D02      MOV	R16,R2
    0059 D00E      RCALL	_putchar
(0034) } 
    005A 940E0083  CALL	pop_lset
    005C 9518      RETI
(0035) 
(0036) 
(0037) /*串口初始化函数*/
(0038) void uart_init(void)
(0039) {
(0040)   UCSRB = 0x00;				                //设置波特率时关闭发送和接收
_uart_init:
    005D 2422      CLR	R2
    005E B82A      OUT	P0A,R2
(0041)   UBRRL = 0x19;
    005F E189      LDI	R24,0x19
    0060 B989      OUT	P09,R24
(0042)   UBRRH = 0x00;				   		        //设定波特率,19200
    0061 BC20      OUT	P20,R2
(0043)   UCSRA = 0x00;				   		        //初始化
    0062 B82B      OUT	P0B,R2
(0044)   UCSRC = 0x86;                		        //设置帧格式,8位数据,无奇偶校验,1位停止位
    0063 E886      LDI	R24,0x86
    0064 BD80      OUT	P20,R24
(0045)   UCSRB =(1<<RXCIE)|(1<<RXEN)|(1<<TXEN);    //允许发送和接收,接收中断使能
    0065 E988      LDI	R24,0x98
    0066 B98A      OUT	P0A,R24
(0046) }
    0067 9508      RET
(0047) 
(0048) 
(0049) /*字节输出函数*/
(0050) void putchar(unsigned char data)
(0051) 	{	 
(0052)      while (!(UCSRA&(1<<UDRE)));	        //判断上次发送是否完成
_putchar:
  data                 --> R16
    0068 9B5D      SBIS	P0B,5
    0069 CFFE      RJMP	_putchar
(0053) 	 UDR=data;                     	        //发送数据    
    006A B90C      OUT	P0C,R16
(0054) 	}	
FILE: <library>
    006B 9508      RET
push_lset:
    006C 93FA      ST	R31,-Y
    006D 93EA      ST	R30,-Y
    006E 93BA      ST	R27,-Y
    006F 93AA      ST	R26,-Y
    0070 939A      ST	R25,-Y
    0071 938A      ST	R24,-Y
    0072 933A      ST	R19,-Y
    0073 932A      ST	R18,-Y
    0074 931A      ST	R17,-Y
    0075 930A      ST	R16,-Y
    0076 929A      ST	R9,-Y
    0077 928A      ST	R8,-Y
    0078 927A      ST	R7,-Y
    0079 926A      ST	R6,-Y
    007A 925A      ST	R5,-Y
    007B 924A      ST	R4,-Y
    007C 923A      ST	R3,-Y
    007D 922A      ST	R2,-Y
    007E 921A      ST	R1,-Y
    007F 920A      ST	R0,-Y
    0080 B60F      IN	R0,P3F
    0081 920A      ST	R0,-Y
    0082 9508      RET
pop_lset:
    0083 9009      LD	R0,Y+
    0084 BE0F      OUT	P3F,R0
    0085 9009      LD	R0,Y+
    0086 9019      LD	R1,Y+
    0087 9029      LD	R2,Y+
    0088 9039      LD	R3,Y+
    0089 9049      LD	R4,Y+
    008A 9059      LD	R5,Y+
    008B 9069      LD	R6,Y+
    008C 9079      LD	R7,Y+
    008D 9089      LD	R8,Y+
    008E 9099      LD	R9,Y+
    008F 9109      LD	R16,Y+
    0090 9119      LD	R17,Y+
    0091 9129      LD	R18,Y+
    0092 9139      LD	R19,Y+
    0093 9189      LD	R24,Y+
    0094 9199      LD	R25,Y+
    0095 91A9      LD	R26,Y+
    0096 91B9      LD	R27,Y+
    0097 91E9      LD	R30,Y+
    0098 91F9      LD	R31,Y+
    0099 9508      RET

⌨️ 快捷键说明

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