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

📄 usart_0.lst

📁 atmega128单片机串口调试程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
__text_start:
__start:
    0130 EFCF      LDI	R28,0xFF
    0131 E1D0      LDI	R29,0x10
    0132 BFCD      OUT	0x3D,R28
    0133 BFDE      OUT	0x3E,R29
    0134 51C0      SUBI	R28,0x10
    0135 40D0      SBCI	R29,0
    0136 EA0A      LDI	R16,0xAA
    0137 8308      STD	Y+0,R16
    0138 2400      CLR	R0
    0139 EDE1      LDI	R30,0xD1
    013A E0F1      LDI	R31,1
    013B E011      LDI	R17,1
    013C 3EEC      CPI	R30,0xEC
    013D 07F1      CPC	R31,R17
    013E F011      BEQ	0x0141
    013F 9201      ST	R0,Z+
    0140 CFFB      RJMP	0x013C
    0141 8300      STD	Z+0,R16
    0142 E8EF      LDI	R30,0x8F
    0143 E0F1      LDI	R31,1
    0144 E0A0      LDI	R26,0
    0145 E0B1      LDI	R27,1
    0146 E012      LDI	R17,2
    0147 36E0      CPI	R30,0x60
    0148 07F1      CPC	R31,R17
    0149 F021      BEQ	0x014E
    014A 95C8      LPM
    014B 9631      ADIW	R30,1
    014C 920D      ST	R0,X+
    014D CFF9      RJMP	0x0147
    014E 940E0151  CALL	_main
_exit:
    0150 CFFF      RJMP	_exit
FILE: E:\zhangxuehuan\uart_0\main.c
(0001) #include "includes.h"
(0002) 
(0003) 
(0004) /*main function of USART communication */
(0005) void main()
(0006) {
(0007) 	U8 i,rc,out1,out2;
(0008) 	
(0009) 	//port_init();
(0010) 	uart0_init();
_main:
  out2                 --> R22
  out1                 --> R10
  rc                   --> R12
  i                    --> R14
    0151 940E01BE  CALL	_uart0_init
(0011) 	
(0012) 	printf("Main running  ...");
    0153 E000      LDI	R16,0
    0154 E011      LDI	R17,1
    0155 940E0544  CALL	_printf
    0157 C064      RJMP	0x01BC
(0013) 		
(0014) 	while(1)
(0015) 	{
(0016) 	    uart0_putchar('a');
    0158 E601      LDI	R16,0x61
    0159 940E01C9  CALL	_uart0_putchar
(0017) 	    uart0_putchar(0xd);uart0_putchar(0xa);
    015B E00D      LDI	R16,0xD
    015C 940E01C9  CALL	_uart0_putchar
    015E E00A      LDI	R16,0xA
    015F 940E01C9  CALL	_uart0_putchar
(0018) 	    rc=uart0_waitchar();
    0161 940E01EC  CALL	_uart0_waitchar
    0163 2EC0      MOV	R12,R16
(0019) 	    
(0020) 		switch(rc)
    0164 2D4C      MOV	R20,R12
    0165 2755      CLR	R21
    0166 3340      CPI	R20,0x30
    0167 E0E0      LDI	R30,0
    0168 075E      CPC	R21,R30
    0169 F0C1      BEQ	0x0182
    016A 3341      CPI	R20,0x31
    016B E0E0      LDI	R30,0
    016C 075E      CPC	R21,R30
    016D F139      BEQ	0x0195
    016E 3342      CPI	R20,0x32
    016F E0E0      LDI	R30,0
    0170 075E      CPC	R21,R30
    0171 F409      BNE	0x0173
    0172 C036      RJMP	0x01A9
    0173 3340      CPI	R20,0x30
    0174 E0E0      LDI	R30,0
    0175 075E      CPC	R21,R30
    0176 F40C      BGE	0x0178
    0177 C044      RJMP	0x01BC
    0178 3748      CPI	R20,0x78
    0179 E0E0      LDI	R30,0
    017A 075E      CPC	R21,R30
    017B F009      BEQ	0x017D
    017C C03F      RJMP	0x01BC
(0021)         {
(0022)             case 'x':
(0023) 		        WDR();
    017D 95A8      WDR
(0024) 			    WDTCR = 0x0E;
    017E E08E      LDI	R24,0xE
    017F BD81      OUT	0x21,R24
(0025) 			    while(1);
    0180 CFFF      RJMP	0x0180
(0026) 				break;
    0181 C03A      RJMP	0x01BC
(0027)            
(0028) 		    case '0':
(0029) 			    for(i=0;i<5;i++)
    0182 24EE      CLR	R14
    0183 C005      RJMP	0x0189
(0030) 	            {
(0031)                     uart0_putchar('0'+i);
    0184 2D0E      MOV	R16,R14
    0185 5D00      SUBI	R16,0xD0
    0186 940E01C9  CALL	_uart0_putchar
    0188 94E3      INC	R14
    0189 2D8E      MOV	R24,R14
    018A 3085      CPI	R24,5
    018B F3C0      BCS	0x0184
(0032) 	            }
(0033) 			    delay_ms(100);
    018C E604      LDI	R16,0x64
    018D E010      LDI	R17,0
    018E 940E0239  CALL	_delay_ms
(0034) 				port_init0();
    0190 940E01F7  CALL	_port_init0
(0035) 			    out1 = PINA;
    0192 B2A9      IN	R10,0x19
(0036) 			    out2 = PINC;
    0193 B363      IN	R22,0x13
(0037) 				break;
    0194 C027      RJMP	0x01BC
(0038) 				
(0039) 		    case '1':
(0040) 		        for(i=5;i<10;i++)
    0195 E085      LDI	R24,5
    0196 2EE8      MOV	R14,R24
    0197 C005      RJMP	0x019D
(0041) 	            {
(0042) 	            uart0_putchar('0'+i);  
    0198 2D0E      MOV	R16,R14
    0199 5D00      SUBI	R16,0xD0
    019A 940E01C9  CALL	_uart0_putchar
    019C 94E3      INC	R14
    019D 2D8E      MOV	R24,R14
    019E 308A      CPI	R24,0xA
    019F F3C0      BCS	0x0198
(0043) 	            }
(0044) 			    delay_ms(100);
    01A0 E604      LDI	R16,0x64
    01A1 E010      LDI	R17,0
    01A2 940E0239  CALL	_delay_ms
(0045) 				port_init1();
    01A4 940E020C  CALL	_port_init1
(0046) 			    out1 = PINA;
    01A6 B2A9      IN	R10,0x19
(0047) 		        out2 = PINC;
    01A7 B363      IN	R22,0x13
(0048) 				break;
    01A8 C013      RJMP	0x01BC
(0049) 		 
(0050) 		    case '2':
(0051) 		        for(i='a';i<='z';i++)
    01A9 E681      LDI	R24,0x61
    01AA 2EE8      MOV	R14,R24
    01AB C005      RJMP	0x01B1
(0052) 	            {
(0053) 	            uart0_putchar('a'+i);  
    01AC 2D0E      MOV	R16,R14
    01AD 590F      SUBI	R16,0x9F
    01AE 940E01C9  CALL	_uart0_putchar
    01B0 94E3      INC	R14
    01B1 E78A      LDI	R24,0x7A
    01B2 158E      CP	R24,R14
    01B3 F7C0      BCC	0x01AC
(0054) 	            }
(0055) 				delay_ms(100);
    01B4 E604      LDI	R16,0x64
    01B5 E010      LDI	R17,0
    01B6 940E0239  CALL	_delay_ms
(0056) 				port_init2();
    01B8 940E0221  CALL	_port_init2
(0057) 			    out1 = PINA;
    01BA B2A9      IN	R10,0x19
(0058) 		        out2 = PINC;
    01BB B363      IN	R22,0x13
    01BC CF9B      RJMP	0x0158
    01BD 9508      RET
FILE: E:\zhangxuehuan\uart_0\myuart.c
(0001) #include"includes.h"
(0002) 
(0003) /*USART initiate*/
(0004) void uart0_init(void)
(0005) {
(0006)     UBRR0H = BAUD_H;     
_uart0_init:
    01BE 2422      CLR	R2
    01BF 92200090  STS	0x90,R2
(0007)     UBRR0L = BAUD_L;            //Set baud rate 
    01C1 E283      LDI	R24,0x23
    01C2 B989      OUT	0x09,R24
(0008)     UCSR0C = 0x0E;            //Set frame format: 8data, 2stop bit 
    01C3 E08E      LDI	R24,0xE
    01C4 93800095  STS	0x95,R24
(0009)     UCSR0B = ((0<<RXCIE0)|(1<<RXEN0)|(1<<TXEN0));   //Enable Receiver and Transmitter 
    01C6 E188      LDI	R24,0x18
    01C7 B98A      OUT	0x0A,R24
    01C8 9508      RET
(0010) 		   	 	//1:接受中断
(0011) 				//0:关闭中断
(0012) }
(0013) 
(0014) 
(0015) //从RS232发送一个字节 
(0016) void uart0_putchar(char c)
(0017) { 
(0018)     while(!(UCSR0A & 0x20)); 
_uart0_putchar:
  c                    --> R16
    01C9 9B5D      SBIS	0x0B,5
    01CA CFFE      RJMP	_uart0_putchar
(0019)     UDR0 = c; 
    01CB B90C      OUT	0x0C,R16
    01CC 9508      RET
_uart0_putstr:
  str                  --> R20
    01CD 940E044A  CALL	push_gset1
    01CF 01A8      MOVW	R20,R16
(0020) } 
(0021) 
(0022) //输出一个字符串
(0023) void uart0_putstr(char* str)
(0024) {
    01D0 C005      RJMP	0x01D6
(0025) 	while(*str)
(0026) 	{
(0027) 		uart0_putchar(*str);
    01D1 01FA      MOVW	R30,R20
    01D2 8100      LDD	R16,Z+0
    01D3 DFF5      RCALL	_uart0_putchar
(0028) 		str++;
    01D4 5F4F      SUBI	R20,0xFF
    01D5 4F5F      SBCI	R21,0xFF
    01D6 01FA      MOVW	R30,R20
    01D7 8020      LDD	R2,Z+0
    01D8 2022      TST	R2
    01D9 F7B9      BNE	0x01D1
    01DA 940E044D  CALL	pop_gset1
    01DC 9508      RET
(0029) 	}
(0030) }
(0031) 
(0032) //从RS232接收一个字节 
(0033) int uart0_getchar(void) 
(0034) { 
(0035)     unsigned char status,res; 
(0036)     if(!(UCSR0A & 0x80)) return -1;        //no data to be received 
_uart0_getchar:
  res                  --> R16
  status               --> R18
    01DD 995F      SBIC	0x0B,7
    01DE C003      RJMP	0x01E2
    01DF EF0F      LDI	R16,0xFF
    01E0 EF1F      LDI	R17,0xFF
    01E1 C009      RJMP	0x01EB
(0037)     status = UCSR0A; 
    01E2 B12B      IN	R18,0x0B
(0038)     res = UDR0; 
    01E3 B10C      IN	R16,0x0C
(0039)     if (status & 0x1c) return -1;        // If error, return -1 
    01E4 2F82      MOV	R24,R18
    01E5 718C      ANDI	R24,0x1C
    01E6 F019      BEQ	0x01EA
    01E7 EF0F      LDI	R16,0xFF
    01E8 EF1F      LDI	R17,0xFF
    01E9 C001      RJMP	0x01EB
(0040)     return res; 
    01EA 2711      CLR	R17
    01EB 9508      RET
_uart0_waitchar:
  c                    --> R20
    01EC 940E044A  CALL	push_gset1
(0041) } 
(0042) 
(0043) char uart0_waitchar(void) 
(0044) { 
(0045)     int c; 
(0046)     while((c=uart0_getchar())==-1); 
    01EE DFEE      RCALL	_uart0_getchar
    01EF 01A8      MOVW	R20,R16
    01F0 3F4F      CPI	R20,0xFF
    01F1 EFEF      LDI	R30,0xFF
    01F2 075E      CPC	R21,R30
    01F3 F3D1      BEQ	0x01EE
(0047)     return (char)c; 
    01F4 940E044D  CALL	pop_gset1
    01F6 9508      RET
FILE: E:\zhangxuehuan\uart_0\myport.c
(0001) #include "includes.h"
(0002) 
(0003) /*port initiate*/
(0004) void port_init0(void)
(0005) {
(0006)     PORTA = 0xFF;
_port_init0:
    01F7 EF8F      LDI	R24,0xFF
    01F8 BB8B      OUT	0x1B,R24
(0007)     DDRA  = 0xFF;
    01F9 BB8A      OUT	0x1A,R24
(0008)     PORTB = 0x00;
    01FA 2422      CLR	R2
    01FB BA28      OUT	0x18,R2
(0009)     DDRB  = 0x00;
    01FC BA27      OUT	0x17,R2
(0010)     PORTC = 0x00; 
    01FD BA25      OUT	0x15,R2
(0011)     DDRC  = 0xFF;
    01FE BB84      OUT	0x14,R24
(0012)     PORTD = 0x00;
    01FF BA22      OUT	0x12,R2
(0013)     DDRD  = 0x00;
    0200 BA21      OUT	0x11,R2
(0014)     PORTE = 0x00;
    0201 B823      OUT	0x03,R2
(0015)     DDRE  = 0x00;
    0202 B822      OUT	0x02,R2
(0016)     PORTF = 0x00;
    0203 92200062  STS	0x62,R2
(0017)     DDRF  = 0x00;
    0205 92200061  STS	0x61,R2
(0018)     PORTG = 0x00;
    0207 92200065  STS	0x65,R2
(0019)     DDRG  = 0x00;
    0209 92200064  STS	0x64,R2
    020B 9508      RET
(0020) }
(0021) 
(0022) void port_init1(void)
(0023) {
(0024)     PORTA = 0x00;
_port_init1:
    020C 2422      CLR	R2
    020D BA2B      OUT	0x1B,R2
(0025)     DDRA  = 0xFF;
    020E EF8F      LDI	R24,0xFF
    020F BB8A      OUT	0x1A,R24
(0026)     PORTB = 0x00;
    0210 BA28      OUT	0x18,R2
(0027)     DDRB  = 0x00;
    0211 BA27      OUT	0x17,R2
(0028)     PORTC = 0xFF; 
    0212 BB85      OUT	0x15,R24
(0029)     DDRC  = 0xFF;
    0213 BB84      OUT	0x14,R24
(0030)     PORTD = 0x00;
    0214 BA22      OUT	0x12,R2
(0031)     DDRD  = 0x00;
    0215 BA21      OUT	0x11,R2
(0032)     PORTE = 0x00;
    0216 B823      OUT	0x03,R2
(0033)     DDRE  = 0x00;
    0217 B822      OUT	0x02,R2
(0034)     PORTF = 0x00;
    0218 92200062  STS	0x62,R2
(0035)     DDRF  = 0x00;
    021A 92200061  STS	0x61,R2
(0036)     PORTG = 0x00;
    021C 92200065  STS	0x65,R2
(0037)     DDRG  = 0x00;
    021E 92200064  STS	0x64,R2
    0220 9508      RET
(0038)  }
(0039)  
(0040)  void port_init2(void)
(0041)  {
(0042)     PORTA = 0x55;
_port_init2:
    0221 E585      LDI	R24,0x55
    0222 BB8B      OUT	0x1B,R24
(0043)     DDRA  = 0xFF;
    0223 EF8F      LDI	R24,0xFF
    0224 BB8A      OUT	0x1A,R24
(0044)     PORTB = 0x00;
    0225 2422      CLR	R2
    0226 BA28      OUT	0x18,R2
(0045)     DDRB  = 0x00;
    0227 BA27      OUT	0x17,R2
(0046)     PORTC = 0xCC; 
    0228 EC8C      LDI	R24,0xCC
    0229 BB85      OUT	0x15,R24
(0047)     DDRC  = 0xFF;
    022A EF8F      LDI	R24,0xFF
    022B BB84      OUT	0x14,R24
(0048)     PORTD = 0x00;
    022C BA22      OUT	0x12,R2
(0049)     DDRD  = 0x00;
    022D BA21      OUT	0x11,R2
(0050)     PORTE = 0x00;
    022E B823      OUT	0x03,R2
(0051)     DDRE  = 0x00;
    022F B822      OUT	0x02,R2
(0052)     PORTF = 0x00;
    0230 92200062  STS	0x62,R2

⌨️ 快捷键说明

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