📄 testuart.lis
字号:
.module testuart.c
.area text(rom, con, rel)
0000 .dbfile D:\avr_prm\testuart.c
0000 .dbfunc e getcrc _getcrc fS
0000 ; j -> R22,R23
0000 ; i -> R22,R23
0000 ; acc -> R20,R21
0000 ; len -> R18,R19
0000 ; s -> R16,R17
.even
0000 _getcrc::
0000 0E940000 xcall push_gset2
0004 .dbline -1
0004 .dbline 38
0004 ; //ICC-AVR application builder : 2006-7-17 15:54:53
0004 ; // Target : M16
0004 ; // Crystal: 1.0000Mhz
0004 ;
0004 ; #include <iom16v.h>
0004 ; #include <macros.h>
0004 ;
0004 ; //定义MCU与LCD的接口
0004 ; #define LCD_EN_PORT PORTB
0004 ; #define LCD_RW_PORT PORTB
0004 ; #define LCD_RS_PORT PORTB
0004 ; #define LCD_DATA_PORT PORTA
0004 ; #define LCD_DATA_DDR DDRA
0004 ; #define LCD_DATA_PIN PINA
0004 ;
0004 ; //定义ms7512b与MCU的接口
0004 ; #define MS7512B_RS_PORT PORTC
0004 ; #define MS7512B_MOD1_PORT PORTC
0004 ; //#define MS7512B_MOD2_PORT PORTC
0004 ; //定义发送判断接口
0004 ; #define SWITCH_PORT PORTB
0004 ; //定义LED控制口
0004 ; #define LED_CONTROL_PORT PORTD
0004 ; //定义LCD键盘控制口
0004 ; #define LCD_KEY_PORT PORTD
0004 ;
0004 ; #define LCD_KEY 0x40 //portd6 in
0004 ; #define LED_CONTROL 0x80 //portd7 out
0004 ; #define MS7512B_MOD1 0x01 //portc0 out
0004 ; //#define MS7512B_MOD2 0x02 //portc1 out
0004 ; #define MS7512B_RS 0x02 //portc1 out
0004 ; #define SWITCH_EN 0x10 //portB4 in
0004 ; #define LCD_EN 0x01 //portB0 out
0004 ; #define LCD_RW 0x02 //portB1 out/in
0004 ; #define LCD_RS 0x04 //portB2 out
0004 ; #define LCD_DATA 0xf0 //portA4/5/6/7 out
0004 ; short getcrc(unsigned char *s, short len)
0004 ; {
0004 .dbline 39
0004 ; short acc=0,i,j=0;
0004 4427 clr R20
0006 5527 clr R21
0008 .dbline 39
0008 6627 clr R22
000A 7727 clr R23
000C 20C0 xjmp L3
000E L2:
000E .dbline 41
000E ; while(len--)
000E ; {
000E .dbline 42
000E ; acc=acc^(*s++<<8);
000E F801 movw R30,R16
0010 2190 ld R2,Z+
0012 8F01 movw R16,R30
0014 3324 clr R3
0016 322C mov R3,R2
0018 2224 clr R2
001A 4225 eor R20,R2
001C 5325 eor R21,R3
001E .dbline 43
001E ; for(i=0;i++<8;)
001E 6627 clr R22
0020 7727 clr R23
0022 0DC0 xjmp L8
0024 L5:
0024 .dbline 44
0024 ; if(acc&0x8000)
0024 57FF sbrs R21,7
0026 09C0 rjmp L9
0028 .dbline 45
0028 ; acc=(acc<<1)^0x1021;
0028 81E2 ldi R24,4129
002A 90E1 ldi R25,16
002C 1A01 movw R2,R20
002E 220C lsl R2
0030 331C rol R3
0032 2826 eor R2,R24
0034 3926 eor R3,R25
0036 A101 movw R20,R2
0038 02C0 xjmp L10
003A L9:
003A .dbline 47
003A ; else
003A ; acc=acc<<1;
003A 440F lsl R20
003C 551F rol R21
003E L10:
003E L6:
003E .dbline 43
003E L8:
003E .dbline 43
003E 1B01 movw R2,R22
0040 6F5F subi R22,255 ; offset = 1
0042 7F4F sbci R23,255
0044 C101 movw R24,R2
0046 8830 cpi R24,8
0048 E0E0 ldi R30,0
004A 9E07 cpc R25,R30
004C 5CF3 brlt L5
004E .dbline 48
004E L3:
004E .dbline 40
004E 1901 movw R2,R18
0050 2150 subi R18,1
0052 3040 sbci R19,0
0054 2220 tst R2
0056 D9F6 brne L2
0058 3320 tst R3
005A C9F6 brne L2
005C X0:
005C .dbline 49
005C ; }
005C ; return(acc);
005C 8A01 movw R16,R20
005E .dbline -2
005E L1:
005E 0E940000 xcall pop_gset2
0062 .dbline 0 ; func end
0062 0895 ret
0064 .dbsym r j 22 S
0064 .dbsym r i 22 S
0064 .dbsym r acc 20 S
0064 .dbsym r len 18 S
0064 .dbsym r s 16 pc
0064 .dbend
0064 .dbfunc e makecrc _makecrc fV
0064 ; crcin -> R10,R11
0064 ; len -> R22,R23
0064 ; s -> R20,R21
.even
0064 _makecrc::
0064 0E940000 xcall push_gset3
0068 B901 movw R22,R18
006A A801 movw R20,R16
006C .dbline -1
006C .dbline 52
006C ; }
006C ; void makecrc(unsigned char *s,int len)
006C ; {
006C .dbline 54
006C ; short crcin;
006C ; crcin = getcrc(s,len);
006C 9B01 movw R18,R22
006E 8A01 movw R16,R20
0070 C7DF xcall _getcrc
0072 5801 movw R10,R16
0074 .dbline 55
0074 ; s[len]=crcin>>8;
0074 FB01 movw R30,R22
0076 E40F add R30,R20
0078 F51F adc R31,R21
007A 1501 movw R2,R10
007C 232C mov R2,R3
007E 3324 clr R3
0080 27FC sbrc R2,7
0082 3094 com R3
0084 2082 std z+0,R2
0086 .dbline 56
0086 ; s[len+1]=crcin%256;
0086 20E0 ldi R18,256
0088 31E0 ldi R19,1
008A 0E940000 xcall mod16s
008E FB01 movw R30,R22
0090 E40F add R30,R20
0092 F51F adc R31,R21
0094 0183 std z+1,R16
0096 .dbline -2
0096 L11:
0096 0E940000 xcall pop_gset3
009A .dbline 0 ; func end
009A 0895 ret
009C .dbsym r crcin 10 S
009C .dbsym r len 22 I
009C .dbsym r s 20 pc
009C .dbend
009C .dbfunc e checkcrc _checkcrc fI
009C ; crcin -> R20,R21
009C ; len -> R10,R11
009C ; s -> R22,R23
.even
009C _checkcrc::
009C 0E940000 xcall push_gset3
00A0 5901 movw R10,R18
00A2 B801 movw R22,R16
00A4 .dbline -1
00A4 .dbline 61
00A4 ;
00A4 ; }
00A4 ;
00A4 ; int checkcrc(unsigned char *s,int len)
00A4 ; {
00A4 .dbline 63
00A4 ; short crcin;
00A4 ; crcin= getcrc(s,len);
00A4 9501 movw R18,R10
00A6 8B01 movw R16,R22
00A8 ABDF xcall _getcrc
00AA A801 movw R20,R16
00AC .dbline 64
00AC ; if(((0xffff&crcin)==((0xffff&(s[len]<<8))+(0xff&(s[len+1])))))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -