📄 uart.lis
字号:
.module UART.c
.area text(rom, con, rel)
0000 .dbfile F:\学习\avr\sim340_e\UART.c
0000 .dbfunc e delay_1us _delay_1us fV
.even
0000 _delay_1us::
0000 .dbline -1
0000 .dbline 5
0000 ; #include "UART.h"
0000 ; #define XTAL 4 //晶振频率,单位MHz
0000 ;
0000 ; void delay_1us(void) //1us延时函数
0000 ; {
0000 .dbline 6
0000 ; asm("nop");
0000 0000 nop
0002 .dbline -2
0002 L1:
0002 .dbline 0 ; func end
0002 0895 ret
0004 .dbend
0004 .dbfunc e delay_nus _delay_nus fV
0004 ; i -> R20,R21
0004 ; n -> R22,R23
.even
0004 _delay_nus::
0004 0E940000 xcall push_gset2
0008 B801 movw R22,R16
000A .dbline -1
000A .dbline 10
000A ; }
000A ;
000A ; void delay_nus(unsigned int n) //N us延时函数
000A ; {
000A .dbline 11
000A ; unsigned int i=0;
000A 4427 clr R20
000C 5527 clr R21
000E .dbline 12
000E ; for (i=0;i<n;i++)
000E 03C0 xjmp L6
0010 L3:
0010 .dbline 13
0010 F7DF xcall _delay_1us
0012 L4:
0012 .dbline 12
0012 4F5F subi R20,255 ; offset = 1
0014 5F4F sbci R21,255
0016 L6:
0016 .dbline 12
0016 4617 cp R20,R22
0018 5707 cpc R21,R23
001A D0F3 brlo L3
001C .dbline -2
001C L2:
001C 0E940000 xcall pop_gset2
0020 .dbline 0 ; func end
0020 0895 ret
0022 .dbsym r i 20 i
0022 .dbsym r n 22 i
0022 .dbend
0022 .dbfunc e delay_1ms _delay_1ms fV
0022 ; i -> R16,R17
.even
0022 _delay_1ms::
0022 .dbline -1
0022 .dbline 17
0022 ; delay_1us();
0022 ; }
0022 ;
0022 ; void delay_1ms(void) //1ms延时函数
0022 ; {
0022 .dbline 19
0022 0027 clr R16
0024 1127 clr R17
0026 02C0 xjmp L11
0028 L8:
0028 .dbline 19
0028 L9:
0028 .dbline 19
0028 0F5F subi R16,255 ; offset = 1
002A 1F4F sbci R17,255
002C L11:
002C .dbline 19
002C ; unsigned int i;
002C ; for (i=0;i<(unsigned int)(XTAL*143-2);i++);
002C 0A33 cpi R16,58
002E E2E0 ldi R30,2
0030 1E07 cpc R17,R30
0032 D0F3 brlo L8
0034 .dbline -2
0034 L7:
0034 .dbline 0 ; func end
0034 0895 ret
0036 .dbsym r i 16 i
0036 .dbend
0036 .dbfunc e delay_nms _delay_nms fV
0036 ; i -> R20,R21
0036 ; n -> R22,R23
.even
0036 _delay_nms::
0036 0E940000 xcall push_gset2
003A B801 movw R22,R16
003C .dbline -1
003C .dbline 23
003C ; }
003C ;
003C ; void delay_nms(unsigned int n) //N ms延时函数
003C ; {
003C .dbline 24
003C ; unsigned int i=0;
003C 4427 clr R20
003E 5527 clr R21
0040 .dbline 25
0040 ; for (i=0;i<n;i++)
0040 03C0 xjmp L16
0042 L13:
0042 .dbline 26
0042 .dbline 27
0042 EFDF xcall _delay_1ms
0044 .dbline 28
0044 L14:
0044 .dbline 25
0044 4F5F subi R20,255 ; offset = 1
0046 5F4F sbci R21,255
0048 L16:
0048 .dbline 25
0048 4617 cp R20,R22
004A 5707 cpc R21,R23
004C D0F3 brlo L13
004E .dbline -2
004E L12:
004E 0E940000 xcall pop_gset2
0052 .dbline 0 ; func end
0052 0895 ret
0054 .dbsym r i 20 i
0054 .dbsym r n 22 i
0054 .dbend
0054 .dbfunc e SetOK _SetOK fI
0054 ; UART1_TX_BUF -> R16,R17
.even
0054 _SetOK::
0054 .dbline -1
0054 .dbline 31
0054 ; {
0054 ; delay_1ms();
0054 ; }
0054 ; }
0054 ; int SetOK(char UART1_TX_BUF[])
0054 ; {
0054 .dbline 32
0054 ; UART1_TX_BUF[0] = 'O';
0054 8FE4 ldi R24,79
0056 F801 movw R30,R16
0058 8083 std z+0,R24
005A .dbline 33
005A ; UART1_TX_BUF[1] = 'K';
005A 8BE4 ldi R24,75
005C 8183 std z+1,R24
005E .dbline 34
005E ; UART1_TX_BUF[2] = 13;
005E 8DE0 ldi R24,13
0060 F801 movw R30,R16
0062 8283 std z+2,R24
0064 .dbline 36
0064 ;
0064 ; return 3;
0064 03E0 ldi R16,3
0066 10E0 ldi R17,0
0068 .dbline -2
0068 L17:
0068 .dbline 0 ; func end
0068 0895 ret
006A .dbsym r UART1_TX_BUF 16 pc
006A .dbend
006A .dbfunc e SetError _SetError fI
006A ; UART1_TX_BUF -> R16,R17
.even
006A _SetError::
006A .dbline -1
006A .dbline 39
006A ; }
006A ; int SetError(char UART1_TX_BUF[])
006A ; {
006A .dbline 40
006A ; UART1_TX_BUF[0] = 'E';
006A 85E4 ldi R24,69
006C F801 movw R30,R16
006E 8083 std z+0,R24
0070 .dbline 41
0070 ; UART1_TX_BUF[1] = 'R';
0070 82E5 ldi R24,82
0072 8183 std z+1,R24
0074 .dbline 42
0074 ; UART1_TX_BUF[2] = 'O';
0074 8FE4 ldi R24,79
0076 F801 movw R30,R16
0078 8283 std z+2,R24
007A .dbline 43
007A ; UART1_TX_BUF[3] = 'R';
007A 82E5 ldi R24,82
007C F801 movw R30,R16
007E 8383 std z+3,R24
0080 .dbline 44
0080 ; UART1_TX_BUF[4] = 'R';
0080 F801 movw R30,R16
0082 8483 std z+4,R24
0084 .dbline 45
0084 ; UART1_TX_BUF[5] = 13;
0084 8DE0 ldi R24,13
0086 F801 movw R30,R16
0088 8583 std z+5,R24
008A .dbline 47
008A ;
008A ; return 6;
008A 06E0 ldi R16,6
008C 10E0 ldi R17,0
008E .dbline -2
008E L18:
008E .dbline 0 ; func end
008E 0895 ret
0090 .dbsym r UART1_TX_BUF 16 pc
0090 .dbend
0090 .dbfunc e SetPhone _SetPhone fI
0090 ; chrLo -> R22
0090 ; chrHi -> R20
0090 ; i -> R22,R23
0090 ; nLen -> y+4
0090 ; phone -> R18,R19
0090 ; recv -> R16,R17
.even
0090 _SetPhone::
0090 0E940000 xcall push_gset2
0094 .dbline -1
0094 .dbline 50
0094 ; }
0094 ; int SetPhone(char recv[],char phone[],int nLen)
0094 ; {
0094 .dbline 53
0094 ; int i;
0094 ; char chrHi,chrLo;
0094 ; chrHi = recv[0];//长度
0094 F801 movw R30,R16
0096 4081 ldd R20,z+0
0098 .dbline 54
0098 ; chrLo = recv[1];
0098 6181 ldd R22,z+1
009A .dbline 55
009A ; if(recv[1] == ',')
009A F801 movw R30,R16
009C 8181 ldd R24,z+1
009E 8C32 cpi R24,44
00A0 99F4 brne L20
00A2 .dbline 56
00A2 ; {
00A2 .dbline 57
00A2 ; for(i = 0;i < chrHi;i++)
00A2 6627 clr R22
00A4 7727 clr R23
00A6 0AC0 xjmp L25
00A8 L22:
00A8 .dbline 58
00A8 .dbline 59
00A8 FB01 movw R30,R22
00AA E00F add R30,R16
00AC F11F adc R31,R17
00AE 2280 ldd R2,z+2
00B0 FB01 movw R30,R22
00B2 E20F add R30,R18
00B4 F31F adc R31,R19
00B6 2082 std z+0,R2
00B8 .dbline 60
00B8 L23:
00B8 .dbline 57
00B8 6F5F subi R22,255 ; offset = 1
00BA 7F4F sbci R23,255
00BC L25:
00BC .dbline 57
00BC 242E mov R2,R20
00BE 3324 clr R3
00C0 6215 cp R22,R2
00C2 7305 cpc R23,R3
00C4 8CF3 brlt L22
00C6 .dbline 61
00C6 ; {
00C6 ; phone[i] = recv[i + 2];
00C6 ; }
00C6 ; }
00C6 03C0 xjmp L21
00C8 L20:
00C8 .dbline 62
00C8 ; else return 0;
00C8 0027 clr R16
00CA 1127 clr R17
00CC 02C0 xjmp L19
00CE L21:
00CE .dbline 64
00CE ;
00CE ; return chrHi;
00CE 042F mov R16,R20
00D0 1127 clr R17
00D2 .dbline -2
00D2 L19:
00D2 0E940000 xcall pop_gset2
00D6 .dbline 0 ; func end
00D6 0895 ret
00D8 .dbsym r chrLo 22 c
00D8 .dbsym r chrHi 20 c
00D8 .dbsym r i 22 I
00D8 .dbsym l nLen 4 I
00D8 .dbsym r phone 18 pc
00D8 .dbsym r recv 16 pc
00D8 .dbend
00D8 .dbfunc e GetPhone _GetPhone fI
00D8 ; i -> R20,R21
00D8 ; out -> R18,R19
00D8 ; in -> R16,R17
.even
00D8 _GetPhone::
00D8 0E940000 xcall push_gset1
00DC .dbline -1
00DC .dbline 68
00DC ; }
00DC ;
00DC ; int GetPhone(char *in,char *out)
00DC ; {
00DC .dbline 69
00DC ; int i=0;
00DC 4427 clr R20
00DE 5527 clr R21
00E0 0AC0 xjmp L28
00E2 L27:
00E2 .dbline 71
00E2 .dbline 72
00E2 FA01 movw R30,R20
00E4 E00F add R30,R16
00E6 F11F adc R31,R17
00E8 2780 ldd R2,z+7
00EA FA01 movw R30,R20
00EC E20F add R30,R18
00EE F31F adc R31,R19
00F0 2082 std z+0,R2
00F2 .dbline 73
00F2 4F5F subi R20,255 ; offset = 1
00F4 5F4F sbci R21,255
00F6 .dbline 74
00F6 L28:
00F6 .dbline 70
00F6 ; while(in[i]!=',')
00F6 FA01 movw R30,R20
00F8 E00F add R30,R16
00FA F11F adc R31,R17
00FC 8081 ldd R24,z+0
00FE 8C32 cpi R24,44
0100 81F7 brne L27
0102 .dbline 75
0102 ; {
0102 ; out[i]=in[i+7];
0102 ; i++;
0102 ; }
0102 ; return i;
0102 8A01 movw R16,R20
0104 .dbline -2
0104 L26:
0104 0E940000 xcall pop_gset1
0108 .dbline 0 ; func end
0108 0895 ret
010A .dbsym r i 20 I
010A .dbsym r out 18 pc
010A .dbsym r in 16 pc
010A .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -