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

📄 slave_test.lst

📁 avr 单片机twi源程序 功能:实现TWI主从机通讯.
💻 LST
📖 第 1 页 / 共 2 页
字号:
    00D9 3A40      CPI	R20,0xA0
    00DA E0E0      LDI	R30,0
    00DB 075E      CPC	R21,R30
    00DC F409      BNE	0x00DE
    00DD C041      RJMP	0x011F
    00DE EA80      LDI	R24,0xA0
    00DF E090      LDI	R25,0
    00E0 1784      CP	R24,R20
    00E1 0795      CPC	R25,R21
    00E2 F02C      BLT	0x00E8
    00E3 3948      CPI	R20,0x98
    00E4 E0E0      LDI	R30,0
    00E5 075E      CPC	R21,R30
    00E6 F199      BEQ	0x011A
    00E7 C053      RJMP	0x013B
    00E8 3A48      CPI	R20,0xA8
    00E9 E0E0      LDI	R30,0
    00EA 075E      CPC	R21,R30
    00EB F409      BNE	0x00ED
    00EC C037      RJMP	0x0124
    00ED C04D      RJMP	0x013B
    00EE 3C40      CPI	R20,0xC0
    00EF E0E0      LDI	R30,0
    00F0 075E      CPC	R21,R30
    00F1 F409      BNE	0x00F3
    00F2 C03D      RJMP	0x0130
    00F3 EC80      LDI	R24,0xC0
    00F4 E090      LDI	R25,0
    00F5 1784      CP	R24,R20
    00F6 0795      CPC	R25,R21
    00F7 F02C      BLT	0x00FD
    00F8 3B48      CPI	R20,0xB8
    00F9 E0E0      LDI	R30,0
    00FA 075E      CPC	R21,R30
    00FB F181      BEQ	0x012C
    00FC C03E      RJMP	0x013B
    00FD 3C48      CPI	R20,0xC8
    00FE E0E0      LDI	R30,0
    00FF 075E      CPC	R21,R30
    0100 F179      BEQ	0x0130
    0101 3C48      CPI	R20,0xC8
    0102 E0E0      LDI	R30,0
    0103 075E      CPC	R21,R30
    0104 F1B4      BLT	0x013B
    0105 3F48      CPI	R20,0xF8
    0106 E0E0      LDI	R30,0
    0107 075E      CPC	R21,R30
    0108 F191      BEQ	0x013B
    0109 C031      RJMP	0x013B
(0078)  {
(0079)  //从接收
(0080)  case TW_SR_SLA_ACK:
(0081)  case TW_SR_ARB_LOST_SLA_ACK:
(0082)  case TW_SR_GCALL_ACK:
(0083)  case TW_SR_ARB_LOST_GCALL_ACK:
(0084)  	  Twi_Ack();  //返回ACK
    010A B786      IN	R24,0x36
    010B 708F      ANDI	R24,0xF
    010C 6C80      ORI	R24,0xC0
    010D BF86      OUT	0x36,R24
(0085) 	  break;
    010E C02C      RJMP	0x013B
(0086)  case TW_SR_DATA_ACK:
(0087)  case TW_SR_DATA_NACK:
(0088)  	  main_tmp = TWDR;
    010F B023      IN	R2,0x03
    0110 92200060  STS	main_tmp,R2
(0089)   	  PORTA = ~ TWDR; //接收数据并显示
    0112 B023      IN	R2,0x03
    0113 9420      COM	R2
    0114 BA2B      OUT	0x1B,R2
(0090)  	  Twi_Ack();  //返回ACK
    0115 B786      IN	R24,0x36
    0116 708F      ANDI	R24,0xF
    0117 6C80      ORI	R24,0xC0
    0118 BF86      OUT	0x36,R24
(0091) 	  break;
    0119 C021      RJMP	0x013B
(0092)  case TW_SR_GCALL_DATA_ACK:
(0093)  case TW_SR_GCALL_DATA_NACK:	
(0094)  	  Twi_Ack();  //返回ACK
    011A B786      IN	R24,0x36
    011B 708F      ANDI	R24,0xF
    011C 6C80      ORI	R24,0xC0
    011D BF86      OUT	0x36,R24
(0095) 	  break;
    011E C01C      RJMP	0x013B
(0096)  case TW_SR_STOP:
(0097)  	  Twi_Ack(); 
    011F B786      IN	R24,0x36
    0120 708F      ANDI	R24,0xF
    0121 6C80      ORI	R24,0xC0
    0122 BF86      OUT	0x36,R24
(0098) 	  break;
    0123 C017      RJMP	0x013B
(0099)  //从发送*****************************
(0100)  
(0101)    case TW_ST_SLA_ACK:               // 0xA8: 自己的SLA+R 已经被接收,ACK 已返回 
(0102)    case TW_ST_ARB_LOST_SLA_ACK:// 0xB0: SLA+R/W 作为主机的仲裁失败;自己的SLA+R 已经被接收,ACK 已返回 
(0103)       // 被选中为从读出 (数据将从传回主机) 
(0104) 	  TWDR=main_tmp;  //发送全局变量中值
    0124 90200060  LDS	R2,main_tmp
    0126 B823      OUT	0x03,R2
(0105) 	  Twi_Ack(); 		
    0127 B786      IN	R24,0x36
    0128 708F      ANDI	R24,0xF
    0129 6C80      ORI	R24,0xC0
    012A BF86      OUT	0x36,R24
(0106) 	  break;    
    012B C00F      RJMP	0x013B
(0107)   case TW_ST_DATA_ACK:            // 0xB8: TWDR 里数据已经发送,接收到ACK 
(0108)       //发送数据位 
(0109) 	 TWDR=main_tmp;
    012C 90200060  LDS	R2,main_tmp
    012E B823      OUT	0x03,R2
(0110)      break;    
    012F C00B      RJMP	0x013B
(0111)    case TW_ST_DATA_NACK:            // 0xC0: TWDR 里数据已经发送接收到NOT ACK 
(0112)    case TW_ST_LAST_DATA:            // 0xC8: TWDR 的一字节数据已经发送(TWAE = “0”);接收到ACK 
(0113)       // 全部完成 
(0114)       // 从方式开放 
(0115)       Twi_NoAcK(); 
    0130 B786      IN	R24,0x36
    0131 708F      ANDI	R24,0xF
    0132 6880      ORI	R24,0x80
    0133 BF86      OUT	0x36,R24
(0116) 	  twi_slave_init(0x50);        //重新回到初始化状态,等待接收模式的到来
    0134 E500      LDI	R16,0x50
    0135 DF1F      RCALL	_twi_slave_init
(0117)       break; 
    0136 C004      RJMP	0x013B
(0118)    case TW_NO_INFO:                 // 0xF8: 没有相关的状态信息;TWINT = “0” 
(0119)       // 无操作 
(0120) 	  break; 
(0121)    case TW_BUS_ERROR:               // 0x00: 由于非法的START 或STOP 引起的总线错误 
(0122)       // 内部硬件复位,释放总线 
(0123)       TWCR=TWCR&TWCR_CMD_MASK|(1<<TWINT)|(1<<TWSTO)|(1<<TWEA); 
    0137 B786      IN	R24,0x36
    0138 708F      ANDI	R24,0xF
    0139 6D80      ORI	R24,0xD0
    013A BF86      OUT	0x36,R24
(0124)      break;  
(0125)  	 default:
(0126) 	 break;
    013B 940E015A  CALL	pop_gset1
    013D 940E0185  CALL	pop_lset
    013F 9518      RETI
FILE: F:\2007电子设计\古欣\twitest\twi_slave_test\slave_test.c
(0001) #include "config.h"
(0002) 
(0003) void main(void)
(0004) {
(0005)  DDRC=0X00;
_main:
    0140 2422      CLR	R2
    0141 BA24      OUT	0x14,R2
(0006)  PORTC=0x03; //使能内部上拉电阻
    0142 E083      LDI	R24,3
    0143 BB85      OUT	0x15,R24
(0007)  DDRA=0xff;
    0144 EF8F      LDI	R24,0xFF
    0145 BB8A      OUT	0x1A,R24
(0008)  twi_slave_init(0x50); //初始化为从机,地址0x01。
    0146 E500      LDI	R16,0x50
    0147 940E0055  CALL	_twi_slave_init
(0009)  SEI();
    0149 9478      BSET	7
(0010)  while(1)
FILE: <library>
    014A CFFF      RJMP	0x014A
    014B 9508      RET
pop_gset2:
    014C E0E2      LDI	R30,2
    014D 940C015B  JMP	pop
push_gset5:
    014F 92FA      ST	R15,-Y
    0150 92EA      ST	R14,-Y
push_gset4:
    0151 92DA      ST	R13,-Y
    0152 92CA      ST	R12,-Y
push_gset3:
    0153 92BA      ST	R11,-Y
    0154 92AA      ST	R10,-Y
push_gset2:
    0155 937A      ST	R23,-Y
    0156 936A      ST	R22,-Y
push_gset1:
    0157 935A      ST	R21,-Y
    0158 934A      ST	R20,-Y
    0159 9508      RET
pop_gset1:
    015A E0E1      LDI	R30,1
pop:
    015B 9149      LD	R20,Y+
    015C 9159      LD	R21,Y+
    015D FDE0      SBRC	R30,0
    015E 9508      RET
    015F 9169      LD	R22,Y+
    0160 9179      LD	R23,Y+
    0161 FDE1      SBRC	R30,1
    0162 9508      RET
    0163 90A9      LD	R10,Y+
    0164 90B9      LD	R11,Y+
    0165 FDE2      SBRC	R30,2
    0166 9508      RET
    0167 90C9      LD	R12,Y+
    0168 90D9      LD	R13,Y+
    0169 FDE3      SBRC	R30,3
    016A 9508      RET
    016B 90E9      LD	R14,Y+
    016C 90F9      LD	R15,Y+
    016D 9508      RET
push_lset:
    016E 93FA      ST	R31,-Y
    016F 93EA      ST	R30,-Y
    0170 93BA      ST	R27,-Y
    0171 93AA      ST	R26,-Y
    0172 939A      ST	R25,-Y
    0173 938A      ST	R24,-Y
    0174 933A      ST	R19,-Y
    0175 932A      ST	R18,-Y
    0176 931A      ST	R17,-Y
    0177 930A      ST	R16,-Y
    0178 929A      ST	R9,-Y
    0179 928A      ST	R8,-Y
    017A 927A      ST	R7,-Y
    017B 926A      ST	R6,-Y
    017C 925A      ST	R5,-Y
    017D 924A      ST	R4,-Y
    017E 923A      ST	R3,-Y
    017F 922A      ST	R2,-Y
    0180 921A      ST	R1,-Y
    0181 920A      ST	R0,-Y
    0182 B60F      IN	R0,0x3F
    0183 920A      ST	R0,-Y
    0184 9508      RET
pop_lset:
    0185 9009      LD	R0,Y+
    0186 BE0F      OUT	0x3F,R0
    0187 9009      LD	R0,Y+
    0188 9019      LD	R1,Y+
    0189 9029      LD	R2,Y+
    018A 9039      LD	R3,Y+
    018B 9049      LD	R4,Y+
    018C 9059      LD	R5,Y+
    018D 9069      LD	R6,Y+
    018E 9079      LD	R7,Y+
    018F 9089      LD	R8,Y+
    0190 9099      LD	R9,Y+
    0191 9109      LD	R16,Y+
    0192 9119      LD	R17,Y+
    0193 9129      LD	R18,Y+
    0194 9139      LD	R19,Y+
    0195 9189      LD	R24,Y+
    0196 9199      LD	R25,Y+
    0197 91A9      LD	R26,Y+
    0198 91B9      LD	R27,Y+
    0199 91E9      LD	R30,Y+
    019A 91F9      LD	R31,Y+
    019B 9508      RET

⌨️ 快捷键说明

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