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

📄 ex_support.lis

📁 《深入浅出AVR单片机——从ATmega48/88/168开始》的实例程序源代码
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 0040           ; 
 0040           ; /***********************************************************
 0040           ; *   函数说明:定时器0中断处理程序代码插入函数              *
 0040           ; *   输入:    无                                           *
 0040           ; *   输出:    无                                           *
 0040           ; *   调用函数:无                                           *
 0040           ; ***********************************************************/
 0040           ; void Insert_Timer1_OVF_ISR_Code(void)
 0040           ; {
 0040                   .dbline 167
 0040           ;     TCNT1H = 0xB3;
 0040 83EB              ldi R24,179
 0042 80938500          sts 133,R24
 0046                   .dbline 168
 0046           ;     TCNT1L = 0xB5;
 0046 85EB              ldi R24,181
 0048 80938400          sts 132,R24
 004C                   .dbline 169
 004C           ;     Beep(10);
 004C 0AE0              ldi R16,10
 004E 10E0              ldi R17,0
 0050 EDDF              rcall _Beep
 0052                   .dbline -2
 0052           L12:
 0052                   .dbline 0 ; func end
 0052 0895              ret
 0054                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile D:\实例17_I2C抢答器_从机程序\EX_Support.c
 0000           L14:
 0000                   .blkb 1
                        .area text(rom, con, rel)
 0054                   .dbfile D:\实例17_I2C抢答器_从机程序\EX_Support.c
 0054                   .dbfunc e Insert_TWI_ISR_Code _Insert_TWI_ISR_Code fV
 0054                   .dbsym s TWISendCounter L14 c
 0054           ;      TWIStatus -> R16
                        .even
 0054           _Insert_TWI_ISR_Code::
 0054                   .dbline -1
 0054                   .dbline 179
 0054           ; }
 0054           ; 
 0054           ; /***********************************************************
 0054           ; *   函数说明:TWI事件中断处理程序代码插入函数              *
 0054           ; *   输入:    无                                           *
 0054           ; *   输出:    无                                           *
 0054           ; *   调用函数:无                                           *
 0054           ; ***********************************************************/
 0054           ; void Insert_TWI_ISR_Code(void)
 0054           ; {
 0054                   .dbline 183
 0054           ;     unsigned char TWIStatus;
 0054           ;     static unsigned char TWISendCounter;
 0054           ; 
 0054           ;     TWIStatus = TWSR&0xF8;
 0054 0091B900          lds R16,185
 0058 087F              andi R16,248
 005A                   .dbline 184
 005A           ;     UDR0 = TWIStatus;
 005A 0093C600          sts 198,R16
 005E                   .dbline 186
 005E           ; 
 005E           ;     TWCR &= ~(BIT(TWINT)|BIT(TWSTA)|BIT(TWSTO));
 005E 8091BC00          lds R24,188
 0062 8F74              andi R24,79
 0064 8093BC00          sts 188,R24
 0068                   .dbline 188
 0068           ; 
 0068           ;     switch (TWIStatus)
 0068 1127              clr R17
 006A 0832              cpi R16,40
 006C E0E0              ldi R30,0
 006E 1E07              cpc R17,R30
 0070 69F1              breq L20
 0072 88E2              ldi R24,40
 0074 90E0              ldi R25,0
 0076 8017              cp R24,R16
 0078 9107              cpc R25,R17
 007A 74F0              brlt L26
 007C           L25:
 007C 0830              cpi R16,8
 007E E0E0              ldi R30,0
 0080 1E07              cpc R17,R30
 0082 C9F0              breq L18
 0084 0830              cpi R16,8
 0086 E0E0              ldi R30,0
 0088 1E07              cpc R17,R30
 008A 0CF4              brge X2
 008C 4EC0              rjmp L15
 008E           X2:
 008E           L27:
 008E 0831              cpi R16,24
 0090 E0E0              ldi R30,0
 0092 1E07              cpc R17,R30
 0094 B9F0              breq L19
 0096 49C0              rjmp L15
 0098           L26:
 0098 0833              cpi R16,56
 009A E0E0              ldi R30,0
 009C 1E07              cpc R17,R30
 009E 09F4              brne X3
 00A0 3BC0              rjmp L24
 00A2           X3:
 00A2 0833              cpi R16,56
 00A4 E0E0              ldi R30,0
 00A6 1E07              cpc R17,R30
 00A8 0CF4              brge X4
 00AA 3FC0              rjmp L15
 00AC           X4:
 00AC           L28:
 00AC 0037              cpi R16,112
 00AE E0E0              ldi R30,0
 00B0 1E07              cpc R17,R30
 00B2 49F1              breq L23
 00B4 3AC0              rjmp L15
 00B6           X1:
 00B6                   .dbline 189
 00B6           ;     {
 00B6           L18:
 00B6                   .dbline 191
 00B6           ;         case SSend :                //启动位已发送
 00B6           ;         {
 00B6                   .dbline 192
 00B6           ;             TWDR = 0xF0;            //向主机传送时间
 00B6 80EF              ldi R24,240
 00B8 8093BB00          sts 187,R24
 00BC                   .dbline 193
 00BC           ;             TWISendCounter = 0;
 00BC 2224              clr R2
 00BE 20920000          sts L14,R2
 00C2                   .dbline 194
 00C2           ;             break;
 00C2 3BC0              rjmp L16
 00C4           L19:
 00C4                   .dbline 198
 00C4           ;         }
 00C4           ; 
 00C4           ;         case SLAWSendACK :          //SLA+W已发送,收到ACK
 00C4           ;         {
 00C4                   .dbline 199
 00C4           ;             TWDR = 0xA0;            //发送从机编号
 00C4 80EA              ldi R24,160
 00C6 8093BB00          sts 187,R24
 00CA                   .dbline 200
 00CA           ;             break;
 00CA 37C0              rjmp L16
 00CC           L20:
 00CC                   .dbline 204
 00CC           ;         }
 00CC           ;         
 00CC           ;         case TDataACK :
 00CC           ;         {
 00CC                   .dbline 205
 00CC           ;             if (TWISendCounter < 2)
 00CC 80910000          lds R24,L14
 00D0 8230              cpi R24,2
 00D2 80F4              brsh L21
 00D4                   .dbline 206
 00D4           ;             {
 00D4                   .dbline 207
 00D4           ;                 TWDR = Time[TWISendCounter];
 00D4 80E0              ldi R24,<_Time
 00D6 90E0              ldi R25,>_Time
 00D8 E0910000          lds R30,L14
 00DC FF27              clr R31
 00DE E80F              add R30,R24
 00E0 F91F              adc R31,R25
 00E2 2080              ldd R2,z+0
 00E4 2092BB00          sts 187,R2
 00E8                   .dbline 208
 00E8           ;                 TWISendCounter++;
 00E8 80910000          lds R24,L14
 00EC 8F5F              subi R24,255    ; addi 1
 00EE 80930000          sts L14,R24
 00F2                   .dbline 209
 00F2           ;             }
 00F2 23C0              rjmp L16
 00F4           L21:
 00F4                   .dbline 211
 00F4           ;             else
 00F4           ;             {
 00F4                   .dbline 212
 00F4           ;                 TWCR |= BIT(TWSTO)&(~BIT(TWINT));   //时间发送完成,停止总线
 00F4 8091BC00          lds R24,188
 00F8 8061              ori R24,16
 00FA 8093BC00          sts 188,R24
 00FE                   .dbline 213
 00FE           ;                 TWIProcess = TWIProcessOver;
 00FE 81E0              ldi R24,1
 0100 80930000          sts _TWIProcess,R24
 0104                   .dbline 214
 0104           ;             }
 0104                   .dbline 215
 0104           ;             break;
 0104 1AC0              rjmp L16
 0106           L23:
 0106                   .dbline 219
 0106           ;         }
 0106           ; 
 0106           ;         case GCAddRACK :            //收到广播地址,ACK已发
 0106           ;         {
 0106                   .dbline 220
 0106           ;             TWCR |= BIT(TWSTO)&(~BIT(TWINT));  //空闲总线
 0106 8091BC00          lds R24,188
 010A 8061              ori R24,16
 010C 8093BC00          sts 188,R24
 0110                   .dbline 221
 0110           ;             TIMERSTART;                        //启动计时
 0110 84E0              ldi R24,4
 0112 80938100          sts 129,R24
 0116                   .dbline 222
 0116           ;             break;
 0116 11C0              rjmp L16
 0118           L24:
 0118                   .dbline 226
 0118           ;         }
 0118           ;         
 0118           ;         case ArbiLost :             //仲裁失败
 0118           ;         {
 0118                   .dbline 227
 0118           ;             TWCR |= BIT(TWSTO)&(~BIT(TWINT));   //恢复从机状态
 0118 8091BC00          lds R24,188
 011C 8061              ori R24,16
 011E 8093BC00          sts 188,R24
 0122                   .dbline 228
 0122           ;             TWIProcess = TWIPrecessHan;
 0122 81E3              ldi R24,49
 0124 80930000          sts _TWIProcess,R24
 0128                   .dbline 229
 0128           ;             break;
 0128 08C0              rjmp L16
 012A           L15:
 012A                   .dbline 233
 012A           ;         }
 012A           ; 
 012A           ;         default :
 012A           ;         {
 012A                   .dbline 234
 012A           ;             TWCR |= BIT(TWSTO)&(~BIT(TWINT));   //出现错误状态,总线恢复空闲状态
 012A 8091BC00          lds R24,188
 012E 8061              ori R24,16
 0130 8093BC00          sts 188,R24
 0134                   .dbline 235
 0134           ;             TWIProcess = TWIProcessERR;         //当前TWI操作任务遇不明原因终止
 0134 81E2              ldi R24,33
 0136 80930000          sts _TWIProcess,R24
 013A                   .dbline 236
 013A           ;         }                          //在操作的最后,我们并没有再次设置TWEN位,用意是提醒大家编程细心,"意外"清除TWEN位本来就是不对的
 013A                   .dbline 238
 013A           ; 
 013A           ;     }
 013A           L16:
 013A                   .dbline 240
 013A           ; 
 013A           ;     TWCR |= BIT(TWINT);
 013A 8091BC00          lds R24,188
 013E 8068              ori R24,128
 0140 8093BC00          sts 188,R24
 0144                   .dbline -2
 0144           L13:
 0144                   .dbline 0 ; func end
 0144 0895              ret
 0146                   .dbsym r TWIStatus 16 c
 0146                   .dbend
                        .area bss(ram, con, rel)
 0001                   .dbfile D:\实例17_I2C抢答器_从机程序\EX_Support.c
 0001           _Time::
 0001                   .blkb 2
 0003                   .dbsym e Time _Time A[2:2]c

⌨️ 快捷键说明

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