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

📄 iic.lis

📁 实现机于通讯芯片的电话接听 拨出 以及来电振领提示
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module iic.c
                        .area vector(rom, abs)
                        .org 34
 0022 00C0              rjmp _TWI_ISR
                        .area text(rom, con, rel)
 0000                   .dbfile C:\DOCUME~1\Rooger\桌面\GSM_PHONE\iic.c
 0000                   .dbfunc e TWI_ISR _TWI_ISR fV
                        .even
 0000           _TWI_ISR::
 0000 2A92              st -y,R2
 0002 3A92              st -y,R3
 0004 0A93              st -y,R16
 0006 1A93              st -y,R17
 0008 8A93              st -y,R24
 000A 9A93              st -y,R25
 000C EA93              st -y,R30
 000E FA93              st -y,R31
 0010 2FB6              in R2,0x3f
 0012 2A92              st -y,R2
 0014                   .dbline -1
 0014                   .dbline 22
 0014           ; /************************************iic.c**************************
 0014           ; *iic.c负责同上层软件之间的通讯
 0014           ; *iic在NPI中处于两种工作方式 从机接收模式以及从机发送模式
 0014           ; *从机接收模式 在通讯过程中 应答主机请求 并将数据保存到相应数组以便主程序判断
 0014           ; *从机发送模式 通过pwr拉高请求主机接收数据 然后根据主机应答发送数据
 0014           ; ********************************************************************/
 0014           ; #include <iom8v.h>
 0014           ; #include <macros.h>
 0014           ; #include "iic.h"
 0014           ; #include "define.h"
 0014           ; 
 0014           ; extern uchar buf[15]; //pc同i2c交互数据存放处
 0014           ; extern uchar cmd;//i2c数据缓存
 0014           ; extern uchar cmd_num;//i2c数据计数
 0014           ; extern uchar flag; //
 0014           ; extern uchar *data;
 0014           ; extern uchar j;
 0014           ; extern uchar req_flag,start_flag,vision_flag,cmd_flag;
 0014           ; //*****************************************************************************/
 0014           ; #pragma interrupt_handler TWI_ISR:18
 0014           ; void TWI_ISR(void)
 0014           ; { 
 0014                   .dbline 24
 0014           ;         //TWI被控接收器模式中断处理
 0014           ;         switch (TestAck()) 
 0014 01B1              in R16,0x1
 0016 1127              clr R17
 0018 087F              andi R16,248
 001A 1070              andi R17,0
 001C 0039              cpi R16,144
 001E E0E0              ldi R30,0
 0020 1E07              cpc R17,R30
 0022 09F4              brne X1
 0024 02C1              rjmp L27
 0026           X1:
 0026 80E9              ldi R24,144
 0028 90E0              ldi R25,0
 002A 8017              cp R24,R16
 002C 9107              cpc R25,R17
 002E 0CF4              brge X2
 0030 30C0              rjmp L52
 0032           X2:
 0032           L51:
 0032 0037              cpi R16,112
 0034 E0E0              ldi R30,0
 0036 1E07              cpc R17,R30
 0038 09F4              brne X3
 003A 67C0              rjmp L7
 003C           X3:
 003C 80E7              ldi R24,112
 003E 90E0              ldi R25,0
 0040 8017              cp R24,R16
 0042 9107              cpc R25,R17
 0044 84F0              brlt L54
 0046           L53:
 0046 0036              cpi R16,96
 0048 E0E0              ldi R30,0
 004A 1E07              cpc R17,R30
 004C 09F4              brne X4
 004E 57C0              rjmp L5
 0050           X4:
 0050 0036              cpi R16,96
 0052 E0E0              ldi R30,0
 0054 1E07              cpc R17,R30
 0056 0CF4              brge X5
 0058 BDC1              rjmp L2
 005A           X5:
 005A           L55:
 005A 0836              cpi R16,104
 005C E0E0              ldi R30,0
 005E 1E07              cpc R17,R30
 0060 09F4              brne X6
 0062 50C0              rjmp L6
 0064           X6:
 0064 B7C1              rjmp L2
 0066           L54:
 0066 0038              cpi R16,128
 0068 E0E0              ldi R30,0
 006A 1E07              cpc R17,R30
 006C 09F4              brne X7
 006E 53C0              rjmp L9
 0070           X7:
 0070 80E8              ldi R24,128
 0072 90E0              ldi R25,0
 0074 8017              cp R24,R16
 0076 9107              cpc R25,R17
 0078 34F0              brlt L57
 007A           L56:
 007A 0837              cpi R16,120
 007C E0E0              ldi R30,0
 007E 1E07              cpc R17,R30
 0080 09F4              brne X8
 0082 46C0              rjmp L8
 0084           X8:
 0084 A7C1              rjmp L2
 0086           L57:
 0086 0838              cpi R16,136
 0088 E0E0              ldi R30,0
 008A 1E07              cpc R17,R30
 008C 09F4              brne X9
 008E 88C0              rjmp L18
 0090           X9:
 0090 A1C1              rjmp L2
 0092           L52:
 0092 003B              cpi R16,176
 0094 E0E0              ldi R30,0
 0096 1E07              cpc R17,R30
 0098 09F4              brne X10
 009A 64C1              rjmp L46
 009C           X10:
 009C 80EB              ldi R24,176
 009E 90E0              ldi R25,0
 00A0 8017              cp R24,R16
 00A2 9107              cpc R25,R17
 00A4 B4F0              brlt L59
 00A6           L58:
 00A6 003A              cpi R16,160
 00A8 E0E0              ldi R30,0
 00AA 1E07              cpc R17,R30
 00AC 09F4              brne X11
 00AE 8CC1              rjmp L50
 00B0           X11:
 00B0 80EA              ldi R24,160
 00B2 90E0              ldi R25,0
 00B4 8017              cp R24,R16
 00B6 9107              cpc R25,R17
 00B8 34F0              brlt L61
 00BA           L60:
 00BA 0839              cpi R16,152
 00BC E0E0              ldi R30,0
 00BE 1E07              cpc R17,R30
 00C0 09F4              brne X12
 00C2 F8C0              rjmp L36
 00C4           X12:
 00C4 87C1              rjmp L2
 00C6           L61:
 00C6 083A              cpi R16,168
 00C8 E0E0              ldi R30,0
 00CA 1E07              cpc R17,R30
 00CC 09F4              brne X13
 00CE 37C1              rjmp L45
 00D0           X13:
 00D0 81C1              rjmp L2
 00D2           L59:
 00D2 003C              cpi R16,192
 00D4 E0E0              ldi R30,0
 00D6 1E07              cpc R17,R30
 00D8 09F4              brne X14
 00DA 6AC1              rjmp L48
 00DC           X14:
 00DC 80EC              ldi R24,192
 00DE 90E0              ldi R25,0
 00E0 8017              cp R24,R16
 00E2 9107              cpc R25,R17
 00E4 34F0              brlt L63
 00E6           L62:
 00E6 083B              cpi R16,184
 00E8 E0E0              ldi R30,0
 00EA 1E07              cpc R17,R30
 00EC 09F4              brne X15
 00EE 4DC1              rjmp L47
 00F0           X15:
 00F0 71C1              rjmp L2
 00F2           L63:
 00F2 083C              cpi R16,200
 00F4 E0E0              ldi R30,0
 00F6 1E07              cpc R17,R30
 00F8 09F4              brne X16
 00FA 60C1              rjmp L49
 00FC           X16:
 00FC 6BC1              rjmp L2
 00FE           X0:
 00FE                   .dbline 25
 00FE           ;         { 
 00FE           L5:
 00FE                   .dbline 28
 00FE           ;                       //从机接收
 00FE           ;                 case SR_SLA_ACK:   //SR_SLA_ACK=0x60; SLA+W已经被接收ACK 已返回
 00FE           ;                 {
 00FE                   .dbline 29
 00FE           ;                         Twi_ACK();
 00FE 85EC              ldi R24,197
 0100 86BF              out 0x36,R24
 0102                   .dbline 30
 0102           ;                                               break;
 0102 6AC1              rjmp L3
 0104           L6:
 0104                   .dbline 33
 0104           ;                 } 
 0104           ;                 case MT_SR_SLA_ACK://MT_SR_SLA_ACK=0x68;SLA+R/W 作为主机的仲裁失败;自己的SLA+W 已经被接收,ACK 已返回
 0104           ;                 { 
 0104                   .dbline 34
 0104           ;                         Twi_ACK();
 0104 85EC              ldi R24,197
 0106 86BF              out 0x36,R24
 0108                   .dbline 35
 0108           ;                         break; 
 0108 67C1              rjmp L3
 010A           L7:
 010A                   .dbline 38
 010A           ;                 }    
 010A           ;                 case SR_ALL_ACK://SR_ALL_ACK=0x70;接收到广播地址,ACK 已返回
 010A           ;                 {
 010A                   .dbline 39
 010A           ;                         Twi_ACK(); 
 010A 85EC              ldi R24,197
 010C 86BF              out 0x36,R24
 010E                   .dbline 40
 010E           ;                         break;
 010E 64C1              rjmp L3
 0110           L8:
 0110                   .dbline 43
 0110           ;                 } 
 0110           ;                 case MT_SR_ALL_ACK://MT_SR_ALL_ACK=0x78;SLA+R/W 作为主机的仲裁失败;接收到广播地址,ACK 已返回
 0110           ;                 {    
 0110                   .dbline 44
 0110           ;                                       Twi_ACK(); 
 0110 85EC              ldi R24,197
 0112 86BF              out 0x36,R24
 0114                   .dbline 45
 0114           ;                         break;   
 0114 61C1              rjmp L3
 0116           L9:
 0116                   .dbline 48
 0116           ;                 } 
 0116           ;                 case SR_DATA_ACK://SR_DATA_ACK=0X80;以前以自己的 SLA+W 被寻址;数据已经被接收,ACK 已返回
 0116           ;                 {
 0116                   .dbline 49
 0116           ;                                       cmd=TWDR;
 0116 23B0              in R2,0x3
 0118 20920000          sts _cmd,R2
 011C                   .dbline 50
 011C           ;                                               buf[cmd_num]=cmd;
 011C 80E0              ldi R24,<_buf
 011E 90E0              ldi R25,>_buf
 0120 E0910000          lds R30,_cmd_num
 0124 FF27              clr R31
 0126 E80F              add R30,R24
 0128 F91F              adc R31,R25
 012A 2082              std z+0,R2
 012C                   .dbline 51
 012C           ;                                               cmd_num++;
 012C 80910000          lds R24,_cmd_num
 0130 8F5F              subi R24,255    ; addi 1
 0132 80930000          sts _cmd_num,R24
 0136                   .dbline 52
 0136           ;                                               if(cmd==0x00 && cmd_num==2) //接收到主机请求数据结束位 置标记
 0136 20900000          lds R2,_cmd
 013A 2220              tst R2
 013C 89F4              brne L10
 013E 8230              cpi R24,2
 0140 79F4              brne L10
 0142                   .dbline 53
 0142           ;                                               {  
 0142                   .dbline 54
 0142           ;                                                 PWRON;
 0142 88B3              in R24,0x18
 0144 8F7D              andi R24,223
 0146 88BB              out 0x18,R24
 0148                   .dbline 55
 0148           ;                                                 req_flag=1;
 0148 81E0              ldi R24,1
 014A 80930000          sts _req_flag,R24
 014E                   .dbline 56
 014E           ;                                                 start_flag=0;
 014E 2224              clr R2
 0150 20920000          sts _start_flag,R2

⌨️ 快捷键说明

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