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

📄 testuart.lis

📁 本代码是AVR单片机的完整IIC通信程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .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 + -