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

📄 usart.lst

📁 //实验板的AVR程序
💻 LST
字号:
__start:
__text_start:
    0016 E5CF      LDI	R28,0x5F
    0017 E0D2      LDI	R29,2
    0018 BFCD      OUT	0x3D,R28
    0019 BFDE      OUT	0x3E,R29
    001A 51C0      SUBI	R28,0x10
    001B 40D0      SBCI	R29,0
    001C EA0A      LDI	R16,0xAA
    001D 8308      STD	Y+0,R16
    001E 2400      CLR	R0
    001F E6E1      LDI	R30,0x61
    0020 E0F0      LDI	R31,0
    0021 E010      LDI	R17,0
    0022 36E2      CPI	R30,0x62
    0023 07F1      CPC	R31,R17
    0024 F011      BEQ	0x0027
    0025 9201      ST	R0,Z+
    0026 CFFB      RJMP	0x0022
    0027 8300      STD	Z+0,R16
    0028 E2EA      LDI	R30,0x2A
    0029 E0F0      LDI	R31,0
    002A E6A0      LDI	R26,0x60
    002B E0B0      LDI	R27,0
    002C E010      LDI	R17,0
    002D 32EB      CPI	R30,0x2B
    002E 07F1      CPC	R31,R17
    002F F021      BEQ	0x0034
    0030 95C8      LPM
    0031 9631      ADIW	R30,1
    0032 920D      ST	R0,X+
    0033 CFF9      RJMP	0x002D
    0034 D026      RCALL	_main
_exit:
    0035 CFFF      RJMP	_exit
_uart0_rx_isr:
    0036 922A      ST	R2,-Y
    0037 B62F      IN	R2,0x3F
    0038 922A      ST	R2,-Y
FILE: E:\AVR开~1\例程\实验15_串口通讯回送数据\usart.c
(0001) //******************************************************************************
(0002) //                                                                             *
(0003) //    FileName   : 实验板uart.c         ICCAVR V6.31A编译                      *
(0004) //    Function   : uart应用练习 ,回送PC发送的数据,从而双向通讯。              *
(0005) //    Date       : 2006-05-07                                                  *
(0006) //    Version    : 1.0                                                         *
(0007) //                                                                             *
(0008) //    Author     : 开关电源              hongtusy@163.com                      *
(0009) //    Company    : 电子信息技术咨询网    http://www.itsn.cn                    *
(0010) //                                                                             *
(0011) //***************************描述与记事*****************************************
(0012) //实验板的AVR程序,uart应用,和计算机通讯,回送PC发送的数据
(0013) //接线定义:PD0-RXD PD1-TXD 开关位置:SW6-7/8打开。
(0014) //使用串口调试器,使用十六进制方式,首先让PC发送一个字符给MCU,然后将接收到MCU返回的值。
(0015) //记事:本程序旨在对uart的理解与演示,程序适合初学者使用.
(0016) //使用片外8MHz晶体,9600bps波特率
(0017) //******************************************************************************
(0018) 
(0019) #include <iom16v.h>             //头文件,ATmega8535单片机的寄存器定义
(0020) #include <macros.h>               //包含有SEI()、CLI()、NOP()、WDR()、等宏定义.
(0021) 
(0022) typedef unsigned char uchar;      //数据类型说明,无符号整型,两字节大小。
(0023) typedef unsigned int uint;        //数据类型说明,无符号字符型,单字节大小。
(0024) 
(0025) #define BAUDRATE        9600	 //波特率
(0026) #define F_CPU			8000000  //系统晶体频率
(0027) uchar temprecv=0xf0,tempsend;
(0028) /*========*/
(0029)  
(0030) #pragma interrupt_handler uart0_rx_isr: 12 
(0031)  
(0032)  void uart0_rx_isr(void)
(0033)  {
(0034)    
(0035)   	  temprecv=UDR;
    0039 B02C      IN	R2,0x0C
    003A 92200060  STS	temprecv,R2
(0036) 	  //while(!(UCSRA&(1<<UDRE)));
(0037) 	  UDR = temprecv;
    003C B82C      OUT	0x0C,R2
    003D 9029      LD	R2,Y+
    003E BE2F      OUT	0x3F,R2
    003F 9029      LD	R2,Y+
    0040 9518      RETI
_DelaymS:
  j                    --> R20
  i                    --> R16
    0041 D031      RCALL	push_gset1
(0038) 	
(0039)   }
(0040) /************************************************
(0041) 函 数 名:    DelaymS()
(0042) 功    能:    毫秒级延时函数
(0043) 输入参数:     延迟时间/系统晶体
(0044) 输出参数:    做相应的延迟处理
(0045) 描    述:    /
(0046) ***********************************************/
(0047) void DelaymS (uint i)            //延时函数,参数i为延时时间
(0048) {
(0049)     uchar j;                        //双重延时
(0050) 	for (;i!=0;i--)
    0042 C007      RJMP	0x004A
(0051) 	{
(0052) 	    for (j=30;j!=0;j--);
    0043 E14E      LDI	R20,0x1E
    0044 C001      RJMP	0x0046
    0045 954A      DEC	R20
    0046 2344      TST	R20
    0047 F7E9      BNE	0x0045
    0048 5001      SUBI	R16,1
    0049 4010      SBCI	R17,0
    004A 3000      CPI	R16,0
    004B 0701      CPC	R16,R17
    004C F7B1      BNE	0x0043
    004D D028      RCALL	pop_gset1
    004E 9508      RET
(0053) 	}
(0054) }
(0055) /********************************************************
(0056)   子程序名:   usart_Init()
(0057)   功    能:   串口初始化
(0058)   输入参数:   /
(0059)   输出参数:   /
(0060)   描    述:   /
(0061) ********************************************************/
(0062) void usart_Init (void)
(0063) {
(0064)    CLI();    //关闭中断
_usart_Init:
    004F 94F8      BCLR	7
(0065) 	 UBRRL= (F_CPU/BAUDRATE/16-1)%256;
    0050 E383      LDI	R24,0x33
    0051 B989      OUT	0x09,R24
(0066)      UBRRH= (F_CPU/BAUDRATE/16-1)/256;
    0052 2422      CLR	R2
    0053 BC20      OUT	0x20,R2
(0067) 	 //UBRRL=51; //波特率寄存器,UART:9600bps,8.000MHz
(0068) 	 UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);  //接收结束中断使能,RXD&TXD使能
    0054 E988      LDI	R24,0x98
    0055 B98A      OUT	0x0A,R24
(0069) 	 UCSRC = (1<<URSEL)|(1<<UPM1)|(1<<UCSZ0)|(1<<UCSZ1);
    0056 EA86      LDI	R24,0xA6
    0057 BD80      OUT	0x20,R24
(0070) 	  //访问UCSRC寄存器,偶校验,8个数据位,默认一个停止位, 
(0071) 	  SREG  = 0b10000000;
    0058 E880      LDI	R24,0x80
    0059 BF8F      OUT	0x3F,R24
    005A 9508      RET
(0072) 	   //TIMSK =0X00;
(0073) 	 //SEI();      //开全局中断使能
(0074) }
(0075) //*****************主程序**********************************
(0076) void main (void)
(0077) {
(0078)      uchar temp=0xff;
_main:
  temp                 --> R20
    005B EF4F      LDI	R20,0xFF
(0079)      usart_Init();    //串口初始化
    005C DFF2      RCALL	_usart_Init
    005D C00B      RJMP	0x0069
(0080) 	 while(1)                      //无限循环执行
(0081) 	 {
(0082)          //if (UCSRA & (1<<RXC))              //等待接收完成,
(0083) 	      //{
(0084) 	          // temp = UDR;                    //将接收到的数据暂存
(0085) 			  //while(!(UCSRA&(1<<UDRE)));
(0086) 		        if(temp!=temprecv)
    005E 90200060  LDS	R2,temprecv
    0060 1542      CP	R20,R2
    0061 F029      BEQ	0x0067
(0087) 			   {
(0088) 			   while(!(UCSRA&(1<<UDRE)));
    0062 9B5D      SBIS	0x0B,5
    0063 CFFE      RJMP	0x0062
(0089) 			   UDR = temprecv;                    //将接收到的数据发送出去
    0064 90200060  LDS	R2,temprecv
    0066 B82C      OUT	0x0C,R2
(0090) 			   }
(0091) 			   
(0092) 			   temp=temprecv; 
FILE: <library>
    0067 91400060  LDS	R20,temprecv
    0069 CFF4      RJMP	0x005E
    006A 9508      RET
push_gset5:
    006B 92FA      ST	R15,-Y
    006C 92EA      ST	R14,-Y
push_gset4:
    006D 92DA      ST	R13,-Y
    006E 92CA      ST	R12,-Y
push_gset3:
    006F 92BA      ST	R11,-Y
    0070 92AA      ST	R10,-Y
push_gset2:
    0071 937A      ST	R23,-Y
    0072 936A      ST	R22,-Y
push_gset1:
    0073 935A      ST	R21,-Y
    0074 934A      ST	R20,-Y
    0075 9508      RET
pop_gset1:
    0076 E0E1      LDI	R30,1
pop:
    0077 9149      LD	R20,Y+
    0078 9159      LD	R21,Y+
    0079 FDE0      SBRC	R30,0
    007A 9508      RET
    007B 9169      LD	R22,Y+
    007C 9179      LD	R23,Y+
    007D FDE1      SBRC	R30,1
    007E 9508      RET
    007F 90A9      LD	R10,Y+
    0080 90B9      LD	R11,Y+
    0081 FDE2      SBRC	R30,2
    0082 9508      RET
    0083 90C9      LD	R12,Y+
    0084 90D9      LD	R13,Y+
    0085 FDE3      SBRC	R30,3
    0086 9508      RET
    0087 90E9      LD	R14,Y+
    0088 90F9      LD	R15,Y+
    0089 9508      RET

⌨️ 快捷键说明

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