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

📄 uart.lst

📁 avr基础程序大全
💻 LST
字号:
Interrupt Vectors
    00000 940C 002B JMP	__text_start|__start
    00016 940C 0097 JMP	_uart_rx

Program Code (text area)
__text_start|__start:
    0002B E5CF      LDI	R28,0x5F
    0002C E0D4      LDI	R29,4
    0002D BFCD      OUT	0x3D,R28
    0002E BFDE      OUT	0x3E,R29
    0002F 51CE      SUBI	R28,0x1E
    00030 40D0      SBCI	R29,0
    00031 EA0A      LDI	R16,0xAA
    00032 8308      ST	Y,R16
    00033 2400      CLR	R0
    00034 E6E1      LDI	R30,0x61
    00035 E0F0      LDI	R31,0
    00036 E010      LDI	R17,0
    00037 36E2      CPI	R30,0x62
    00038 07F1      CPC	R31,R17
    00039 F011      BEQ	0x003C
    0003A 9201      ST	Z+,R0
    0003B CFFB      RJMP	0x0037
    0003C 8300      ST	Z,R16
    0003D E5E4      LDI	R30,0x54
    0003E E0F0      LDI	R31,0
    0003F E6A0      LDI	R26,0x60
    00040 E0B0      LDI	R27,0
    00041 E010      LDI	R17,0
    00042 E000      LDI	R16,0
    00043 BF0B      OUT	0x3B,R16
    00044 35E5      CPI	R30,0x55
    00045 07F1      CPC	R31,R17
    00046 F021      BEQ	0x004B
    00047 95C8      LPM
    00048 9631      ADIW	R30,1
    00049 920D      ST	X+,R0
    0004A CFF9      RJMP	0x0044
    0004B 940E 00A8 CALL	_main
_exit:
    0004D CFFF      RJMP	_exit
_delay:
  i                    --> R20
  j                    --> R22
  ms                   --> R16
    0004E 940E 0122 CALL	push_xgsetF000
FILE: E:\AVR自编程序\11实验板\16串口通信\UART.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #define  uchar unsigned char
(0004) #define  uint  unsigned int
(0005) 
(0006) #define  mclk   8000000
(0007) #pragma interrupt_handler uart_rx:12
(0008) uchar rdata,flag=0;
(0009) void delay(uint ms)
(0010) {
(0011)         uint i,j;
(0012) 	for(i=0;i<ms;i++)
    00050 2744      CLR	R20
    00051 2755      CLR	R21
    00052 C00B      RJMP	0x005E
(0013) 	   {
(0014) 	   for(j=0;j<1141;j++);
    00053 2766      CLR	R22
    00054 2777      CLR	R23
    00055 C002      RJMP	0x0058
    00056 5F6F      SUBI	R22,0xFF
    00057 4F7F      SBCI	R23,0xFF
    00058 3765      CPI	R22,0x75
    00059 E0E4      LDI	R30,4
    0005A 077E      CPC	R23,R30
    0005B F3D0      BCS	0x0056
    0005C 5F4F      SUBI	R20,0xFF
    0005D 4F5F      SBCI	R21,0xFF
    0005E 1740      CP	R20,R16
    0005F 0751      CPC	R21,R17
    00060 F390      BCS	0x0053
    00061 940C 0127 JMP	pop_xgsetF000
_uart_init:
  baud                 --> R10
    00063 940E 012C CALL	push_xgsetF00C
    00065 0158      MOVW	R10,R16
(0015)        }
(0016) }
(0017) 
(0018) void uart_init(uint baud)
(0019) {
(0020)     UCSRB=0x00; 
    00066 2422      CLR	R2
    00067 B82A      OUT	0x0A,R2
(0021)    UCSRA=0x00; 		    //控制寄存器清零
    00068 B82B      OUT	0x0B,R2
(0022)    UCSRC=(1<<URSEL)|(0<<UPM0)|(3<<UCSZ0);   
    00069 E886      LDI	R24,0x86
    0006A BD80      OUT	0x20,R24
(0023)                                                         //选择UCSRC,异步模式,禁止                        
(0024)                                                      //   校验,1位停止位,8位数据位
(0025)    baud=mclk/16/baud-1	;   //波特率最大为65K
    0006B 0115      MOVW	R2,R10
    0006C 2444      CLR	R4
    0006D 2455      CLR	R5
    0006E E240      LDI	R20,0x20
    0006F EA51      LDI	R21,0xA1
    00070 E067      LDI	R22,7
    00071 E070      LDI	R23,0
    00072 925A      ST	-Y,R5
    00073 924A      ST	-Y,R4
    00074 923A      ST	-Y,R3
    00075 922A      ST	-Y,R2
    00076 018A      MOVW	R16,R20
    00077 019B      MOVW	R18,R22
    00078 940E 00BE CALL	div32s
    0007A E041      LDI	R20,1
    0007B E050      LDI	R21,0
    0007C E060      LDI	R22,0
    0007D E070      LDI	R23,0
    0007E 0118      MOVW	R2,R16
    0007F 0129      MOVW	R4,R18
    00080 1A24      SUB	R2,R20
    00081 0A35      SBC	R3,R21
    00082 0A46      SBC	R4,R22
    00083 0A57      SBC	R5,R23
    00084 0151      MOVW	R10,R2
(0026)    UBRRL=baud; 					     	  
    00085 B829      OUT	0x09,R2
(0027)    UBRRH=baud>>8; 		   //设置波特率
    00086 2C23      MOV	R2,R3
    00087 2433      CLR	R3
    00088 BC20      OUT	0x20,R2
(0028)    UCSRB=(1<<TXEN)|(1<<RXEN)|(1<<RXCIE); 
    00089 E988      LDI	R24,0x98
    0008A B98A      OUT	0x0A,R24
(0029)                                                        //接收、发送使能,接收中断使能
(0030)    SREG=BIT(7);	                //全局中断开放
    0008B E880      LDI	R24,0x80
    0008C BF8F      OUT	0x3F,R24
(0031)    DDRD|=0X02;	                //配置TX为输出(很重要)
    0008D 9A89      SBI	0x11,1
    0008E 940C 0133 JMP	pop_xgsetF00C
(0032) 
(0033) }
(0034) void uart_sendB(uchar data)
(0035) {
(0036)    while(!(UCSRA&(BIT(UDRE)))) ;
_uart_sendB:
  data                 --> R16
    00090 9B5D      SBIS	0x0B,5
    00091 CFFE      RJMP	_uart_sendB
(0037)    UDR=data;
    00092 B90C      OUT	0x0C,R16
(0038)    while(!(UCSRA&(BIT(TXC))));
    00093 9B5E      SBIS	0x0B,6
    00094 CFFE      RJMP	0x0093
(0039)    UCSRA|=BIT(TXC);
    00095 9A5E      SBI	0x0B,6
    00096 9508      RET
_uart_rx:
    00097 922A      ST	-Y,R2
    00098 938A      ST	-Y,R24
    00099 B62F      IN	R2,0x3F
    0009A 922A      ST	-Y,R2
(0040) }
(0041) void uart_rx()
(0042) {
(0043)     UCSRB&=~BIT(RXCIE);
    0009B 9857      CBI	0x0A,7
(0044) 	rdata=UDR;
    0009C B02C      IN	R2,0x0C
    0009D 9220 0061 STS	rdata,R2
(0045) 	flag=1;
    0009F E081      LDI	R24,1
    000A0 9380 0060 STS	flag,R24
(0046) 	UCSRB|=BIT(RXCIE);
    000A2 9A57      SBI	0x0A,7
    000A3 9029      LD	R2,Y+
    000A4 BE2F      OUT	0x3F,R2
    000A5 9189      LD	R24,Y+
    000A6 9029      LD	R2,Y+
    000A7 9518      RETI
(0047) }
(0048) void main()
(0049) {
(0050)     //uchar i=4;
(0051) 	//uchar j='a';
(0052)     uart_init(19200);
_main:
    000A8 E000      LDI	R16,0
    000A9 E41B      LDI	R17,0x4B
    000AA DFB8      RCALL	_uart_init
    000AB C00A      RJMP	0x00B6
(0053) 	while(1)
(0054) 	{
(0055) 	   if(flag)
    000AC 9020 0060 LDS	R2,flag
    000AE 2022      TST	R2
    000AF F031      BEQ	0x00B6
(0056) 	   {
(0057) 	      uart_sendB(rdata);
    000B0 9100 0061 LDS	R16,rdata
    000B2 DFDD      RCALL	_uart_sendB
(0058) 		  flag=0;
FILE: <library>
    000B3 2422      CLR	R2
    000B4 9220 0060 STS	flag,R2
    000B6 CFF5      RJMP	0x00AC
    000B7 9508      RET
div32u:
    000B8 94E8      BCLR	6
    000B9 C001      RJMP	0x00BB
mod32u:
    000BA 9468      BSET	6
    000BB D030      RCALL	long_div_prolog
    000BC 24CC      CLR	R12
    000BD C009      RJMP	0x00C7
div32s:
    000BE 94E8      BCLR	6
    000BF C001      RJMP	0x00C1
mod32s:
    000C0 9468      BSET	6
    000C1 D02A      RCALL	long_div_prolog
    000C2 FD37      SBRC	R19,7
    000C3 940E 013A CALL	neg32
    000C5 FDB7      SBRC	R27,7
    000C6 D052      RCALL	neg_R24_R27
    000C7 2477      CLR	R7
    000C8 2488      CLR	R8
    000C9 2499      CLR	R9
    000CA 24AA      CLR	R10
    000CB 24BB      CLR	R11
    000CC D042      RCALL	tst_R16_R19
    000CD F0C1      BEQ	0x00E6
    000CE D045      RCALL	tst_R24_R27
    000CF F0B1      BEQ	0x00E6
    000D0 E2E8      LDI	R30,0x28
    000D1 0F00      LSL	R16
    000D2 1F11      ROL	R17
    000D3 1F22      ROL	R18
    000D4 1F33      ROL	R19
    000D5 1C77      ROL	R7
    000D6 1C88      ROL	R8
    000D7 1C99      ROL	R9
    000D8 1CAA      ROL	R10
    000D9 1CBB      ROL	R11
    000DA 1688      CP	R8,R24
    000DB 0699      CPC	R9,R25
    000DC 06AA      CPC	R10,R26
    000DD 06BB      CPC	R11,R27
    000DE F028      BCS	0x00E4
    000DF 1A88      SUB	R8,R24
    000E0 0A99      SBC	R9,R25
    000E1 0AAA      SBC	R10,R26
    000E2 0ABB      SBC	R11,R27
    000E3 9503      INC	R16
    000E4 95EA      DEC	R30
    000E5 F759      BNE	0x00D1
    000E6 F426      BRTC	0x00EB
    000E7 2D08      MOV	R16,R8
    000E8 2D19      MOV	R17,R9
    000E9 2D2A      MOV	R18,R10
    000EA 2D3B      MOV	R19,R11
    000EB C013      RJMP	long_div_epilog
long_div_prolog:
    000EC 927A      ST	-Y,R7
    000ED 928A      ST	-Y,R8
    000EE 929A      ST	-Y,R9
    000EF 92AA      ST	-Y,R10
    000F0 92BA      ST	-Y,R11
    000F1 92CA      ST	-Y,R12
    000F2 93EA      ST	-Y,R30
    000F3 938A      ST	-Y,R24
    000F4 939A      ST	-Y,R25
    000F5 93AA      ST	-Y,R26
    000F6 93BA      ST	-Y,R27
    000F7 858B      LDD	R24,Y+11
    000F8 859C      LDD	R25,Y+12
    000F9 85AD      LDD	R26,Y+13
    000FA 85BE      LDD	R27,Y+14
    000FB 2EC3      MOV	R12,R19
    000FC F00E      BRTS	0x00FE
    000FD 26CB      EOR	R12,R27
    000FE 9508      RET
long_div_epilog:
    000FF FCC7      SBRC	R12,7
    00100 940E 013A CALL	neg32
    00102 91B9      LD	R27,Y+
    00103 91A9      LD	R26,Y+
    00104 9199      LD	R25,Y+
    00105 9189      LD	R24,Y+
    00106 91E9      LD	R30,Y+
    00107 90C9      LD	R12,Y+
    00108 90B9      LD	R11,Y+
    00109 90A9      LD	R10,Y+
    0010A 9099      LD	R9,Y+
    0010B 9089      LD	R8,Y+
    0010C 9079      LD	R7,Y+
    0010D 9624      ADIW	R28,4
    0010E 9508      RET
tst_R16_R19:
    0010F 2FE0      MOV	R30,R16
    00110 2BE1      OR	R30,R17
    00111 2BE2      OR	R30,R18
    00112 2BE3      OR	R30,R19
    00113 9508      RET
tst_R24_R27:
    00114 2FE8      MOV	R30,R24
    00115 2BE9      OR	R30,R25
    00116 2BEA      OR	R30,R26
    00117 2BEB      OR	R30,R27
    00118 9508      RET
neg_R24_R27:
    00119 9580      COM	R24
    0011A 9590      COM	R25
    0011B 95A0      COM	R26
    0011C 95B0      COM	R27
    0011D 5F8F      SUBI	R24,0xFF
    0011E 4F9F      SBCI	R25,0xFF
    0011F 4FAF      SBCI	R26,0xFF
    00120 4FBF      SBCI	R27,0xFF
    00121 9508      RET
push_xgsetF000:
    00122 937A      ST	-Y,R23
    00123 936A      ST	-Y,R22
    00124 935A      ST	-Y,R21
    00125 934A      ST	-Y,R20
    00126 9508      RET
pop_xgsetF000:
    00127 9149      LD	R20,Y+
    00128 9159      LD	R21,Y+
    00129 9169      LD	R22,Y+
    0012A 9179      LD	R23,Y+
    0012B 9508      RET
push_xgsetF00C:
    0012C 937A      ST	-Y,R23
    0012D 936A      ST	-Y,R22
    0012E 935A      ST	-Y,R21
    0012F 934A      ST	-Y,R20
    00130 92BA      ST	-Y,R11
    00131 92AA      ST	-Y,R10
    00132 9508      RET
pop_xgsetF00C:
    00133 90A9      LD	R10,Y+
    00134 90B9      LD	R11,Y+
    00135 9149      LD	R20,Y+
    00136 9159      LD	R21,Y+
    00137 9169      LD	R22,Y+
    00138 9179      LD	R23,Y+
    00139 9508      RET
neg32:
    0013A 9500      COM	R16
    0013B 9510      COM	R17
    0013C 9520      COM	R18
    0013D 9530      COM	R19
    0013E 5F0F      SUBI	R16,0xFF
    0013F 4F1F      SBCI	R17,0xFF
    00140 4F2F      SBCI	R18,0xFF
    00141 4F3F      SBCI	R19,0xFF
    00142 9508      RET

⌨️ 快捷键说明

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