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

📄 uart.lst

📁 AVR单片机的RS232通信演示程序
💻 LST
字号:
__start:
__text_start:
    0043 E5CF      LDI	R28,0x5F
    0044 E0D4      LDI	R29,4
    0045 BFCD      OUT	P3D,R28
    0046 BFDE      OUT	P3E,R29
    0047 51C0      SUBI	R28,0x10
    0048 40D0      SBCI	R29,0
    0049 EA0A      LDI	R16,0xAA
    004A 8308      STD	R16,0+Y
    004B 2400      CLR	R0
    004C EBEF      LDI	R30,0xBF
    004D E0F0      LDI	R31,0
    004E E010      LDI	R17,0
    004F 3BEF      CPI	R30,0xBF
    0050 07F1      CPC	R31,R17
    0051 F011      BEQ	0x0054
    0052 9201      ST	R0,Z+
    0053 CFFB      RJMP	0x004F
    0054 8300      STD	R16,0+Z
    0055 E2E6      LDI	R30,0x26
    0056 E0F0      LDI	R31,0
    0057 E6A0      LDI	R26,0x60
    0058 E0B0      LDI	R27,0
    0059 E010      LDI	R17,0
    005A 38E5      CPI	R30,0x85
    005B 07F1      CPC	R31,R17
    005C F021      BEQ	0x0061
    005D 95C8      LPM
    005E 9631      ADIW	R30,1
    005F 920D      ST	R0,X+
    0060 CFF9      RJMP	0x005A
    0061 D034      RCALL	_main
_exit:
    0062 CFFF      RJMP	_exit
FILE: C:\mega8\uart\uart.c
(0001) /******************************************/
(0002) /*           广州天河双龙电子公司         */
(0003) /*           http://www.sl.com.cn         */
(0004) /*              RS232通信演示程序         */
(0005) /*             作者:ntzwq@wx88.net        */
(0006) /*               2002年5月10日            */
(0007) /*  目标MCU:MEGA8   晶振:外部(EXT) 8MHZ   */
(0008) /******************************************/
(0009) //  1、使用ICCAVR的终端调试窗口(Terminal),进行通信调试。
(0010) //  2、对ICCAVR的终端调试窗口进行设置,设置串口为com1或com2,
(0011) //     通信波特率为19200(Tools->Environment Options...)。
(0012) //  3、将PC屏幕光标定位于调试窗口中。
(0013) #include <iom8v.h>
(0014) #define fosc 8000000 //晶振8MHZ
(0015) #define baud 19200	 //波特率
(0016) /*  		字符输出函数 		 */
(0017) void putchar(unsigned char c)
(0018) 	{	 
(0019)      while (!(UCSRA&(1<<UDRE)));
_putchar:
  c                    --> R16
    0063 9B5D      SBIS	P0B,5
    0064 CFFE      RJMP	_putchar
(0020) 	 UDR=c;    
    0065 B90C      OUT	P0C,R16
(0021) 	}
    0066 9508      RET
(0022) /*  		字符输入函数 		 */	
(0023) unsigned char getchar(void)
(0024)   	{
(0025) 	 while(!(UCSRA& (1<<RXC)));
_getchar:
    0067 9B5F      SBIS	P0B,7
    0068 CFFE      RJMP	_getchar
(0026)      return UDR;
    0069 B10C      IN	R16,P0C
    006A 9508      RET
_puts:
  s                    --> R20
    006B D051      RCALL	push_gset1
    006C 01A8      MOVW	R20,R16
(0027) 	}		
(0028) /*			字符串输出函数	   	 */	
(0029) int puts(char *s)
(0030) 	{
    006D C005      RJMP	0x0073
(0031) 	while (*s)
(0032) 		{
(0033) 		putchar(*s);
    006E 01FA      MOVW	R30,R20
    006F 8100      LDD	R16,0+Z
    0070 DFF2      RCALL	_putchar
(0034) 		s++;
    0071 5F4F      SUBI	R20,0xFF
    0072 4F5F      SBCI	R21,0xFF
    0073 01FA      MOVW	R30,R20
    0074 8020      LDD	R2,0+Z
    0075 2022      TST	R2
    0076 F7B9      BNE	0x006E
(0035) 		}	
(0036)     putchar(0x0a);//回车换行
    0077 E00A      LDI	R16,0xA
    0078 DFEA      RCALL	_putchar
(0037) 	putchar(0x0d);
    0079 E00D      LDI	R16,0xD
    007A DFE8      RCALL	_putchar
(0038) 	return 1;
    007B E001      LDI	R16,1
    007C E010      LDI	R17,0
    007D D042      RCALL	pop_gset1
    007E 9508      RET
_putstr:
  s                    --> R20
    007F D03D      RCALL	push_gset1
    0080 01A8      MOVW	R20,R16
(0039) 	}
(0040) /*	 	   不含回车换行的字符串输出函数 	 */	
(0041) void putstr(char *s)
(0042) 	{
    0081 C005      RJMP	0x0087
(0043) 	while (*s)
(0044) 		{
(0045) 		putchar(*s);
    0082 01FA      MOVW	R30,R20
    0083 8100      LDD	R16,0+Z
    0084 DFDE      RCALL	_putchar
(0046) 		s++;
    0085 5F4F      SUBI	R20,0xFF
    0086 4F5F      SBCI	R21,0xFF
    0087 01FA      MOVW	R30,R20
    0088 8020      LDD	R2,0+Z
    0089 2022      TST	R2
    008A F7B9      BNE	0x0082
(0047) 		}	
(0048) 	}	
    008B D034      RCALL	pop_gset1
    008C 9508      RET
(0049) /*			UART初始化				*/	
(0050) void uart_init(void)
(0051) {
(0052)  UCSRB=(1<<RXEN)|(1<<TXEN);//允许发送和接收
_uart_init:
    008D E188      LDI	R24,0x18
    008E B98A      OUT	P0A,R24
(0053)  UBRRL=(fosc/16/(baud+1))%256;
    008F E18A      LDI	R24,0x1A
    0090 B989      OUT	P09,R24
(0054)  UBRRH=(fosc/16/(baud+1))/256;
    0091 2422      CLR	R2
    0092 BC20      OUT	P20,R2
(0055)  UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
    0093 E886      LDI	R24,0x86
    0094 BD80      OUT	P20,R24
(0056) }
    0095 9508      RET
(0057) /*			RS232通信main函数		*/
(0058) void main(void)
(0059) {
(0060)  unsigned char i;
(0061)  uart_init();
_main:
  i                    --> R20
    0096 DFF6      RCALL	_uart_init
(0062)  puts("广州天河双龙电子公司RS232通信演示程序");
    0097 E909      LDI	R16,0x99
    0098 E010      LDI	R17,0
    0099 DFD1      RCALL	_puts
(0063)  puts("HTTP://WWW.SL.COM.CN");
    009A E804      LDI	R16,0x84
    009B E010      LDI	R17,0
    009C DFCE      RCALL	_puts
(0064)  puts("MAIL TO:sllg@sl.com.cn");
    009D E60D      LDI	R16,0x6D
    009E E010      LDI	R17,0
    009F DFCB      RCALL	_puts
    00A0 C01A      RJMP	0x00BB
(0065)  while(1)
(0066)     {
(0067) 	 i=getchar();
    00A1 DFC5      RCALL	_getchar
    00A2 2F40      MOV	R20,R16
(0068) 	 if (i!=0)//按PC键盘开始测试
    00A3 2300      TST	R16
    00A4 F0B1      BEQ	0x00BB
(0069) 	   {
(0070) 	    putstr("当前按键是:");
    00A5 E600      LDI	R16,0x60
    00A6 E010      LDI	R17,0
    00A7 DFD7      RCALL	_putstr
(0071) 		putchar(i);
    00A8 2F04      MOV	R16,R20
    00A9 DFB9      RCALL	_putchar
(0072) 		putchar(0x0a);
    00AA E00A      LDI	R16,0xA
    00AB DFB7      RCALL	_putchar
(0073) 		putchar(0x0d);
    00AC E00D      LDI	R16,0xD
    00AD DFB5      RCALL	_putchar
(0074) 	    puts("广州天河双龙电子公司RS232通信演示程序");
    00AE E909      LDI	R16,0x99
    00AF E010      LDI	R17,0
    00B0 DFBA      RCALL	_puts
(0075)  		puts("HTTP://WWW.SL.COM.CN");
    00B1 E804      LDI	R16,0x84
    00B2 E010      LDI	R17,0
    00B3 DFB7      RCALL	_puts
(0076)   		puts("MAIL TO:sllg@sl.com.cn");
    00B4 E60D      LDI	R16,0x6D
    00B5 E010      LDI	R17,0
    00B6 DFB4      RCALL	_puts
(0077) 		putchar(0x0a);
    00B7 E00A      LDI	R16,0xA
    00B8 DFAA      RCALL	_putchar
(0078) 		putchar(0x0d); 
    00B9 E00D      LDI	R16,0xD
    00BA DFA8      RCALL	_putchar
    00BB CFE5      RJMP	0x00A1
(0079) 	   }	 
(0080) 	}
(0081) }FILE: <library>
    00BC 9508      RET
push_gset1:
    00BD 935A      ST	R21,-Y
    00BE 934A      ST	R20,-Y
    00BF 9508      RET
pop_gset1:
    00C0 E0E1      LDI	R30,1
pop:
    00C1 9149      LD	R20,Y+
    00C2 9159      LD	R21,Y+
    00C3 FDE0      SBRC	R30,0
    00C4 9508      RET
    00C5 9169      LD	R22,Y+
    00C6 9179      LD	R23,Y+
    00C7 FDE1      SBRC	R30,1
    00C8 9508      RET
    00C9 90A9      LD	R10,Y+
    00CA 90B9      LD	R11,Y+
    00CB FDE2      SBRC	R30,2
    00CC 9508      RET
    00CD 90C9      LD	R12,Y+
    00CE 90D9      LD	R13,Y+
    00CF FDE3      SBRC	R30,3
    00D0 9508      RET
    00D1 90E9      LD	R14,Y+
    00D2 90F9      LD	R15,Y+
    00D3 9508      RET

⌨️ 快捷键说明

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