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

📄 iic.lis

📁 单片机为meg88
💻 LIS
字号:
                        .module iic.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\DOCUME~1\fengzm.POWERMAXTECH\桌面\MCU2\iic.c
 0000                   .dbfunc e twi_init _twi_init fV
                        .even
 0000           _twi_init::
 0000                   .dbline -1
 0000                   .dbline 10
 0000           ; 
 0000           ; #include "IIC.h"
 0000           ; #include "common.h"
 0000           ; 
 0000           ; 
 0000           ; // TWI initialize
 0000           ; // bit rate:32,prescal:1,rate:100Khz;
 0000           ; //SCL frequency = CPU Clock frequence / (16 + 2(TWBR)(PrescalerValue))
 0000           ; void twi_init(void)
 0000           ; {
 0000                   .dbline 11
 0000           ;       TWCR = 0x00;            //disable twi
 0000 2224              clr R2
 0002 2092BC00          sts 188,R2
 0006                   .dbline 12
 0006           ;       TWBR = 0x20;            //set bit rate equal 32
 0006 80E2              ldi R24,32
 0008 8093B800          sts 184,R24
 000C                   .dbline 13
 000C           ;       TWSR = 0x00;            //set prescale  clock/1
 000C 2092B900          sts 185,R2
 0010                   .dbline 14
 0010           ;       TWAR = 0x00;            //set slave address
 0010 2092BA00          sts 186,R2
 0014                   .dbline 15
 0014           ;       TWCR = 0x85;            //enable twi
 0014 85E8              ldi R24,133
 0016 8093BC00          sts 188,R24
 001A                   .dbline -2
 001A           L1:
 001A                   .dbline 0 ; func end
 001A 0895              ret
 001C                   .dbend
                        .area vector(rom, abs)
                        .org 48
 0030 0EC0              rjmp _twi_isr
                        .area text(rom, con, rel)
 001C                   .dbfile C:\DOCUME~1\fengzm.POWERMAXTECH\桌面\MCU2\iic.c
 001C                   .dbfunc e twi_isr _twi_isr fV
 001C           ;     ucIIC_TWSR -> R16
                        .even
 001C           _twi_isr::
 001C 2A92              st -y,R2
 001E 3A92              st -y,R3
 0020 0A93              st -y,R16
 0022 8A93              st -y,R24
 0024 9A93              st -y,R25
 0026 EA93              st -y,R30
 0028 FA93              st -y,R31
 002A 2FB6              in R2,0x3f
 002C 2A92              st -y,R2
 002E                   .dbline -1
 002E                   .dbline 20
 002E           ; }
 002E           ; 
 002E           ; #pragma interrupt_handler twi_isr:25
 002E           ; void twi_isr(void)
 002E           ; {
 002E                   .dbline 23
 002E           ;       uchar ucIIC_TWSR;
 002E           ; 
 002E           ;       ucIIC_TWSR = TWSR & 0xF8;
 002E 0091B900          lds R16,185
 0032 087F              andi R16,248
 0034                   .dbline 24
 0034           ;       if(ucIIC_TWSR == 0x08)
 0034 0830              cpi R16,8
 0036 41F4              brne L3
 0038                   .dbline 25
 0038           ;       {
 0038                   .dbline 26
 0038           ;               TWDR = g_ucIICAdress;
 0038 20900000          lds R2,_g_ucIICAdress
 003C 2092BB00          sts 187,R2
 0040                   .dbline 27
 0040           ;               ZHONGTU_START_IIC();
 0040 85E8              ldi R24,133
 0042 8093BC00          sts 188,R24
 0046                   .dbline 28
 0046           ;       }
 0046 42C0              rjmp L4
 0048           L3:
 0048                   .dbline 29
 0048           ;       else if((ucIIC_TWSR == 0x18) || (ucIIC_TWSR == 0x20))
 0048 0831              cpi R16,24
 004A 11F0              breq L7
 004C 0032              cpi R16,32
 004E 81F4              brne L5
 0050           L7:
 0050                   .dbline 30
 0050           ;       {
 0050                   .dbline 31
 0050           ;               TWDR = *g_ucIICDataBuf;
 0050 E0910000          lds R30,_g_ucIICDataBuf
 0054 F0910100          lds R31,_g_ucIICDataBuf+1
 0058 2080              ldd R2,z+0
 005A 2092BB00          sts 187,R2
 005E                   .dbline 32
 005E           ;               g_ucIICDataNum--;
 005E 80910000          lds R24,_g_ucIICDataNum
 0062 8150              subi R24,1
 0064 80930000          sts _g_ucIICDataNum,R24
 0068                   .dbline 33
 0068           ;               ZHONGTU_START_IIC();
 0068 85E8              ldi R24,133
 006A 8093BC00          sts 188,R24
 006E                   .dbline 34
 006E           ;       }
 006E 2EC0              rjmp L6
 0070           L5:
 0070                   .dbline 35
 0070           ;       else if((ucIIC_TWSR == 0x28) || (ucIIC_TWSR == 0x30))
 0070 0832              cpi R16,40
 0072 11F0              breq L10
 0074 0033              cpi R16,48
 0076 09F5              brne L8
 0078           L10:
 0078                   .dbline 36
 0078           ;       {
 0078                   .dbline 37
 0078           ;               if(g_ucIICDataNum > 0)
 0078 2224              clr R2
 007A 30900000          lds R3,_g_ucIICDataNum
 007E 2314              cp R2,R3
 0080 A8F4              brsh L11
 0082                   .dbline 38
 0082           ;               {
 0082                   .dbline 39
 0082           ;                       TWDR = *(++g_ucIICDataBuf);
 0082 80910000          lds R24,_g_ucIICDataBuf
 0086 90910100          lds R25,_g_ucIICDataBuf+1
 008A 0196              adiw R24,1
 008C 90930100          sts _g_ucIICDataBuf+1,R25
 0090 80930000          sts _g_ucIICDataBuf,R24
 0094 FC01              movw R30,R24
 0096 2080              ldd R2,z+0
 0098 2092BB00          sts 187,R2
 009C                   .dbline 40
 009C           ;                       g_ucIICDataNum--;
 009C 832D              mov R24,R3
 009E 8150              subi R24,1
 00A0 80930000          sts _g_ucIICDataNum,R24
 00A4                   .dbline 41
 00A4           ;                       ZHONGTU_START_IIC();
 00A4 85E8              ldi R24,133
 00A6 8093BC00          sts 188,R24
 00AA                   .dbline 42
 00AA           ;               }
 00AA 10C0              rjmp L9
 00AC           L11:
 00AC                   .dbline 44
 00AC           ;               else
 00AC           ;               {
 00AC                   .dbline 45
 00AC           ;                       g_ucIICEnd = 1;
 00AC 81E0              ldi R24,1
 00AE 80930000          sts _g_ucIICEnd,R24
 00B2                   .dbline 46
 00B2           ;                       STOP_IIC();
 00B2 85E9              ldi R24,149
 00B4 8093BC00          sts 188,R24
 00B8                   .dbline 47
 00B8           ;               }
 00B8                   .dbline 48
 00B8           ;       }
 00B8 09C0              rjmp L9
 00BA           L8:
 00BA                   .dbline 50
 00BA           ;       else
 00BA           ;       {
 00BA                   .dbline 51
 00BA           ;               STOP_IIC();
 00BA 85E9              ldi R24,149
 00BC 8093BC00          sts 188,R24
 00C0                   .dbline 52
 00C0           ;         g_ucIICState = IIC_BUSY;
 00C0 80E1              ldi R24,16
 00C2 80930000          sts _g_ucIICState,R24
 00C6                   .dbline 53
 00C6           ;               g_ucIICEnd = 1;
 00C6 81E0              ldi R24,1
 00C8 80930000          sts _g_ucIICEnd,R24
 00CC                   .dbline 54
 00CC           ;       }
 00CC           L9:
 00CC           L6:
 00CC           L4:
 00CC                   .dbline -2
 00CC           L2:
 00CC 2990              ld R2,y+
 00CE 2FBE              out 0x3f,R2
 00D0 F991              ld R31,y+
 00D2 E991              ld R30,y+
 00D4 9991              ld R25,y+
 00D6 8991              ld R24,y+
 00D8 0991              ld R16,y+
 00DA 3990              ld R3,y+
 00DC 2990              ld R2,y+
 00DE                   .dbline 0 ; func end
 00DE 1895              reti
 00E0                   .dbsym r ucIIC_TWSR 16 c
 00E0                   .dbend
 00E0                   .dbfunc e IICSendStr _IICSendStr fi
 00E0           ;   ucIICDataNum -> y+0
 00E0           ;              s -> R18,R19
 00E0           ;    ucIICAdress -> R16
                        .even
 00E0           _IICSendStr::
 00E0                   .dbline -1
 00E0                   .dbline 59
 00E0           ; }
 00E0           ; 
 00E0           ; //ucIICAdress为子地址;*s为要传送的数据组,ucIICDataNum为要传送数据的个数
 00E0           ; uint IICSendStr(uchar ucIICAdress, uchar *s, uchar ucIICDataNum)
 00E0           ; {
 00E0                   .dbline 60
 00E0           ;       g_ucIICAdress = ucIICAdress;
 00E0 00930000          sts _g_ucIICAdress,R16
 00E4                   .dbline 61
 00E4           ;       g_ucIICDataBuf = s;
 00E4 30930100          sts _g_ucIICDataBuf+1,R19
 00E8 20930000          sts _g_ucIICDataBuf,R18
 00EC                   .dbline 62
 00EC           ;       g_ucIICDataNum = ucIICDataNum;
 00EC 0880              ldd R0,y+0
 00EE 00920000          sts _g_ucIICDataNum,R0
 00F2                   .dbline 63
 00F2           ;       g_ucIICEnd = 0;
 00F2 2224              clr R2
 00F4 20920000          sts _g_ucIICEnd,R2
 00F8                   .dbline 64
 00F8           ;       START_IIC();
 00F8 85EA              ldi R24,165
 00FA 8093BC00          sts 188,R24
 00FE           L14:
 00FE                   .dbline 66
 00FE                   .dbline 66
 00FE           L15:
 00FE                   .dbline 65
 00FE           ;       while(g_ucIICEnd == 0)
 00FE 20900000          lds R2,_g_ucIICEnd
 0102 2220              tst R2
 0104 E1F3              breq L14
 0106                   .dbline 68
 0106           ;       {}
 0106           ; 
 0106           ;       if(g_ucIICEnd == 1)
 0106 822D              mov R24,R2
 0108 8130              cpi R24,1
 010A 19F4              brne L17
 010C                   .dbline 69
 010C           ;               return(1);
 010C 01E0              ldi R16,1
 010E 10E0              ldi R17,0
 0110 02C0              rjmp L13
 0112           L17:
 0112                   .dbline 71
 0112           ;       else
 0112           ;               return(0);
 0112 0027              clr R16
 0114 1127              clr R17
 0116                   .dbline -2
 0116           L13:
 0116                   .dbline 0 ; func end
 0116 0895              ret
 0118                   .dbsym l ucIICDataNum 0 c
 0118                   .dbsym r s 18 pc
 0118                   .dbsym r ucIICAdress 16 c
 0118                   .dbend

⌨️ 快捷键说明

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