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

📄 gsm.lst

📁 实现机于通讯芯片的电话接听 拨出 以及来电振领提示
💻 LST
📖 第 1 页 / 共 3 页
字号:
    029D B388      IN	R24,0x18
    029E 7D8F      ANDI	R24,0xDF
    029F BB88      OUT	0x18,R24
    02A0 D125      RCALL	0x03C6
(0055) 						  req_flag=1;
(0056) 						  start_flag=0;
(0057) 						  vision_flag=0;
(0058) 						  cmd_flag=0;
(0059) 						  cmd_num=0;
    02A1 92200061  STS	cmd_num,R2
(0060) 						}
(0061) 						if(cmd==0x0f) //接收到握手结束位 置标记
    02A3 91800060  LDS	R24,cmd
    02A5 308F      CPI	R24,0xF
    02A6 F431      BNE	0x02AD
(0062) 						{
(0063) 						  start_flag=1;
    02A7 E081      LDI	R24,1
    02A8 93800066  STS	start_flag,R24
(0064) 						  PWRON;
    02AA B388      IN	R24,0x18
    02AB 7D8F      ANDI	R24,0xDF
    02AC BB88      OUT	0x18,R24
(0065) 						}
(0066) 						if(cmd==0x05 && cmd_num==2)
    02AD 91800060  LDS	R24,cmd
    02AF 3085      CPI	R24,5
    02B0 F439      BNE	0x02B8
    02B1 91800061  LDS	R24,cmd_num
    02B3 3082      CPI	R24,2
    02B4 F419      BNE	0x02B8
(0067) 						{
(0068) 						  vision_flag=1;
    02B5 E081      LDI	R24,1
    02B6 93800067  STS	vision_flag,R24
(0069) 						}
(0070) 				        Twi_ACK();
    02B8 EC85      LDI	R24,0xC5
    02B9 BF86      OUT	0x36,R24
(0071) 						if(cmd==0xff) //接受到主机发送数据结束位 置标记
    02BA 91800060  LDS	R24,cmd
    02BC 3F8F      CPI	R24,0xFF
    02BD F009      BEQ	0x02BF
    02BE C0C6      RJMP	0x0385
(0072) 						{
(0073) 						   cmd_flag=1;
    02BF E081      LDI	R24,1
    02C0 93800068  STS	cmd_flag,R24
(0074) 						}
(0075)                         break;
    02C2 C0C2      RJMP	0x0385
(0076)                 }        
(0077)         		case SR_DATA_NOACK://SR_DATA_NOACK=0x88;以前以自己的 SLA+W 被寻址;数据已经被接收,NOT ACK 已返回
(0078)                 {  
(0079)                         cmd=TWDR;
    02C3 B023      IN	R2,0x03
    02C4 92200060  STS	cmd,R2
(0080) 						buf[cmd_num]=cmd;
    02C6 EF8A      LDI	R24,0xFA
    02C7 E090      LDI	R25,0
    02C8 91E00061  LDS	R30,cmd_num
    02CA 27FF      CLR	R31
    02CB 0FE8      ADD	R30,R24
    02CC 1FF9      ADC	R31,R25
    02CD 8220      STD	Z+0,R2
(0081) 						cmd_num++;
    02CE 91800061  LDS	R24,cmd_num
    02D0 5F8F      SUBI	R24,0xFF
    02D1 93800061  STS	cmd_num,R24
(0082) 						if(cmd==0x00 && cmd_num==2) //接收到主机请求数据结束位 置标记
    02D3 90200060  LDS	R2,cmd
    02D5 2022      TST	R2
    02D6 F441      BNE	0x02DF
    02D7 3082      CPI	R24,2
    02D8 F431      BNE	0x02DF
    02D9 D0EC      RCALL	0x03C6
(0083) 						{  
(0084) 						  req_flag=1;
(0085) 						  start_flag=0;
(0086) 						  vision_flag=0;
(0087) 						  cmd_flag=0;
(0088) 						  PWRON;
    02DA B388      IN	R24,0x18
    02DB 7D8F      ANDI	R24,0xDF
    02DC BB88      OUT	0x18,R24
(0089) 						  cmd_num=0;
    02DD 92200061  STS	cmd_num,R2
(0090) 						}
(0091) 						if(cmd==0x0f) //接收到握手结束位 置标记
    02DF 91800060  LDS	R24,cmd
    02E1 308F      CPI	R24,0xF
    02E2 F431      BNE	0x02E9
(0092) 						{
(0093) 						  start_flag=1;
    02E3 E081      LDI	R24,1
    02E4 93800066  STS	start_flag,R24
(0094) 						  PWRON;
    02E6 B388      IN	R24,0x18
    02E7 7D8F      ANDI	R24,0xDF
    02E8 BB88      OUT	0x18,R24
(0095) 						}
(0096) 						if(cmd==0x05 && cmd_num==2)
    02E9 91800060  LDS	R24,cmd
    02EB 3085      CPI	R24,5
    02EC F439      BNE	0x02F4
    02ED 91800061  LDS	R24,cmd_num
    02EF 3082      CPI	R24,2
    02F0 F419      BNE	0x02F4
(0097) 						{
(0098) 						  vision_flag=1;
    02F1 E081      LDI	R24,1
    02F2 93800067  STS	vision_flag,R24
(0099) 						}
(0100) 				        Twi_ACK();
    02F4 EC85      LDI	R24,0xC5
    02F5 BF86      OUT	0x36,R24
(0101) 						if(cmd==0xff) //接受到主机发送数据结束位 置标记
    02F6 91800060  LDS	R24,cmd
    02F8 3F8F      CPI	R24,0xFF
    02F9 F009      BEQ	0x02FB
    02FA C08A      RJMP	0x0385
(0102) 						{
(0103) 						   cmd_flag=1;
    02FB E081      LDI	R24,1
    02FC 93800068  STS	cmd_flag,R24
(0104) 						}
(0105)                         break;
    02FE C086      RJMP	0x0385
(0106)                 }        
(0107)                 case SR_ALL_DATA_ACK://SR_ALL_DATA_ACK=0x90;以前以广播方式被寻址;数据已经被接收,ACK 已返回
(0108)                 {    
(0109)                         cmd=TWDR;
    02FF B023      IN	R2,0x03
    0300 92200060  STS	cmd,R2
(0110) 						buf[cmd_num]=cmd;
    0302 EF8A      LDI	R24,0xFA
    0303 E090      LDI	R25,0
    0304 91E00061  LDS	R30,cmd_num
    0306 27FF      CLR	R31
    0307 0FE8      ADD	R30,R24
    0308 1FF9      ADC	R31,R25
    0309 8220      STD	Z+0,R2
(0111) 						cmd_num++;
    030A 91800061  LDS	R24,cmd_num
    030C 5F8F      SUBI	R24,0xFF
    030D 93800061  STS	cmd_num,R24
(0112) 						if(cmd==0x00 && cmd_num==2) //接收到主机请求数据结束位 置标记
    030F 90200060  LDS	R2,cmd
    0311 2022      TST	R2
    0312 F441      BNE	0x031B
    0313 3082      CPI	R24,2
    0314 F431      BNE	0x031B
    0315 D0B0      RCALL	0x03C6
(0113) 						{  
(0114) 						  req_flag=1;
(0115) 						  start_flag=0;
(0116) 						  vision_flag=0;
(0117) 						  cmd_flag=0;
(0118) 						  PWRON;
    0316 B388      IN	R24,0x18
    0317 7D8F      ANDI	R24,0xDF
    0318 BB88      OUT	0x18,R24
(0119) 						  cmd_num=0;
    0319 92200061  STS	cmd_num,R2
(0120) 						}
(0121) 						if(cmd==0x0f) //接收到握手结束位 置标记
    031B 91800060  LDS	R24,cmd
    031D 308F      CPI	R24,0xF
    031E F431      BNE	0x0325
(0122) 						{
(0123) 						  start_flag=1;
    031F E081      LDI	R24,1
    0320 93800066  STS	start_flag,R24
(0124) 						  PWRON;
    0322 B388      IN	R24,0x18
    0323 7D8F      ANDI	R24,0xDF
    0324 BB88      OUT	0x18,R24
(0125) 						}
(0126) 						if(cmd==0x05 && cmd_num==2)
    0325 91800060  LDS	R24,cmd
    0327 3085      CPI	R24,5
    0328 F439      BNE	0x0330
    0329 91800061  LDS	R24,cmd_num
    032B 3082      CPI	R24,2
    032C F419      BNE	0x0330
(0127) 						{
(0128) 						  vision_flag=1;
    032D E081      LDI	R24,1
    032E 93800067  STS	vision_flag,R24
(0129) 						}
(0130) 				        Twi_ACK();
    0330 EC85      LDI	R24,0xC5
    0331 BF86      OUT	0x36,R24
(0131) 						if(cmd==0xff) //接受到主机发送数据结束位 置标记
    0332 91800060  LDS	R24,cmd
    0334 3F8F      CPI	R24,0xFF
    0335 F009      BEQ	0x0337
    0336 C04E      RJMP	0x0385
(0132) 						{
(0133) 						   cmd_flag=1;
    0337 E081      LDI	R24,1
    0338 93800068  STS	cmd_flag,R24
(0134) 						}
(0135)                         break;       
    033A C04A      RJMP	0x0385
(0136)                 }         
(0137)                 case SR_ALL_DATA_NOACK://SR_ALL_DATA_NOACK=0x98;以前以广播方式被寻址;数据已经被接收,NOT ACK 已返回
(0138)                 {    
(0139)                         cmd=TWDR;
    033B B023      IN	R2,0x03
    033C 92200060  STS	cmd,R2
(0140) 						buf[cmd_num]=cmd;
    033E EF8A      LDI	R24,0xFA
    033F E090      LDI	R25,0
    0340 91E00061  LDS	R30,cmd_num
    0342 27FF      CLR	R31
    0343 0FE8      ADD	R30,R24
    0344 1FF9      ADC	R31,R25
    0345 8220      STD	Z+0,R2
(0141) 						cmd_num++;
    0346 91800061  LDS	R24,cmd_num
    0348 5F8F      SUBI	R24,0xFF
    0349 93800061  STS	cmd_num,R24
(0142) 						if(cmd==0x00 && cmd_num==2) //接收到主机请求数据结束位 置标记
    034B 90200060  LDS	R2,cmd
    034D 2022      TST	R2
    034E F441      BNE	0x0357
    034F 3082      CPI	R24,2
    0350 F431      BNE	0x0357
    0351 D074      RCALL	0x03C6
(0143) 						{  
(0144) 						  req_flag=1;
(0145) 						  start_flag=0;
(0146) 						  vision_flag=0;
(0147) 						  cmd_flag=0;
(0148) 						  PWRON;
    0352 B388      IN	R24,0x18
    0353 7D8F      ANDI	R24,0xDF
    0354 BB88      OUT	0x18,R24
(0149) 						  cmd_num=0;
    0355 92200061  STS	cmd_num,R2
(0150) 						}
(0151) 						if(cmd==0x0f) //接收到握手结束位 置标记
    0357 91800060  LDS	R24,cmd
    0359 308F      CPI	R24,0xF
    035A F431      BNE	0x0361
(0152) 						{
(0153) 						  start_flag=1;
    035B E081      LDI	R24,1
    035C 93800066  STS	start_flag,R24
(0154) 						  PWRON;
    035E B388      IN	R24,0x18
    035F 7D8F      ANDI	R24,0xDF
    0360 BB88      OUT	0x18,R24
(0155) 						}
(0156) 						if(cmd==0x05 && cmd_num==2)
    0361 91800060  LDS	R24,cmd
    0363 3085      CPI	R24,5
    0364 F439      BNE	0x036C
    0365 91800061  LDS	R24,cmd_num
    0367 3082      CPI	R24,2
    0368 F419      BNE	0x036C
(0157) 						{
(0158) 						  vision_flag=1;
    0369 E081      LDI	R24,1
    036A 93800067  STS	vision_flag,R24
(0159) 						}
(0160) 				        Twi_ACK();
    036C EC85      LDI	R24,0xC5
    036D BF86      OUT	0x36,R24
(0161) 						if(cmd==0xff) //接受到主机发送数据结束位 置标记
    036E 91800060  LDS	R24,cmd
    0370 3F8F      CPI	R24,0xFF
    0371 F009      BEQ	0x0373
    0372 C012      RJMP	0x0385
(0162) 						{
(0163) 						   cmd_flag=1;
    0373 E081      LDI	R24,1
    0374 93800068  STS	cmd_flag,R24
(0164) 						}
(0165)                         break;      
    0376 C00E      RJMP	0x0385
(0166)                 }
(0167) 				//*****************************从机发送************************/      
(0168)         		case ST_SLA_ACK://SR_STOP_RESTART=0xa8, 自己的SLA+R 已经被接收,ACK 已返回
(0169)                 { 
(0170) 				      Twi_WB(*(data+j)); //从机发送数据 
    0377 D03B      RCALL	<created procedures>
(0171) 					  j++;  //准备下一个数据
(0172) 					  break; 
    0378 C00C      RJMP	0x0385
(0173)         		}
(0174) 				case MT_ST_SLA_ACK://SR_STOP_RESTART=0xb0, SLA+R/W 作为主机的仲裁失败;自己的SLA+R 已经被接收,ACK 已返回
(0175)                 { 
(0176) 				      Twi_WB(*(data+j)); //从机发送数据 
    0379 D039      RCALL	<created procedures>
(0177) 					  j++;  //准备下一个数据
(0178) 					  break;
    037A C00A      RJMP	0x0385
(0179)         		}
(0180) 				case ST_DATA_ACK://SR_STOP_RESTART=0xb8, TWDR 里数据已经发送,接收到ACK
(0181)                 { 
(0182) 				      Twi_WB(*(data+j)); //从机发送数据 
    037B D037      RCALL	<created procedures>
(0183) 					  j++;  //准备下一个数据
(0184) 					  break;
    037C C008      RJMP	0x0385
(0185)         		}
(0186) 				case ST_DATA_NOACK://SR_STOP_RESTART=0xc0, TWDR 里数据已经发送,接收到NOT ACK
(0187)                 { 
(0188) 				      j=0; //发送完数据请零结束
    037D D061      RCALL	0x03DF
(0189) 					  Twi_ACK();
(0190) 					  break;
    037E C006      RJMP	0x0385
(0191)         		}
(0192) 				case ST_LAST_DATA_ACK://SR_STOP_RESTART=0xc8, TWDR 的一字节数据已经发送,(TWAE = “0”);接收到ACK
(0193)                 { 
(0194) 				        j=0;//发送完数据请零结束
    037F D05F      RCALL	0x03DF
(0195) 						Twi_ACK();
(0196) 						break; 
    0380 C004      RJMP	0x0385
(0197)         		}  
(0198) 				case SR_STOP_RESTART://SR_STOP_RESTART=0xa0, 在以从机工作时接收到STOP或重复START
(0199)                 { 
(0200) 				        j=0;
    0381 D05D      RCALL	0x03DF
(0201)             			Twi_ACK();
(0202) 						break; 
    0382 C002      RJMP	0x0385
(0203)         		}                                                                                                                                                                                             
(0204)                 default: 
(0205)                 { 
(0206)                         Stop();//从机模式恢复TWI响应能力 
    0383 E985      LDI	R24,0x95
    0384 BF86      OUT	0x36,R24
(0207) 						break;
FILE: <library>
    0385 9029      LD	R2,Y+
    0386 BE2F      OUT	0x3F,R2
    0387 91F9      LD	R31,Y+
    0388 91E9      LD	R30,Y+
    0389 9199      LD	R25,Y+
    038A 9189      LD	R24,Y+
    038B 9119      LD	R17,Y+
    038C 9109      LD	R16,Y+
    038D 9039      LD	R3,Y+
    038E 9029      LD	R2,Y+
    038F 9518      RETI
pop_gset2:
    0390 E0E2      LDI	R30,2
    0391 C00E      RJMP	pop
pop_gset3:
    0392 E0E4      LDI	R30,4
    0393 C00C      RJMP	pop
push_gset5:
    0394 92FA      ST	R15,-Y
    0395 92EA      ST	R14,-Y
push_gset4:
    0396 92DA      ST	R13,-Y
    0397 92CA      ST	R12,-Y
push_gset3:
    0398 92BA      ST	R11,-Y
    0399 92AA      ST	R10,-Y
push_gset2:
    039A 937A      ST	R23,-Y
    039B 936A      ST	R22,-Y
push_gset1:
    039C 935A      ST	R21,-Y
    039D 934A      ST	R20,-Y
    039E 9508      RET
pop_gset1:
    039F E0E1      LDI	R30,1
pop:
    03A0 9149      LD	R20,Y+
    03A1 9159      LD	R21,Y+
    03A2 FDE0      SBRC	R30,0
    03A3 9508      RET
    03A4 9169      LD	R22,Y+
    03A5 9179      LD	R23,Y+
    03A6 FDE1      SBRC	R30,1
    03A7 9508      RET
    03A8 90A9      LD	R10,Y+
    03A9 90B9      LD	R11,Y+
    03AA FDE2      SBRC	R30,2
    03AB 9508      RET
    03AC 90C9      LD	R12,Y+
    03AD 90D9      LD	R13,Y+
    03AE FDE3      SBRC	R30,3
    03AF 9508      RET
    03B0 90E9      LD	R14,Y+
    03B1 90F9      LD	R15,Y+
    03B2 9508      RET
<created procedures>:
    03B3 902000F8  LDS	R2,data
    03B5 903000F9  LDS	R3,data+1
    03B7 91E00063  LDS	R30,j
    03B9 27FF      CLR	R31
    03BA 0DE2      ADD	R30,R2
    03BB 1DF3      ADC	R31,R3
    03BC 8020      LDD	R2,Z+0
    03BD B823      OUT	0x03,R2
    03BE EC85      LDI	R24,0xC5
    03BF BF86      OUT	0x36,R24
    03C0 91800063  LDS	R24,j
    03C2 5F8F      SUBI	R24,0xFF
    03C3 93800063  STS	j,R24
    03C5 9508      RET
    03C6 E081      LDI	R24,1
    03C7 93800065  STS	req_flag,R24
    03C9 2422      CLR	R2
    03CA 92200066  STS	start_flag,R2
    03CC 92200067  STS	vision_flag,R2
    03CE 92200068  STS	cmd_flag,R2
    03D0 9508      RET
    03D1 E090      LDI	R25,0
    03D2 939000F9  STS	data+1,R25
    03D4 938000F8  STS	data,R24
    03D6 9508      RET
    03D7 EF8C      LDI	R24,0xFC
    03D8 E090      LDI	R25,0
    03D9 91E00064  LDS	R30,xk
    03DB 27FF      CLR	R31
    03DC 0FE8      ADD	R30,R24
    03DD 1FF9      ADC	R31,R25
    03DE 9508      RET
    03DF 2422      CLR	R2
    03E0 92200063  STS	j,R2
    03E2 EC85      LDI	R24,0xC5
    03E3 BF86      OUT	0x36,R24
    03E4 9508      RET

⌨️ 快捷键说明

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