📄 uart.lst
字号:
__start:
__text_start:
001D E5CF LDI R28,0x5F
001E E0D2 LDI R29,2
001F BFCD OUT 0x3D,R28
0020 BFDE OUT 0x3E,R29
0021 51C0 SUBI R28,0x10
0022 40D0 SBCI R29,0
0023 EA0A LDI R16,0xAA
0024 8308 STD Y+0,R16
0025 2400 CLR R0
0026 E7E8 LDI R30,0x78
0027 E0F0 LDI R31,0
0028 E010 LDI R17,0
0029 37E8 CPI R30,0x78
002A 07F1 CPC R31,R17
002B F011 BEQ 0x002E
002C 9201 ST R0,Z+
002D CFFB RJMP 0x0029
002E 8300 STD Z+0,R16
002F E2E2 LDI R30,0x22
0030 E0F0 LDI R31,0
0031 E6A0 LDI R26,0x60
0032 E0B0 LDI R27,0
0033 E010 LDI R17,0
0034 33EA CPI R30,0x3A
0035 07F1 CPC R31,R17
0036 F021 BEQ 0x003B
0037 95C8 LPM
0038 9631 ADIW R30,1
0039 920D ST R0,X+
003A CFF9 RJMP 0x0034
003B D033 RCALL _main
_exit:
003C CFFF RJMP _exit
_DelayMs:
j --> R20
i --> R16
003D D06D RCALL push_gset1
FILE: J:\AVRpractice\BOOK\UARTforBook\UART.C
(0001) #include <io8535v.h>
(0002) #define uchar unsigned char
(0003) #define uint unsigned int
(0004)
(0005) uchar Table[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
(0006) 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
(0007) uchar Send_Data[]={'a','b','c','d'};
(0008) uchar Receive_Data[]={0,0,0,0};
(0009)
(0010) void DelayMs(uint i)
(0011) {uint j;
(0012) for(;i!=0;i--)
003E C00A RJMP 0x0049
(0013) {for(j=2000;j!=0;j--) {;}}
003F ED40 LDI R20,0xD0
0040 E057 LDI R21,7
0041 C002 RJMP 0x0044
0042 5041 SUBI R20,1
0043 4050 SBCI R21,0
0044 3040 CPI R20,0
0045 0745 CPC R20,R21
0046 F7D9 BNE 0x0042
0047 5001 SUBI R16,1
0048 4010 SBCI R17,0
0049 3000 CPI R16,0
004A 0701 CPC R16,R17
004B F799 BNE 0x003F
(0014) }
004C D061 RCALL pop_gset1
004D 9508 RET
_Display:
sel --> R20
i --> R22
p --> R10
004E D076 RCALL push_gset3
004F 2EA0 MOV R10,R16
0050 2EB1 MOV R11,R17
(0015)
(0016) void Display(uchar *p) //动态显示函数,参数p为待显示的数组名
(0017) {uchar i,sel=0x01;
0051 E041 LDI R20,1
(0018) for(i=0;i<4;i++)
0052 2766 CLR R22
0053 C017 RJMP 0x006B
(0019) {PORTA=sel; //选通最右边的数码管
0054 BB4B OUT 0x1B,R20
(0020) PORTC=0xff-Table[p[i]]; //送字型码
0055 2FE6 MOV R30,R22
0056 27FF CLR R31
0057 0DEA ADD R30,R10
0058 1DFB ADC R31,R11
0059 81E0 LDD R30,Z+0
005A 27FF CLR R31
005B E680 LDI R24,0x60
005C E090 LDI R25,0
005D 0FE8 ADD R30,R24
005E 1FF9 ADC R31,R25
005F 8020 LDD R2,Z+0
0060 2433 CLR R3
0061 EF8F LDI R24,0xFF
0062 E090 LDI R25,0
0063 1982 SUB R24,R2
0064 0993 SBC R25,R3
0065 BB85 OUT 0x15,R24
(0021) DelayMs(1); //显示延时
0066 E001 LDI R16,1
0067 E010 LDI R17,0
0068 DFD4 RCALL _DelayMs
(0022) sel=sel<<1; //移位以显示前一位
0069 0F44 LSL R20
006A 9563 INC R22
006B 3064 CPI R22,4
006C F338 BCS 0x0054
(0023) }
(0024) }
006D D03B RCALL pop_gset3
006E 9508 RET
(0025)
(0026) void main(void)
(0027) {uchar temp,i;
(0028) DDRA=0xff;
_main:
temp --> Y+1
i --> R20
006F EF8F LDI R24,0xFF
0070 BB8A OUT 0x1A,R24
(0029) DDRC=0xff;
0071 BB84 OUT 0x14,R24
(0030) PORTA=0xff;
0072 BB8B OUT 0x1B,R24
(0031) PORTC=0x00;
0073 2422 CLR R2
0074 BA25 OUT 0x15,R2
(0032) DelayMs(2000);
0075 ED00 LDI R16,0xD0
0076 E017 LDI R17,7
0077 DFC5 RCALL _DelayMs
(0033) PORTC=0xff;
0078 EF8F LDI R24,0xFF
0079 BB85 OUT 0x15,R24
(0034) UBRR=51;//9600bps,8.000M,
007A E383 LDI R24,0x33
007B B989 OUT 0x09,R24
(0035) UCR=0x18;//RXD.TXD使能;
007C E188 LDI R24,0x18
007D B98A OUT 0x0A,R24
(0036) for(i=0;i<4;i++)
007E 2744 CLR R20
007F C00F RJMP 0x008F
(0037) {while(!(USR&0x80))
(0038) {Display(Receive_Data);} //等待接收完成
0080 E704 LDI R16,0x74
0081 E010 LDI R17,0
0082 DFCB RCALL _Display
0083 9B5F SBIS 0x0B,7
0084 CFFB RJMP 0x0080
(0039) Receive_Data[i]=UDR-48;} //接收数据
0085 E784 LDI R24,0x74
0086 E090 LDI R25,0
0087 2FE4 MOV R30,R20
0088 27FF CLR R31
0089 0FE8 ADD R30,R24
008A 1FF9 ADC R31,R25
008B B18C IN R24,0x0C
008C 5380 SUBI R24,0x30
008D 8380 STD Z+0,R24
008E 9543 INC R20
008F 3044 CPI R20,4
0090 F390 BCS 0x0083
(0040) for(i=0;i<4;i++)
0091 2744 CLR R20
0092 C00E RJMP 0x00A1
(0041) {while(!(USR&0x20))
(0042) {Display(Receive_Data); } //等待移位寄存器空;
0093 E704 LDI R16,0x74
0094 E010 LDI R17,0
0095 DFB8 RCALL _Display
0096 9B5D SBIS 0x0B,5
0097 CFFB RJMP 0x0093
(0043) UDR=Send_Data[i];}
0098 E780 LDI R24,0x70
0099 E090 LDI R25,0
009A 2FE4 MOV R30,R20
009B 27FF CLR R31
009C 0FE8 ADD R30,R24
009D 1FF9 ADC R31,R25
009E 8020 LDD R2,Z+0
009F B82C OUT 0x0C,R2
00A0 9543 INC R20
00A1 3044 CPI R20,4
00A2 F398 BCS 0x0096
00A3 C003 RJMP 0x00A7
(0044) while(1)
(0045) Display(Receive_Data);
00A4 E704 LDI R16,0x74
00A5 E010 LDI R17,0
00A6 DFA7 RCALL _Display
00A7 CFFC RJMP 0x00A4
(0046) }
FILE: <library>
00A8 9508 RET
pop_gset3:
00A9 E0E4 LDI R30,4
00AA C004 RJMP pop
push_gset1:
00AB 935A ST R21,-Y
00AC 934A ST R20,-Y
00AD 9508 RET
pop_gset1:
00AE E0E1 LDI R30,1
pop:
00AF 9149 LD R20,Y+
00B0 9159 LD R21,Y+
00B1 FDE0 SBRC R30,0
00B2 9508 RET
00B3 9169 LD R22,Y+
00B4 9179 LD R23,Y+
00B5 FDE1 SBRC R30,1
00B6 9508 RET
00B7 90A9 LD R10,Y+
00B8 90B9 LD R11,Y+
00B9 FDE2 SBRC R30,2
00BA 9508 RET
00BB 90C9 LD R12,Y+
00BC 90D9 LD R13,Y+
00BD FDE3 SBRC R30,3
00BE 9508 RET
00BF 90E9 LD R14,Y+
00C0 90F9 LD R15,Y+
00C1 9508 RET
push_gset2:
00C2 937A ST R23,-Y
00C3 936A ST R22,-Y
00C4 CFE6 RJMP push_gset1
push_gset3:
00C5 92BA ST R11,-Y
00C6 92AA ST R10,-Y
00C7 CFFA RJMP push_gset2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -