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

📄 uart_mega128.lst

📁 双龙AVR-MEGA128开发板的配套源码
💻 LST
字号:
__start:
__text_start:
    004E EFCF      LDI	R28,0xFF
    004F E1D0      LDI	R29,0x10
    0050 BFCD      OUT	P3D,R28
    0051 BFDE      OUT	P3E,R29
    0052 51C0      SUBI	R28,0x10
    0053 40D0      SBCI	R29,0
    0054 EA0A      LDI	R16,0xAA
    0055 8308      STD	R16,0+Y
    0056 2400      CLR	R0
    0057 E1E0      LDI	R30,0x10
    0058 E0F1      LDI	R31,1
    0059 E011      LDI	R17,1
    005A 31E0      CPI	R30,0x10
    005B 07F1      CPC	R31,R17
    005C F011      BEQ	0x005F
    005D 9201      ST	R0,Z+
    005E CFFB      RJMP	0x005A
    005F 8300      STD	R16,0+Z
    0060 E8EC      LDI	R30,0x8C
    0061 E0F0      LDI	R31,0
    0062 E0A0      LDI	R26,0
    0063 E0B1      LDI	R27,1
    0064 E010      LDI	R17,0
    0065 39EC      CPI	R30,0x9C
    0066 07F1      CPC	R31,R17
    0067 F021      BEQ	0x006C
    0068 95C8      LPM
    0069 9631      ADIW	R30,1
    006A 920D      ST	R0,X+
    006B CFF9      RJMP	0x0065
    006C 940E00CB  CALL	_main
_exit:
    006E CFFF      RJMP	_exit
FILE: C:\work\UART_MEGA128\uart1.c
(0001) #include<iom128v.h>
(0002) #include<macros.h>
(0003) #define fosc 4000000 //晶振4MHZ
(0004) #define baud 2400	 //波特率
(0005) #define com0	
(0006) void uart0_init(void)
(0007) {
(0008)  UCSR0B = 0x00; //disable while setting baud rate
_uart0_init:
    006F 2422      CLR	R2
    0070 B82A      OUT	P0A,R2
(0009)  UCSR0A = 0x00;
    0071 B82B      OUT	P0B,R2
(0010)  UCSR0C =(1<<UCSZ01)|(1<<UCSZ00);//8bit+1bit stop
    0072 E086      LDI	R24,6
    0073 93800095  STS	R24,0x95
(0011)  UBRR0L=(fosc/16/(baud+1))%256;
    0075 E688      LDI	R24,0x68
    0076 B989      OUT	P09,R24
(0012)  UBRR0H=(fosc/16/(baud+1))/256;
    0077 92200090  STS	R2,0x90
(0013)  UCSR0B =(1<<RXEN0)|(1<<TXEN0);//RXCEN TXCEN
    0079 E188      LDI	R24,0x18
    007A B98A      OUT	P0A,R24
(0014) }
    007B 9508      RET
(0015) void uart1_init(void)
(0016) {
(0017)  UCSR1B = 0x00; //disable while setting baud rate
_uart1_init:
    007C 2422      CLR	R2
    007D 9220009A  STS	R2,0x9A
(0018)  UCSR1A = 0x00;
    007F 9220009B  STS	R2,0x9B
(0019)  UCSR1C = (1<<UCSZ11)|(1<<UCSZ10);//8bit+1bit stop
    0081 E086      LDI	R24,6
    0082 9380009D  STS	R24,__idata_end+1
(0020)  UBRR1L=(fosc/16/(baud+1))%256;
    0084 E688      LDI	R24,0x68
    0085 93800099  STS	R24,0x99
(0021)  UBRR1H=(fosc/16/(baud+1))/256;
    0087 92200098  STS	R2,0x98
(0022)  UCSR1B =(1<<RXEN1)|(1<<TXEN1);//RXCEN TXCEN
    0089 E188      LDI	R24,0x18
    008A 9380009A  STS	R24,0x9A
(0023) }
    008C 9508      RET
(0024) void putchar0(unsigned char c)
(0025) 	{	 
(0026)      while (!(UCSR0A&(1<<UDRE0)));
_putchar0:
  c                    --> R16
    008D 9B5D      SBIS	P0B,5
    008E CFFE      RJMP	_putchar0
(0027) 	 UDR0=c;    
    008F B90C      OUT	P0C,R16
(0028) 	}
    0090 9508      RET
(0029) void putchar1(unsigned char c)
(0030) 	{	 
(0031)      while (!(UCSR1A&(1<<UDRE1)));
_putchar1:
  c                    --> R16
    0091 9020009B  LDS	R2,0x9B
    0093 FE25      SBRS	R2,5
    0094 CFFC      RJMP	_putchar1
(0032) 	 UDR1=c;    
    0095 9300009C  STS	R16,__idata_end
(0033) 	}	
    0097 9508      RET
(0034) unsigned char getchar0(void)
(0035)   	{
(0036) 	 while(!(UCSR0A& (1<<RXC0)));
_getchar0:
    0098 9B5F      SBIS	P0B,7
    0099 CFFE      RJMP	_getchar0
(0037)      return UDR0;
    009A B10C      IN	R16,P0C
    009B 9508      RET
(0038) 	}	
(0039) unsigned char getchar1(void)
(0040)   	{
(0041) 	 while(!(UCSR1A& (1<<RXC1)));
_getchar1:
    009C 9020009B  LDS	R2,0x9B
    009E FE27      SBRS	R2,7
    009F CFFC      RJMP	_getchar1
(0042)      return UDR1;
    00A0 9100009C  LDS	R16,__idata_end
    00A2 9508      RET
_puts0:
  s                    --> R20
    00A3 940E00E4  CALL	push_gset1
    00A5 01A8      MOVW	R20,R16
(0043) 	}			
(0044) void puts0(char *s)
(0045) 	{
    00A6 C005      RJMP	0x00AC
(0046) 	while (*s)
(0047) 		{
(0048) 		putchar0(*s);
    00A7 01FA      MOVW	R30,R20
    00A8 8100      LDD	R16,0+Z
    00A9 DFE3      RCALL	_putchar0
(0049) 		s++;
    00AA 5F4F      SUBI	R20,0xFF
    00AB 4F5F      SBCI	R21,0xFF
    00AC 01FA      MOVW	R30,R20
    00AD 8020      LDD	R2,0+Z
    00AE 2022      TST	R2
    00AF F7B9      BNE	0x00A7
(0050) 		}	
(0051)     putchar0(0x0a);
    00B0 E00A      LDI	R16,0xA
    00B1 DFDB      RCALL	_putchar0
(0052) 	putchar0(0x0d);
    00B2 E00D      LDI	R16,0xD
    00B3 DFD9      RCALL	_putchar0
(0053) 	}
    00B4 940E00E7  CALL	pop_gset1
    00B6 9508      RET
_puts1:
  s                    --> R20
    00B7 940E00E4  CALL	push_gset1
    00B9 01A8      MOVW	R20,R16
(0054) void puts1(char *s)
(0055) 	{
    00BA C005      RJMP	0x00C0
(0056) 	while (*s)
(0057) 		{
(0058) 		putchar1(*s);
    00BB 01FA      MOVW	R30,R20
    00BC 8100      LDD	R16,0+Z
    00BD DFD3      RCALL	_putchar1
(0059) 		s++;
    00BE 5F4F      SUBI	R20,0xFF
    00BF 4F5F      SBCI	R21,0xFF
    00C0 01FA      MOVW	R30,R20
    00C1 8020      LDD	R2,0+Z
    00C2 2022      TST	R2
    00C3 F7B9      BNE	0x00BB
(0060) 		}	
(0061)     putchar1(0x0a);
    00C4 E00A      LDI	R16,0xA
    00C5 DFCB      RCALL	_putchar1
(0062) 	putchar1(0x0d);
    00C6 E00D      LDI	R16,0xD
    00C7 DFC9      RCALL	_putchar1
(0063) 	}	
    00C8 940E00E7  CALL	pop_gset1
    00CA 9508      RET
(0064) void main(void)
(0065) {
(0066)  unsigned char i;
(0067)  #ifdef com0 
(0068)  	uart0_init();
_main:
  i                    --> R20
    00CB DFA3      RCALL	_uart0_init
(0069)  	puts0("HELLO!");
    00CC E009      LDI	R16,0x9
    00CD E011      LDI	R17,1
    00CE DFD4      RCALL	_puts0
    00CF C012      RJMP	0x00E2
(0070)  #else
(0071)  	uart1_init();
(0072)  	puts1("HELLO!"); 
(0073)  #endif
(0074)  while(1)
(0075)     {
(0076) 	 #ifdef com0
(0077)     	 if (getchar0()=='t')//按键盘t键开始测试
    00D0 DFC7      RCALL	_getchar0
    00D1 3704      CPI	R16,0x74
    00D2 F479      BNE	0x00E2
(0078)     	   {
(0079)     	    puts0("test ok!");
    00D3 E000      LDI	R16,0
    00D4 E011      LDI	R17,1
    00D5 DFCD      RCALL	_puts0
(0080)     		for (i=0;i<10;i++)
    00D6 2744      CLR	R20
    00D7 C004      RJMP	0x00DC
(0081)     		 {
(0082)     		  putchar0(0x30+i);
    00D8 2F04      MOV	R16,R20
    00D9 5D00      SUBI	R16,0xD0
    00DA DFB2      RCALL	_putchar0
    00DB 9543      INC	R20
    00DC 304A      CPI	R20,0xA
    00DD F3D0      BCS	0x00D8
(0083)     		 }
(0084)     	    putchar0(0x0a);
    00DE E00A      LDI	R16,0xA
    00DF DFAD      RCALL	_putchar0
(0085)     	    putchar0(0x0d); 		 
    00E0 E00D      LDI	R16,0xD
    00E1 DFAB      RCALL	_putchar0
    00E2 CFED      RJMP	0x00D0
(0086)     	   }
(0087)      #else
(0088)     	 if (getchar1()=='t')//按键盘t键开始测试
(0089)     	   {
(0090)     	    puts1("test ok!");
(0091)     		for (i=0;i<10;i++)
(0092)     		 {
(0093)     		  putchar1(0x30+i);
(0094)     		 }
(0095)     	    putchar1(0x0a);
(0096)     	    putchar1(0x0d); 		 
(0097)     	   }	  
(0098) 	 #endif		   	 
(0099) 	}
(0100) }	
FILE: <library>
    00E3 9508      RET
push_gset1:
    00E4 935A      ST	R21,-Y
    00E5 934A      ST	R20,-Y
    00E6 9508      RET
pop_gset1:
    00E7 E0E1      LDI	R30,1
pop:
    00E8 9149      LD	R20,Y+
    00E9 9159      LD	R21,Y+
    00EA FDE0      SBRC	R30,0
    00EB 9508      RET
    00EC 9169      LD	R22,Y+
    00ED 9179      LD	R23,Y+
    00EE FDE1      SBRC	R30,1
    00EF 9508      RET
    00F0 90A9      LD	R10,Y+
    00F1 90B9      LD	R11,Y+
    00F2 FDE2      SBRC	R30,2
    00F3 9508      RET
    00F4 90C9      LD	R12,Y+
    00F5 90D9      LD	R13,Y+
    00F6 FDE3      SBRC	R30,3
    00F7 9508      RET
    00F8 90E9      LD	R14,Y+
    00F9 90F9      LD	R15,Y+
    00FA 9508      RET

⌨️ 快捷键说明

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