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

📄 usart_scan.lst

📁 protues_atmeg8学习之:uart篇源代码
💻 LST
字号:
__start:
__text_start:
    0036 E5CF      LDI	R28,0x5F
    0037 E0D4      LDI	R29,4
    0038 BFCD      OUT	0x3D,R28
    0039 BFDE      OUT	0x3E,R29
    003A 51C0      SUBI	R28,0x10
    003B 40D0      SBCI	R29,0
    003C EA0A      LDI	R16,0xAA
    003D 8308      STD	Y+0,R16
    003E 2400      CLR	R0
    003F EAE5      LDI	R30,0xA5
    0040 E0F0      LDI	R31,0
    0041 E010      LDI	R17,0
    0042 3AE5      CPI	R30,0xA5
    0043 07F1      CPC	R31,R17
    0044 F011      BEQ	0x0047
    0045 9201      ST	R0,Z+
    0046 CFFB      RJMP	0x0042
    0047 8300      STD	Z+0,R16
    0048 E2E6      LDI	R30,0x26
    0049 E0F0      LDI	R31,0
    004A E6A0      LDI	R26,0x60
    004B E0B0      LDI	R27,0
    004C E010      LDI	R17,0
    004D 36EB      CPI	R30,0x6B
    004E 07F1      CPC	R31,R17
    004F F021      BEQ	0x0054
    0050 95C8      LPM
    0051 9631      ADIW	R30,1
    0052 920D      ST	R0,X+
    0053 CFF9      RJMP	0x004D
    0054 D034      RCALL	_main
_exit:
    0055 CFFF      RJMP	_exit
FILE: F:\Learn\AVR\Pro_Mega8\USART\USART_Scan\usart_scan.c
(0001) /******************************************/
(0002) //文件名:usart_scan.c
(0003) //功能: 扫描式串口通信的应用
(0004) //作者:  young
(0005) //时间: 2006.11.16
(0006) //目标MCU:ATmega8   
(0007) //晶振:  8MHZ
(0008) /******************************************/
(0009) //通信波特率为9600(8位数据,无校验,1位停止位,无数据流控制)。
(0010) 
(0011) #include <iom8v.h>
(0012) #define fosc 8000000   //晶振8MHZ
(0013) #define baud 9600	   //波特率
(0014) 
(0015) //字符输出函数
(0016) void putchar(unsigned char c)
(0017) {	 
(0018)      //等待写入UDR的字符被送到发送移位寄存器
(0019)      while (!(UCSRA&(1<<UDRE)));
_putchar:
  c                    --> R16
    0056 9B5D      SBIS	0x0B,5
    0057 CFFE      RJMP	_putchar
(0020) 	 UDR=c;    
    0058 B90C      OUT	0x0C,R16
(0021) }
    0059 9508      RET
(0022) 
(0023) //字符输入函数	
(0024) unsigned char getchar(void)
(0025) {
(0026)     //等待接收字符
(0027) 	 while(!(UCSRA&(1<<RXC)));
_getchar:
    005A 9B5F      SBIS	0x0B,7
    005B CFFE      RJMP	_getchar
(0028)      return UDR;
    005C B10C      IN	R16,0x0C
    005D 9508      RET
_puts:
  s                    --> R20
    005E D050      RCALL	push_gset1
    005F 01A8      MOVW	R20,R16
(0029) }
(0030) 	
(0031) //字符串输出函数
(0032) int puts(char *s)
(0033) {
    0060 C005      RJMP	0x0066
(0034) 	while (*s)
(0035) 	{
(0036) 		putchar(*s);
    0061 01FA      MOVW	R30,R20
    0062 8100      LDD	R16,Z+0
    0063 DFF2      RCALL	_putchar
(0037) 		s++;
    0064 5F4F      SUBI	R20,0xFF
    0065 4F5F      SBCI	R21,0xFF
    0066 01FA      MOVW	R30,R20
    0067 8020      LDD	R2,Z+0
    0068 2022      TST	R2
    0069 F7B9      BNE	0x0061
(0038) 	}	
(0039)     return 1;
    006A E001      LDI	R16,1
    006B E010      LDI	R17,0
    006C D045      RCALL	pop_gset1
    006D 9508      RET
_puts_hh:
  s                    --> R20
    006E D040      RCALL	push_gset1
    006F 01A8      MOVW	R20,R16
(0040) }
(0041) 
(0042) //含回车换行的字符串输出函数
(0043) void puts_hh(char *s)
(0044) {
    0070 C005      RJMP	0x0076
(0045) 	while (*s)
(0046) 	{
(0047) 		putchar(*s);
    0071 01FA      MOVW	R30,R20
    0072 8100      LDD	R16,Z+0
    0073 DFE2      RCALL	_putchar
(0048) 		s++;
    0074 5F4F      SUBI	R20,0xFF
    0075 4F5F      SBCI	R21,0xFF
    0076 01FA      MOVW	R30,R20
    0077 8020      LDD	R2,Z+0
    0078 2022      TST	R2
    0079 F7B9      BNE	0x0071
(0049) 	}	
(0050)     putchar(0x0a);//换行
    007A E00A      LDI	R16,0xA
    007B DFDA      RCALL	_putchar
(0051) 	putchar(0x0d);//回车
    007C E00D      LDI	R16,0xD
    007D DFD8      RCALL	_putchar
(0052) }
    007E D033      RCALL	pop_gset1
    007F 9508      RET
(0053) 
(0054) //UART初始化
(0055) void uart_init(void)
(0056) {
(0057)     UCSRB=(1<<RXEN)|(1<<TXEN);             //允许发送和接收
_uart_init:
    0080 E188      LDI	R24,0x18
    0081 B98A      OUT	0x0A,R24
(0058)     UBRRL=(fosc/16/baud-1)%256;
    0082 E383      LDI	R24,0x33
    0083 B989      OUT	0x09,R24
(0059)     UBRRH=(fosc/16/baud-1)/256;
    0084 2422      CLR	R2
    0085 BC20      OUT	0x20,R2
(0060)     UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位停止位
    0086 E886      LDI	R24,0x86
    0087 BD80      OUT	0x20,R24
(0061) }
    0088 9508      RET
(0062) 
(0063) 
(0064) //RS232通信main函数
(0065) void main(void)
(0066) {
(0067)     unsigned char i=0;
_main:
  i                    --> R20
    0089 2744      CLR	R20
(0068)     uart_init();
    008A DFF5      RCALL	_uart_init
(0069) 
(0070) 	//proteus还不支持汉文显示
(0071)     puts_hh("RS232 test demo!");
    008B E904      LDI	R16,0x94
    008C E010      LDI	R17,0
    008D DFE0      RCALL	_puts_hh
(0072)     puts_hh("MAIL:young45@126.com");
    008E E70F      LDI	R16,0x7F
    008F E010      LDI	R17,0
    0090 DFDD      RCALL	_puts_hh
(0073)     putchar(0x0a);    //换行
    0091 E00A      LDI	R16,0xA
    0092 DFC3      RCALL	_putchar
(0074)     putchar(0x0d);    //回车
    0093 E00D      LDI	R16,0xD
    0094 DFC1      RCALL	_putchar
(0075)  
(0076)     //键盘输入回显到终端
(0077)     puts("put int please: ");
    0095 E60E      LDI	R16,0x6E
    0096 E010      LDI	R17,0
    0097 DFC6      RCALL	_puts
    0098 C014      RJMP	0x00AD
(0078) 
(0079)     while(1)
(0080)     {
(0081)  	    i=getchar();
    0099 DFC0      RCALL	_getchar
    009A 2F40      MOV	R20,R16
(0082) 	    if (i!=0)              //按PC键盘开始测试
    009B 2300      TST	R16
    009C F081      BEQ	0x00AD
(0083) 	    {
(0084) 	        putchar(0x0a);     //换行
    009D E00A      LDI	R16,0xA
    009E DFB7      RCALL	_putchar
(0085)             putchar(0x0d);     //回车
    009F E00D      LDI	R16,0xD
    00A0 DFB5      RCALL	_putchar
(0086) 	        puts("your put is: ");
    00A1 E600      LDI	R16,0x60
    00A2 E010      LDI	R17,0
    00A3 DFBA      RCALL	_puts
(0087) 		    putchar(i);
    00A4 2F04      MOV	R16,R20
    00A5 DFB0      RCALL	_putchar
(0088) 		    putchar(0x0a);     //换行
    00A6 E00A      LDI	R16,0xA
    00A7 DFAE      RCALL	_putchar
(0089)             putchar(0x0d);     //回车
    00A8 E00D      LDI	R16,0xD
    00A9 DFAC      RCALL	_putchar
(0090) 		    puts("put int please: ");
    00AA E60E      LDI	R16,0x6E
    00AB E010      LDI	R17,0
    00AC DFB1      RCALL	_puts
    00AD CFEB      RJMP	0x0099
(0091) 	    }	
(0092)     }
(0093) }
FILE: <library>
    00AE 9508      RET
push_gset1:
    00AF 935A      ST	R21,-Y
    00B0 934A      ST	R20,-Y
    00B1 9508      RET
pop_gset1:
    00B2 E0E1      LDI	R30,1
pop:
    00B3 9149      LD	R20,Y+
    00B4 9159      LD	R21,Y+
    00B5 FDE0      SBRC	R30,0
    00B6 9508      RET
    00B7 9169      LD	R22,Y+
    00B8 9179      LD	R23,Y+
    00B9 FDE1      SBRC	R30,1
    00BA 9508      RET
    00BB 90A9      LD	R10,Y+
    00BC 90B9      LD	R11,Y+
    00BD FDE2      SBRC	R30,2
    00BE 9508      RET
    00BF 90C9      LD	R12,Y+
    00C0 90D9      LD	R13,Y+
    00C1 FDE3      SBRC	R30,3
    00C2 9508      RET
    00C3 90E9      LD	R14,Y+
    00C4 90F9      LD	R15,Y+
    00C5 9508      RET

⌨️ 快捷键说明

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