📄 zz.lst
字号:
(0017) #define C4_IN DDRB &= ~(1 << PB4) /*设置输入*/
(0018) #define C4_OUT DDRB |= (1 << PB4) /*设置输出*/
(0019) #define C4_CLR PORTB &= ~(1 << PB4) /*置低电平*/
(0020) #define C4_SET PORTB |= (1 << PB4) /*置高电平*/
(0021) #define C4_R PINB & (1 <<PB4) /*读了电平*/
(0022)
(0023) /**************************************************************************
(0024) 通讯I/O空间定义
(0025) ***************************************************************************/
(0026) #define COM_IN C4_IN
(0027) #define COM_OUT C4_OUT
(0028) #define COM_CLR C4_CLR
(0029) #define COM_SET C4_SET
(0030) #define COM_R C4_R
(0031)
(0032) /**************************************************************************
(0033) 全局变量定义区
(0034) ***************************************************************************/
(0035) U8 i;
(0036) U8 U8FLAG,k;
(0037) U8 U8count,U8temp;
(0038) U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
(0039) U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
(0040) U8 U8comdata;
(0041) U16 ReceiveHighByte;
(0042) U16 ReceiveLowByte;
(0043) void port_init()
(0044) {
(0045) DDRD = 0xFF;
_port_init:
00258 EF8F LDI R24,0xFF
00259 BB81 OUT 0x11,R24
(0046) PORTD = 0x00;
0025A 2422 CLR R2
0025B BA22 OUT 0x12,R2
(0047) DDRC = 0xFF;
0025C BB84 OUT 0x14,R24
(0048) PORTC = 0x00;
0025D BA25 OUT 0x15,R2
(0049) DDRA = 0xFE;
0025E EF8E LDI R24,0xFE
0025F BB8A OUT 0x1A,R24
(0050) PORTA = 0x00;
00260 BA2B OUT 0x1B,R2
(0051) PORTC|=BIT(2)+BIT(5);
00261 B385 IN R24,0x15
00262 6284 ORI R24,0x24
00263 BB85 OUT 0x15,R24
(0052) PORTC&=~BIT(4);
00264 98AC CBI 0x15,4
(0053) DDRB = 0x0C;
00265 E08C LDI R24,0xC
00266 BB87 OUT 0x17,R24
(0054) PORTB = 0x03;
00267 E083 LDI R24,3
00268 BB88 OUT 0x18,R24
00269 9508 RET
(0055) }
(0056) void Delay(unsigned int i)
(0057) {
(0058) while(i--);
_Delay:
i --> R16
0026A 0118 MOVW R2,R16
0026B 5001 SUBI R16,1
0026C 4010 SBCI R17,0
0026D 2022 TST R2
0026E F7D9 BNE 0x026A
0026F 2033 TST R3
00270 F7C9 BNE 0x026A
00271 9508 RET
_DelaymS:
i --> R20
dly --> R16
00272 934A ST -Y,R20
00273 935A ST -Y,R21
(0059) }
(0060)
(0061) void DelaymS (U16 dly)
(0062) {
(0063) U16 i;
(0064) for ( ; dly>0; dly--)
00274 C00C RJMP 0x0281
(0065) {
(0066) WDR();
00275 95A8 WDR
(0067) for (i=0; i<1119; i++);
00276 2744 CLR R20
00277 2755 CLR R21
00278 C002 RJMP 0x027B
00279 5F4F SUBI R20,0xFF
0027A 4F5F SBCI R21,0xFF
0027B 354F CPI R20,0x5F
0027C E0E4 LDI R30,4
0027D 075E CPC R21,R30
0027E F3D0 BCS 0x0279
0027F 5001 SUBI R16,1
00280 4010 SBCI R17,0
00281 3000 CPI R16,0
00282 0701 CPC R16,R17
00283 F789 BNE 0x0275
00284 9159 LD R21,Y+
00285 9149 LD R20,Y+
00286 9508 RET
(0068) }
(0069) }
(0070)
(0071)
(0072) void Delay_10us(void)
(0073) {
(0074) U8 i;
(0075) i++;i++;i++;i++;i++;i++;i++;i++;i++;
_Delay_10us:
i --> R16
00287 9503 INC R16
00288 9503 INC R16
00289 9503 INC R16
0028A 9503 INC R16
0028B 9503 INC R16
0028C 9503 INC R16
0028D 9503 INC R16
0028E 9503 INC R16
0028F 9503 INC R16
(0076) i++;i++;i++;i++;i++;i++;i++;i++;i++;
00290 9503 INC R16
00291 9503 INC R16
00292 9503 INC R16
00293 9503 INC R16
00294 9503 INC R16
00295 9503 INC R16
00296 9503 INC R16
00297 9503 INC R16
00298 9503 INC R16
(0077) i++;i++;i++;i++;i++;i++;i++;i++;i++;
00299 9503 INC R16
0029A 9503 INC R16
0029B 9503 INC R16
0029C 9503 INC R16
0029D 9503 INC R16
0029E 9503 INC R16
0029F 9503 INC R16
002A0 9503 INC R16
002A1 9503 INC R16
(0078) i++;i++;i++;i++;i++;i++;i++;i++;i++;
002A2 9503 INC R16
002A3 9503 INC R16
002A4 9503 INC R16
002A5 9503 INC R16
002A6 9503 INC R16
002A7 9503 INC R16
002A8 9503 INC R16
002A9 9503 INC R16
002AA 9503 INC R16
(0079) i++;i++;i++;i++;i++;i++;i++;i++;i++;
002AB 9503 INC R16
002AC 9503 INC R16
002AD 9503 INC R16
002AE 9503 INC R16
002AF 9503 INC R16
002B0 9503 INC R16
002B1 9503 INC R16
002B2 9503 INC R16
002B3 9503 INC R16
(0080) i++;i++;i++;i++;i++;i++;i++;i++;i++;
002B4 9503 INC R16
002B5 9503 INC R16
002B6 9503 INC R16
002B7 9503 INC R16
002B8 9503 INC R16
002B9 9503 INC R16
002BA 9503 INC R16
002BB 9503 INC R16
002BC 9503 INC R16
(0081) i++;i++;i++;i++;i++;i++;i++;i++;i++;
002BD 9503 INC R16
002BE 9503 INC R16
002BF 9503 INC R16
002C0 9503 INC R16
002C1 9503 INC R16
002C2 9503 INC R16
002C3 9503 INC R16
002C4 9503 INC R16
002C5 9503 INC R16
(0082) i++;i++;i++;i++;i++;i++;i++;
002C6 9503 INC R16
002C7 9503 INC R16
002C8 9503 INC R16
002C9 9503 INC R16
002CA 9503 INC R16
002CB 9503 INC R16
002CC 9503 INC R16
002CD 9508 RET
_COM:
i --> R20
002CE 934A ST -Y,R20
(0083) }
(0084) void COM(void)
(0085) {
(0086)
(0087) U8 i;
(0088) for(i=0;i<8;i++)
002CF 2744 CLR R20
002D0 C03F RJMP 0x0310
(0089) {
(0090)
(0091) U8FLAG=2;
002D1 E082 LDI R24,2
002D2 9380 00B3 STS U8FLAG,R24
(0092) while((!(COM_R))&&U8FLAG++);
002D4 99B4 SBIC 0x16,4
002D5 C009 RJMP 0x02DF
002D6 9020 00B3 LDS R2,U8FLAG
002D8 2433 CLR R3
002D9 2D82 MOV R24,R2
002DA 5F8F SUBI R24,0xFF
002DB 9380 00B3 STS U8FLAG,R24
002DD 2022 TST R2
002DE F7A9 BNE 0x02D4
(0093) if(U8FLAG==1)break;
002DF 9180 00B3 LDS R24,U8FLAG
002E1 3081 CPI R24,1
002E2 F409 BNE 0x02E4
002E3 C02F RJMP 0x0313
(0094) Delay_10us();
002E4 DFA2 RCALL _Delay_10us
(0095) Delay_10us();
002E5 DFA1 RCALL _Delay_10us
(0096) Delay_10us();
002E6 DFA0 RCALL _Delay_10us
(0097) Delay_10us();
002E7 DF9F RCALL _Delay_10us
(0098) U8temp=0;
002E8 2422 CLR R2
002E9 9220 00B0 STS U8temp,R2
(0099) if(COM_R)U8temp=1;
002EB 9BB4 SBIS 0x16,4
002EC C003 RJMP 0x02F0
002ED E081 LDI R24,1
002EE 9380 00B0 STS U8temp,R24
(0100) U8FLAG=2;
002F0 E082 LDI R24,2
002F1 9380 00B3 STS U8FLAG,R24
(0101) while((COM_R)&&U8FLAG++);
002F3 9BB4 SBIS 0x16,4
002F4 C009 RJMP 0x02FE
002F5 9020 00B3 LDS R2,U8FLAG
002F7 2433 CLR R3
002F8 2D82 MOV R24,R2
002F9 5F8F SUBI R24,0xFF
002FA 9380 00B3 STS U8FLAG,R24
002FC 2022 TST R2
002FD F7A9 BNE 0x02F3
(0102) if(U8FLAG==1)break;
002FE 9180 00B3 LDS R24,U8FLAG
00300 3081 CPI R24,1
00301 F409 BNE 0x0303
00302 C010 RJMP 0x0313
(0103)
(0104) U8comdata<<=1;
00303 9020 00A5 LDS R2,U8comdata
00305 0C22 LSL R2
00306 9220 00A5 STS U8comdata,R2
(0105) U8comdata|=U8temp; //0
00308 9020 00B0 LDS R2,U8temp
0030A 9030 00A5 LDS R3,U8comdata
0030C 2832 OR R3,R2
0030D 9230 00A5 STS U8comdata,R3
0030F 9543 INC R20
00310 3048 CPI R20,0x8
00311 F408 BCC 0x0313
00312 CFBE RJMP 0x02D1
00313 9149 LD R20,Y+
00314 9508 RET
(0106) }//rof
(0107)
(0108) }
(0109)
(0110) void RH(void)
(0111) {
(0112)
(0113) //主机拉低18ms
(0114) COM_OUT;
_RH:
00315 9ABC SBI 0x17,4
(0115) COM_CLR;
00316 98C4 CBI 0x18,4
(0116) DelaymS(1);
00317 E001 LDI R16,1
00318 E010 LDI R17,0
00319 DF58 RCALL _DelaymS
(0117) COM_IN;
0031A 98BC CBI 0x17,4
(0118) COM_SET;
0031B 9AC4 SBI 0x18,4
(0119)
(0120) //总线由上拉电阻拉高 主机延时20us
(0121) Delay_10us();
0031C DF6A RCALL _Delay_10us
(0122) Delay_10us();
0031D DF69 RCALL _Delay_10us
(0123) Delay_10us();
0031E DF68 RCALL _Delay_10us
(0124) Delay_10us();
0031F DF67 RCALL _Delay_10us
(0125) //主机设为输入 判断从机响应信号
(0126) //P2_0=1;
(0127)
(0128) //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行
(0129) // if(!P2_0) //T !
(0130) if(COM_R)U8FLAG=1;
00320 9BB4 SBIS 0x16,4
00321 C05D RJMP 0x037F
00322 E081 LDI R24,1
00323 9380 00B3 STS U8FLAG,R24
00325 C059 RJMP 0x037F
(0131) while(!(COM_R))
(0132) {
(0133) U8FLAG=2;
00326 E082 LDI R24,2
00327 9380 00B3 STS U8FLAG,R24
(0134) while((!(COM_R))&&U8FLAG++);
00329 99B4 SBIC 0x16,4
0032A C009 RJMP 0x0334
0032B 9020 00B3 LDS R2,U8FLAG
0032D 2433 CLR R3
0032E 2D82 MOV R24,R2
0032F 5F8F SUBI R24,0xFF
00330 9380 00B3 STS U8FLAG,R24
00332 2022 TST R2
00333 F7A9 BNE 0x0329
(0135) if(U8FLAG==1)break;
00334 9180 00B3 LDS R24,U8FLAG
00336 3081 CPI R24,1
00337 F409 BNE 0x0339
00338 C048 RJMP 0x0381
(0136) U8FLAG=2;
00339 E082 LDI R24,2
0033A 9380 00B3 STS U8FLAG,R24
(0137) while((COM_R)&&U8FLAG++);
0033C 9BB4 SBIS 0x16,4
0033D C009 RJMP 0x0347
0033E 9020 00B3 LDS R2,U8FLAG
00340 2433 CLR R3
00341 2D82 MOV R24,R2
00342 5F8F SUBI R24,0xFF
00343 9380 00B3 STS U8FLAG,R24
00345 2022 TST R2
00346 F7A9 BNE 0x033C
(0138) if(U8FLAG==1)break;
00347 9180 00B3 LDS R24,U8FLAG
00349 3081 CPI R24,1
0034A F409 BNE 0x034C
0034B C035 RJMP 0x0381
(0139) //数据接收状态
(0140) COM();
0034C DF81 RCALL _COM
(0141) if(U8FLAG==1)break;
0034D 9180 00B3 LDS R24,U8FLAG
0034F 3081 CPI R24,1
00350 F409 BNE 0x0352
00351 C02F RJMP 0x0381
(0142) U8T_data_H_temp=U8comdata;
00352 9020 00A5 LDS R2,U8comdata
00354 9220 00AA STS U8T_data_H_temp,R2
(0143) COM();
00356 DF77 RCALL _COM
(0144) if(U8FLAG==1)break;
00357 9180 00B3 LDS R24,U8FLAG
00359 3081 CPI R24,1
0035A F409 BNE 0x035C
0035B C025 RJMP 0x0381
(0145) U8T_data_L_temp=U8comdata;
0035C 9020 00A5 LDS R2,U8comdata
0035E 9220 00A9 STS U8T_data_L_temp,R2
(0146) COM();
00360 DF6D RCALL _COM
(0147) if(U8FLAG==1)break;
00361 9180 00B3 LDS R24,U8FLAG
00363 3081 CPI R24,1
00364 F409 BNE 0x0366
00365 C01B RJMP 0x0381
(0148) U8RH_data_H_temp=U8comdata;
00366 9020 00A5 LDS R2,U8comdata
00368 9220 00A8 STS U8RH_data_H_temp,R2
(0149) COM();
0036A DF63 RCALL _COM
(0150) if(U8FLAG==1)break;
0036B 9180 00B3 LDS R24,U8FLAG
0036D 3081 CPI R24,1
0036E F409 BNE 0x0370
0036F C011 RJMP 0x0381
(0151) U8RH_data_L_temp=U8comdata;
00370 9020 00A5 LDS R2,U8comdata
00372 9220 00A7 STS U8RH_data_L_temp,R2
(0152) COM();
00374 DF59 RCALL _COM
(0153) if(U8FLAG==1)break;
00375 9180 00B3 LDS R24,U8FLAG
00377 3081 CPI R24,1
00378 F409 BNE 0x037A
00379 C007 RJMP 0x0381
(0154) U8checkdata_temp=U8comdata;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -