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

📄 lesson1.lst

📁 另一个非常好的串口通信程序,希望大家多提出宝贵意见
💻 LST
字号:
__text_start:
__start:
    0047 EFCF      LDI	R28,0xFF
    0048 E1D0      LDI	R29,0x10
    0049 BFCD      OUT	0x3D,R28
    004A BFDE      OUT	0x3E,R29
    004B 51C0      SUBI	R28,0x10
    004C 40D0      SBCI	R29,0
    004D EA0A      LDI	R16,0xAA
    004E 8308      STD	Y+0,R16
    004F 2400      CLR	R0
    0050 E0E1      LDI	R30,1
    0051 E0F1      LDI	R31,1
    0052 E011      LDI	R17,1
    0053 30E2      CPI	R30,2
    0054 07F1      CPC	R31,R17
    0055 F011      BEQ	0x0058
    0056 9201      ST	R0,Z+
    0057 CFFB      RJMP	0x0053
    0058 8300      STD	Z+0,R16
    0059 E8EC      LDI	R30,0x8C
    005A E0F0      LDI	R31,0
    005B E0A0      LDI	R26,0
    005C E0B1      LDI	R27,1
    005D E010      LDI	R17,0
    005E 38ED      CPI	R30,0x8D
    005F 07F1      CPC	R31,R17
    0060 F021      BEQ	0x0065
    0061 95C8      LPM
    0062 9631      ADIW	R30,1
    0063 920D      ST	R0,X+
    0064 CFF9      RJMP	0x005E
    0065 940E00DF  CALL	_main
_exit:
    0067 CFFF      RJMP	_exit
_delay:
  i                    --> R20
  j                    --> R22
  ms                   --> R16
    0068 940E0197  CALL	push_gset2
FILE: C:\icc\examples.avr\lesson1\lesson1.c
(0001) #include <iom128v.h>
(0002) #include <macros.h>
(0003) #define  uchar unsigned char
(0004) #define  uint  unsigned int
(0005) 
(0006) #define  mclk   7372800
(0007) #pragma interrupt_handler uart_rx:31
(0008) uchar rdata,flag=0;
(0009) void delay(uint ms)
(0010) {
(0011)         uint i,j;
(0012) 	for(i=0;i<ms;i++)
    006A 2744      CLR	R20
    006B 2755      CLR	R21
    006C C00B      RJMP	0x0078
(0013) 	   {
(0014) 	   for(j=0;j<562;j++);
    006D 2766      CLR	R22
    006E 2777      CLR	R23
    006F C002      RJMP	0x0072
    0070 5F6F      SUBI	R22,0xFF
    0071 4F7F      SBCI	R23,0xFF
    0072 3362      CPI	R22,0x32
    0073 E0E2      LDI	R30,2
    0074 077E      CPC	R23,R30
    0075 F3D0      BCS	0x0070
    0076 5F4F      SUBI	R20,0xFF
    0077 4F5F      SBCI	R21,0xFF
    0078 1740      CP	R20,R16
    0079 0751      CPC	R21,R17
    007A F390      BCS	0x006D
    007B 940E018B  CALL	pop_gset2
    007D 9508      RET
(0015)        }
(0016) }
(0017) void init_port();
(0018) void init_port()
(0019) {
(0020) DDRB=DDRB|BIT(7);
_init_port:
    007E 9ABF      SBI	0x17,7
(0021) 	 PORTB=PORTB|BIT(7);
    007F 9AC7      SBI	0x18,7
    0080 9508      RET
_uart_init:
  baud                 --> R10
    0081 940E0195  CALL	push_gset3
    0083 0158      MOVW	R10,R16
(0022)     
(0023) }
(0024) void uart_init(uint baud)
(0025) {
(0026)     UCSR1B=0x00; 
    0084 2422      CLR	R2
    0085 9220009A  STS	0x9A,R2
(0027)    UCSR1A=0x00; 		    //控制寄存器清零
    0087 9220009B  STS	0x9B,R2
(0028)    UCSR1C=(0<<UPM10)|(3<<UCSZ10);   
    0089 E086      LDI	R24,6
    008A 9380009D  STS	0x9D,R24
(0029)                                                         //选择UCSRC,异步模式,禁止                        
(0030)                                                      //   校验,1位停止位,8位数据位
(0031)    baud=mclk/16/baud-1	;   //波特率最大为65K
    008C 0115      MOVW	R2,R10
    008D 2444      CLR	R4
    008E 2455      CLR	R5
    008F E040      LDI	R20,0
    0090 E058      LDI	R21,0x8
    0091 E067      LDI	R22,7
    0092 E070      LDI	R23,0
    0093 925A      ST	R5,-Y
    0094 924A      ST	R4,-Y
    0095 923A      ST	R3,-Y
    0096 922A      ST	R2,-Y
    0097 018A      MOVW	R16,R20
    0098 019B      MOVW	R18,R22
    0099 940E0120  CALL	div32s
    009B E041      LDI	R20,1
    009C E050      LDI	R21,0
    009D E060      LDI	R22,0
    009E E070      LDI	R23,0
    009F 0118      MOVW	R2,R16
    00A0 0129      MOVW	R4,R18
    00A1 1A24      SUB	R2,R20
    00A2 0A35      SBC	R3,R21
    00A3 0A46      SBC	R4,R22
    00A4 0A57      SBC	R5,R23
    00A5 0151      MOVW	R10,R2
(0032)    UBRR1L=baud; 					     	  
    00A6 92A00099  STS	0x99,R10
(0033)    UBRR1H=baud>>8; 		   //设置波特率
    00A8 2C23      MOV	R2,R3
    00A9 2433      CLR	R3
    00AA 92200098  STS	0x98,R2
(0034)    UCSR1B=(1<<TXEN1)|(1<<RXEN1)|(1<<RXCIE1); 
    00AC E988      LDI	R24,0x98
    00AD 9380009A  STS	0x9A,R24
(0035)                                                        //接收、发送使能,接收中断使能
(0036)    SREG=BIT(7);	                //全局中断开放
    00AF E880      LDI	R24,0x80
    00B0 BF8F      OUT	0x3F,R24
(0037)    DDRD|=0X08;	                //配置TX为输出(很重要)
    00B1 9A8B      SBI	0x11,3
    00B2 940E018E  CALL	pop_gset3
    00B4 9508      RET
(0038) 
(0039) }
(0040) void uart_sendB(uchar data)
(0041) {
(0042)    while(!(UCSR1A&(BIT(UDRE1)))) ;
_uart_sendB:
  data                 --> R16
    00B5 9020009B  LDS	R2,0x9B
    00B7 FE25      SBRS	R2,5
    00B8 CFFC      RJMP	_uart_sendB
(0043)    UDR1=data;
    00B9 9300009C  STS	0x9C,R16
(0044)    while(!(UCSR1A&(BIT(TXC1))));
    00BB 9020009B  LDS	R2,0x9B
    00BD FE26      SBRS	R2,6
    00BE CFFC      RJMP	0x00BB
(0045)    UCSR1A|=BIT(TXC1);
    00BF 9180009B  LDS	R24,0x9B
    00C1 6480      ORI	R24,0x40
    00C2 9380009B  STS	0x9B,R24
    00C4 9508      RET
_uart_rx:
    00C5 922A      ST	R2,-Y
    00C6 938A      ST	R24,-Y
    00C7 B62F      IN	R2,0x3F
    00C8 922A      ST	R2,-Y
(0046) }
(0047) void uart_rx()
(0048) {
(0049)     UCSR1B&=~BIT(RXCIE1);
    00C9 9180009A  LDS	R24,0x9A
    00CB 778F      ANDI	R24,0x7F
    00CC 9380009A  STS	0x9A,R24
(0050) 	rdata=UDR1;
    00CE 9020009C  LDS	R2,0x9C
    00D0 92200101  STS	rdata,R2
(0051) 	flag=1;
    00D2 E081      LDI	R24,1
    00D3 93800100  STS	flag,R24
(0052) 	UCSR1B|=BIT(RXCIE1);
    00D5 9180009A  LDS	R24,0x9A
    00D7 6880      ORI	R24,0x80
    00D8 9380009A  STS	0x9A,R24
    00DA 9029      LD	R2,Y+
    00DB BE2F      OUT	0x3F,R2
    00DC 9189      LD	R24,Y+
    00DD 9029      LD	R2,Y+
    00DE 9518      RETI
(0053) }
(0054) void main()
(0055) {
(0056) 	unsigned char j='a';
_main:
  i                    --> R22
  j                    --> R20
    00DF E641      LDI	R20,0x61
(0057) 
(0058) 	unsigned int i=3;
    00E0 E063      LDI	R22,3
    00E1 E070      LDI	R23,0
(0059) 
(0060) 	// 
(0061) 	// 
(0062) 	// init_port();
(0063) 	uart_init(19200);
    00E2 E000      LDI	R16,0
    00E3 E41B      LDI	R17,0x4B
    00E4 DF9C      RCALL	_uart_init
(0064) 	 delay(1);
    00E5 E001      LDI	R16,1
    00E6 E010      LDI	R17,0
    00E7 DF80      RCALL	_delay
(0065) 	 uart_sendB(i);
    00E8 2F06      MOV	R16,R22
    00E9 DFCB      RCALL	_uart_sendB
(0066) 	 delay(1);
    00EA E001      LDI	R16,1
    00EB E010      LDI	R17,0
    00EC DF7B      RCALL	_delay
(0067) 	 uart_sendB(j);
    00ED 2F04      MOV	R16,R20
    00EE DFC6      RCALL	_uart_sendB
(0068) 	  uart_sendB(i);
    00EF 2F06      MOV	R16,R22
    00F0 DFC4      RCALL	_uart_sendB
(0069) 	 delay(1);
    00F1 E001      LDI	R16,1
    00F2 E010      LDI	R17,0
    00F3 DF74      RCALL	_delay
(0070) 	 uart_sendB(j);
    00F4 2F04      MOV	R16,R20
    00F5 DFBF      RCALL	_uart_sendB
(0071) 	 
(0072) 	  uart_sendB(i);
    00F6 2F06      MOV	R16,R22
    00F7 DFBD      RCALL	_uart_sendB
(0073) 	 delay(1);
    00F8 E001      LDI	R16,1
    00F9 E010      LDI	R17,0
    00FA DF6D      RCALL	_delay
(0074) 	 uart_sendB(j);
    00FB 2F04      MOV	R16,R20
    00FC DFB8      RCALL	_uart_sendB
(0075) 	 
(0076) 	  uart_sendB(i);
    00FD 2F06      MOV	R16,R22
    00FE DFB6      RCALL	_uart_sendB
(0077) 	 delay(1);
    00FF E001      LDI	R16,1
    0100 E010      LDI	R17,0
    0101 DF66      RCALL	_delay
(0078) 	 uart_sendB(j);
    0102 2F04      MOV	R16,R20
    0103 DFB1      RCALL	_uart_sendB
(0079) 	 
(0080) 	  uart_sendB(i);
    0104 2F06      MOV	R16,R22
    0105 DFAF      RCALL	_uart_sendB
(0081) 	 delay(1);
    0106 E001      LDI	R16,1
    0107 E010      LDI	R17,0
    0108 DF5F      RCALL	_delay
(0082) 	 uart_sendB(j);
    0109 2F04      MOV	R16,R20
    010A DFAA      RCALL	_uart_sendB
(0083) 	 
(0084) 	  uart_sendB(i);
    010B 2F06      MOV	R16,R22
    010C DFA8      RCALL	_uart_sendB
(0085) 	 delay(1);
    010D E001      LDI	R16,1
    010E E010      LDI	R17,0
    010F DF58      RCALL	_delay
(0086) 	 uart_sendB(j);
    0110 2F04      MOV	R16,R20
    0111 DFA3      RCALL	_uart_sendB
(0087) 	 
(0088) 	 
(0089) 	  uart_sendB(i);
    0112 2F06      MOV	R16,R22
    0113 DFA1      RCALL	_uart_sendB
(0090) 	 delay(1);
    0114 E001      LDI	R16,1
    0115 E010      LDI	R17,0
    0116 DF51      RCALL	_delay
(0091) 	 uart_sendB(j);
FILE: <library>
    0117 2F04      MOV	R16,R20
    0118 DF9C      RCALL	_uart_sendB
    0119 9508      RET
div32u:
    011A 94E8      BCLR	6
    011B C001      RJMP	0x011D
mod32u:
    011C 9468      BSET	6
    011D D02F      RCALL	long_div_prolog
    011E 24CC      CLR	R12
    011F C008      RJMP	0x0128
div32s:
    0120 94E8      BCLR	6
    0121 C001      RJMP	0x0123
mod32s:
    0122 9468      BSET	6
    0123 D029      RCALL	long_div_prolog
    0124 FD37      SBRC	R19,7
    0125 D053      RCALL	neg_R16_R19
    0126 FDB7      SBRC	R27,7
    0127 D05A      RCALL	neg_R24_R27
    0128 2477      CLR	R7
    0129 2488      CLR	R8
    012A 2499      CLR	R9
    012B 24AA      CLR	R10
    012C 24BB      CLR	R11
    012D D041      RCALL	tst_R16_R19
    012E F0C1      BEQ	0x0147
    012F D044      RCALL	tst_R24_R27
    0130 F0B1      BEQ	0x0147
    0131 E2E8      LDI	R30,0x28
    0132 0F00      LSL	R16
    0133 1F11      ROL	R17
    0134 1F22      ROL	R18
    0135 1F33      ROL	R19
    0136 1C77      ROL	R7
    0137 1C88      ROL	R8
    0138 1C99      ROL	R9
    0139 1CAA      ROL	R10
    013A 1CBB      ROL	R11
    013B 1688      CP	R8,R24
    013C 0699      CPC	R9,R25
    013D 06AA      CPC	R10,R26
    013E 06BB      CPC	R11,R27
    013F F028      BCS	0x0145
    0140 1A88      SUB	R8,R24
    0141 0A99      SBC	R9,R25
    0142 0AAA      SBC	R10,R26
    0143 0ABB      SBC	R11,R27
    0144 9503      INC	R16
    0145 95EA      DEC	R30
    0146 F759      BNE	0x0132
    0147 F426      BRTC	0x014C
    0148 2D08      MOV	R16,R8
    0149 2D19      MOV	R17,R9
    014A 2D2A      MOV	R18,R10
    014B 2D3B      MOV	R19,R11
    014C C013      RJMP	long_div_epilog
long_div_prolog:
    014D 927A      ST	R7,-Y
    014E 928A      ST	R8,-Y
    014F 929A      ST	R9,-Y
    0150 92AA      ST	R10,-Y
    0151 92BA      ST	R11,-Y
    0152 92CA      ST	R12,-Y
    0153 93EA      ST	R30,-Y
    0154 938A      ST	R24,-Y
    0155 939A      ST	R25,-Y
    0156 93AA      ST	R26,-Y
    0157 93BA      ST	R27,-Y
    0158 858B      LDD	R24,Y+11
    0159 859C      LDD	R25,Y+12
    015A 85AD      LDD	R26,Y+13
    015B 85BE      LDD	R27,Y+14
    015C 2EC3      MOV	R12,R19
    015D F00E      BRTS	0x015F
    015E 26CB      EOR	R12,R27
    015F 9508      RET
long_div_epilog:
    0160 FCC7      SBRC	R12,7
    0161 D017      RCALL	neg_R16_R19
    0162 91B9      LD	R27,Y+
    0163 91A9      LD	R26,Y+
    0164 9199      LD	R25,Y+
    0165 9189      LD	R24,Y+
    0166 91E9      LD	R30,Y+
    0167 90C9      LD	R12,Y+
    0168 90B9      LD	R11,Y+
    0169 90A9      LD	R10,Y+
    016A 9099      LD	R9,Y+
    016B 9089      LD	R8,Y+
    016C 9079      LD	R7,Y+
    016D 9624      ADIW	R28,4
    016E 9508      RET
tst_R16_R19:
    016F 2FE0      MOV	R30,R16
    0170 2BE1      OR	R30,R17
    0171 2BE2      OR	R30,R18
    0172 2BE3      OR	R30,R19
    0173 9508      RET
tst_R24_R27:
    0174 2FE8      MOV	R30,R24
    0175 2BE9      OR	R30,R25
    0176 2BEA      OR	R30,R26
    0177 2BEB      OR	R30,R27
    0178 9508      RET
neg_R16_R19:
    0179 9500      COM	R16
    017A 9510      COM	R17
    017B 9520      COM	R18
    017C 9530      COM	R19
    017D 5F0F      SUBI	R16,0xFF
    017E 4F1F      SBCI	R17,0xFF
    017F 4F2F      SBCI	R18,0xFF
    0180 4F3F      SBCI	R19,0xFF
    0181 9508      RET
neg_R24_R27:
    0182 9580      COM	R24
    0183 9590      COM	R25
    0184 95A0      COM	R26
    0185 95B0      COM	R27
    0186 5F8F      SUBI	R24,0xFF
    0187 4F9F      SBCI	R25,0xFF
    0188 4FAF      SBCI	R26,0xFF
    0189 4FBF      SBCI	R27,0xFF
    018A 9508      RET
pop_gset2:
    018B E0E2      LDI	R30,2
    018C 940C019D  JMP	pop
pop_gset3:
    018E E0E4      LDI	R30,4
    018F 940C019D  JMP	pop
push_gset5:
    0191 92FA      ST	R15,-Y
    0192 92EA      ST	R14,-Y
push_gset4:
    0193 92DA      ST	R13,-Y
    0194 92CA      ST	R12,-Y
push_gset3:
    0195 92BA      ST	R11,-Y
    0196 92AA      ST	R10,-Y
push_gset2:
    0197 937A      ST	R23,-Y
    0198 936A      ST	R22,-Y
push_gset1:
    0199 935A      ST	R21,-Y
    019A 934A      ST	R20,-Y
    019B 9508      RET
pop_gset1:
    019C E0E1      LDI	R30,1
pop:
    019D 9149      LD	R20,Y+
    019E 9159      LD	R21,Y+
    019F FDE0      SBRC	R30,0
    01A0 9508      RET
    01A1 9169      LD	R22,Y+
    01A2 9179      LD	R23,Y+
    01A3 FDE1      SBRC	R30,1
    01A4 9508      RET
    01A5 90A9      LD	R10,Y+
    01A6 90B9      LD	R11,Y+
    01A7 FDE2      SBRC	R30,2
    01A8 9508      RET
    01A9 90C9      LD	R12,Y+
    01AA 90D9      LD	R13,Y+
    01AB FDE3      SBRC	R30,3
    01AC 9508      RET
    01AD 90E9      LD	R14,Y+
    01AE 90F9      LD	R15,Y+
    01AF 9508      RET

⌨️ 快捷键说明

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