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

📄 i2c抢答器_从机程序.lst

📁 《深入浅出AVR单片机——从ATmega48/88/168开始》的实例程序源代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
    00D7 1FF9      ADC	R31,R25
    00D8 8020      LDD	R2,Z+0
    00D9 922000BB  STS	0xBB,R2
(0208)                 TWISendCounter++;
    00DB 91800101  LDS	R24,TWISendCounter
    00DD 5F8F      SUBI	R24,0xFF
    00DE 93800101  STS	TWISendCounter,R24
(0209)             }
    00E0 C023      RJMP	0x0104
(0210)             else
(0211)             {
(0212)                 TWCR |= BIT(TWSTO)&(~BIT(TWINT));   //时间发送完成,停止总线
    00E1 918000BC  LDS	R24,0xBC
    00E3 6180      ORI	R24,0x10
    00E4 938000BC  STS	0xBC,R24
(0213)                 TWIProcess = TWIProcessOver;
    00E6 E081      LDI	R24,1
    00E7 93800100  STS	TWIProcess,R24
(0214)             }
(0215)             break;
    00E9 C01A      RJMP	0x0104
(0216)         }
(0217) 
(0218)         case GCAddRACK :            //收到广播地址,ACK已发
(0219)         {
(0220)             TWCR |= BIT(TWSTO)&(~BIT(TWINT));  //空闲总线
    00EA 918000BC  LDS	R24,0xBC
    00EC 6180      ORI	R24,0x10
    00ED 938000BC  STS	0xBC,R24
(0221)             TIMERSTART;                        //启动计时
    00EF E084      LDI	R24,4
    00F0 93800081  STS	0x81,R24
(0222)             break;
    00F2 C011      RJMP	0x0104
(0223)         }
(0224)         
(0225)         case ArbiLost :             //仲裁失败
(0226)         {
(0227)             TWCR |= BIT(TWSTO)&(~BIT(TWINT));   //恢复从机状态
    00F3 918000BC  LDS	R24,0xBC
    00F5 6180      ORI	R24,0x10
    00F6 938000BC  STS	0xBC,R24
(0228)             TWIProcess = TWIPrecessHan;
    00F8 E381      LDI	R24,0x31
    00F9 93800100  STS	TWIProcess,R24
(0229)             break;
    00FB C008      RJMP	0x0104
(0230)         }
(0231) 
(0232)         default :
(0233)         {
(0234)             TWCR |= BIT(TWSTO)&(~BIT(TWINT));   //出现错误状态,总线恢复空闲状态
    00FC 918000BC  LDS	R24,0xBC
    00FE 6180      ORI	R24,0x10
    00FF 938000BC  STS	0xBC,R24
(0235)             TWIProcess = TWIProcessERR;         //当前TWI操作任务遇不明原因终止
    0101 E281      LDI	R24,0x21
    0102 93800100  STS	TWIProcess,R24
(0236)         }                          //在操作的最后,我们并没有再次设置TWEN位,用意是提醒大家编程细心,"意外"清除TWEN位本来就是不对的
(0237) 
(0238)     }
(0239) 
(0240)     TWCR |= BIT(TWINT);
    0104 918000BC  LDS	R24,0xBC
    0106 6880      ORI	R24,0x80
    0107 938000BC  STS	0xBC,R24
    0109 9508      RET
FILE: D:\实例17_I2C抢答器_从机程序\System.c
(0001) /*********************************************************/
(0002) /*                                                       */
(0003) /*             实例17 I2C抢答器 从机程序                 */
(0004) /*                                                       */
(0005) /*                 程序设计 江海波                       */
(0006) /*                                                       */
(0007) /*        编写时间 : 2007-8      版本 : V1.0             */
(0008) /*                                                       */
(0009) /*     提示 : 代码受版权保护,示例程序用于工程应谨慎      */
(0010) /*                                                       */
(0011) /*           E-mail : soundman@sohu.com                  */
(0012) /*-------------------------------------------------------*/
(0013) /* 硬件环境:                                             */
(0014) /*                                                       */
(0015) /*     实验电路板,ATmega48单片机,CPU时钟1MHz             */
(0016) /* ------------------------------------------------------*/
(0017) /* 软件环境:                                             */
(0018) /*                                                       */
(0019) /*     ICCAVR 6.31A                                      */
(0020) /* ------------------------------------------------------*/
(0021) /* 最后修改时间:                                         */
(0022) /*                                                       */
(0023) /*-------------------------------------------------------*/
(0024) /* 历史版本纪录:                                         */
(0025) /*                                                       */
(0026) /*********************************************************/
(0027) 
(0028) /********************
(0029) * 头 文 件 配 置 区 *
(0030) ********************/
(0031) # include "PF_Config.h"
(0032) 
(0033) /********************
(0034) *   系 统 宏 定 义  *
(0035) ********************/
(0036) 
(0037) /*------------------*
(0038) *   常 数 宏 定 义  *
(0039) *------------------*/
(0040) 
(0041) /*------------------*
(0042) *   动 作 宏 定 义  *
(0043) *------------------*/
(0044) 
(0045) /********************
(0046) *  模块结构体定义区 *
(0047) ********************/
(0048) 
(0049) /********************
(0050) *   模块函数声明区  *
(0051) ********************/
(0052) 
(0053) /********************
(0054) *   模块变量声明区  *
(0055) ********************/
(0056) 
(0057) /***********************************************************
(0058) *   函数说明:主函数                                       *
(0059) *   输入:    无                                           *
(0060) *   输出:    无                                           *
(0061) *   调用函数:System_INIT()                                *
(0062) ***********************************************************/
(0063) void main(void)
(0064) {
(0065)     System_INIT();                                          //代码初始化
_main:
    010A DF5D      RCALL	_System_INIT
(0066)     
(0067)     Time[0] = 0xB0;
    010B EB80      LDI	R24,0xB0
    010C 93800102  STS	Time,R24
    010E C02B      RJMP	0x013A
(0068) 
(0069)     while(1)
(0070)     {
(0071)         if(TCCR1B != 0)
    010F 90200081  LDS	R2,0x81
    0111 2022      TST	R2
    0112 F139      BEQ	0x013A
(0072)         {
(0073)             if((PINB&0x01) == 0x00)
    0113 9918      SBIC	0x03,0
    0114 C025      RJMP	0x013A
(0074)             {
(0075)                 TIMERSTOP;
    0115 2422      CLR	R2
    0116 92200081  STS	0x81,R2
(0076)                 Time[0] = TCNT1H;
    0118 90200085  LDS	R2,0x85
    011A 92200102  STS	Time,R2
(0077)                 Time[1] = TCNT1L;
    011C 90200084  LDS	R2,0x84
    011E 92200103  STS	Time+1,R2
(0078)                 TWCR |= (1<<TWSTA);                 //启动总线
    0120 918000BC  LDS	R24,0xBC
    0122 6280      ORI	R24,0x20
    0123 938000BC  STS	0xBC,R24
(0079)                 TWIProcess = TWIInProcess;
    0125 2422      CLR	R2
    0126 92200100  STS	TWIProcess,R2
    0128 C00D      RJMP	0x0136
(0080)                 while(TWIProcess != TWIProcessOver)
(0081)                 {
(0082)                     if (TWIProcess == TWIPrecessHan)
    0129 91800100  LDS	R24,TWIProcess
    012B 3381      CPI	R24,0x31
    012C F429      BNE	0x0132
(0083)                         TWCR |= (1<<TWSTA);         //再次尝试竞争总线
    012D 918000BC  LDS	R24,0xBC
    012F 6280      ORI	R24,0x20
    0130 938000BC  STS	0xBC,R24
(0084)                     if (TWIProcess == TWIProcessERR)
FILE: <library>
    0132 91800100  LDS	R24,TWIProcess
    0134 3281      CPI	R24,0x21
    0135 F401      BNE	0x0136
    0136 91800100  LDS	R24,TWIProcess
    0138 3081      CPI	R24,1
    0139 F779      BNE	0x0129
    013A CFD4      RJMP	0x010F
    013B 9508      RET
push_gset5:
    013C 92FA      ST	R15,-Y
    013D 92EA      ST	R14,-Y
push_gset4:
    013E 92DA      ST	R13,-Y
    013F 92CA      ST	R12,-Y
push_gset3:
    0140 92BA      ST	R11,-Y
    0141 92AA      ST	R10,-Y
push_gset2:
    0142 937A      ST	R23,-Y
    0143 936A      ST	R22,-Y
push_gset1:
    0144 935A      ST	R21,-Y
    0145 934A      ST	R20,-Y
    0146 9508      RET
pop_gset1:
    0147 E0E1      LDI	R30,1
pop:
    0148 9149      LD	R20,Y+
    0149 9159      LD	R21,Y+
    014A FDE0      SBRC	R30,0
    014B 9508      RET
    014C 9169      LD	R22,Y+
    014D 9179      LD	R23,Y+
    014E FDE1      SBRC	R30,1
    014F 9508      RET
    0150 90A9      LD	R10,Y+
    0151 90B9      LD	R11,Y+
    0152 FDE2      SBRC	R30,2
    0153 9508      RET
    0154 90C9      LD	R12,Y+
    0155 90D9      LD	R13,Y+
    0156 FDE3      SBRC	R30,3
    0157 9508      RET
    0158 90E9      LD	R14,Y+
    0159 90F9      LD	R15,Y+
    015A 9508      RET
push_lset:
    015B 93FA      ST	R31,-Y
    015C 93EA      ST	R30,-Y
    015D 93BA      ST	R27,-Y
    015E 93AA      ST	R26,-Y
    015F 939A      ST	R25,-Y
    0160 938A      ST	R24,-Y
    0161 933A      ST	R19,-Y
    0162 932A      ST	R18,-Y
    0163 931A      ST	R17,-Y
    0164 930A      ST	R16,-Y
    0165 929A      ST	R9,-Y
    0166 928A      ST	R8,-Y
    0167 927A      ST	R7,-Y
    0168 926A      ST	R6,-Y
    0169 925A      ST	R5,-Y
    016A 924A      ST	R4,-Y
    016B 923A      ST	R3,-Y
    016C 922A      ST	R2,-Y
    016D 921A      ST	R1,-Y
    016E 920A      ST	R0,-Y
    016F B60F      IN	R0,0x3F
    0170 920A      ST	R0,-Y
    0171 9508      RET
pop_lset:
    0172 9009      LD	R0,Y+
    0173 BE0F      OUT	0x3F,R0
    0174 9009      LD	R0,Y+
    0175 9019      LD	R1,Y+
    0176 9029      LD	R2,Y+
    0177 9039      LD	R3,Y+
    0178 9049      LD	R4,Y+
    0179 9059      LD	R5,Y+
    017A 9069      LD	R6,Y+
    017B 9079      LD	R7,Y+
    017C 9089      LD	R8,Y+
    017D 9099      LD	R9,Y+
    017E 9109      LD	R16,Y+
    017F 9119      LD	R17,Y+
    0180 9129      LD	R18,Y+
    0181 9139      LD	R19,Y+
    0182 9189      LD	R24,Y+
    0183 9199      LD	R25,Y+
    0184 91A9      LD	R26,Y+
    0185 91B9      LD	R27,Y+
    0186 91E9      LD	R30,Y+
    0187 91F9      LD	R31,Y+
    0188 9508      RET

⌨️ 快捷键说明

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