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

📄 sle4442.lst

📁 万年历挂钟系统源程序,附语句模块功能说明,iccavr环境编程
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0150)  DelayUs(2);
    0102 E002      LDI	R16,2
    0103 DF60      RCALL	_DelayUs
(0151)  IO(1);
    0104 E001      LDI	R16,1
    0105 DF4E      RCALL	_IO
(0152)  DelayUs(2);
    0106 E002      LDI	R16,2
    0107 DF5C      RCALL	_DelayUs
(0153)  IO(0);
    0108 2700      CLR	R16
(0154) }
    0109 CF4A      RJMP	_IO
_Process:
  j                    --> R20
    010A D4F4      RCALL	push_gset1
(0155) 
(0156) //******************处理过程**************//
(0157) void Process(void)
(0158) {uint j;
(0159)  SetIO(1);//设置IO脚为输出脚
    010B E001      LDI	R16,1
    010C DF4D      RCALL	_SetIO
(0160)  CLK(0);
    010D 2700      CLR	R16
    010E DF3F      RCALL	_CLK
(0161)  DelayUs(5);
    010F E005      LDI	R16,5
    0110 DF53      RCALL	_DelayUs
(0162)  IO(0);
    0111 2700      CLR	R16
    0112 DF41      RCALL	_IO
(0163)  for(j=255;j>0;j--)
    0113 EF4F      LDI	R20,0xFF
    0114 E050      LDI	R21,0
    0115 C00A      RJMP	0x0120
(0164)  	{CLK(1);
    0116 E001      LDI	R16,1
    0117 DF36      RCALL	_CLK
(0165) 	 DelayUs(5);
    0118 E005      LDI	R16,5
    0119 DF4A      RCALL	_DelayUs
(0166) 	 CLK(0);
    011A 2700      CLR	R16
    011B DF32      RCALL	_CLK
(0167) 	 DelayUs(5);
    011C E005      LDI	R16,5
    011D DF46      RCALL	_DelayUs
    011E 5041      SUBI	R20,1
    011F 4050      SBCI	R21,0
    0120 3040      CPI	R20,0
    0121 0745      CPC	R20,R21
    0122 F799      BNE	0x0116
(0168) 	}
(0169)  IO(1);
    0123 E001      LDI	R16,1
    0124 DF2F      RCALL	_IO
(0170) }
    0125 D4DC      RCALL	pop_gset1
    0126 9508      RET
_Command:
  Byte3                --> Y+4
  Byte2                --> R20
  Byte1                --> R22
    0127 D4EE      RCALL	push_gset2
    0128 2F42      MOV	R20,R18
    0129 2F60      MOV	R22,R16
(0171) 
(0172) //****************说明*********************//
(0173) //*********输出模式接口命令,包括读主存储器30H,读保护存储器34H,读安全代码的接口命令31H***********//
(0174) //******处理模式数据接口命令,包括写主存储器38H,写保护存储器3CH,写安全代码39H,校验安全代码33H*******//
(0175) 
(0176) void Command(uchar Byte1,uchar Byte2,uchar Byte3)
(0177) {Start();
    012A DFBB      RCALL	_Start
(0178)  SendData(Byte1);
    012B 2F06      MOV	R16,R22
    012C DF72      RCALL	_SendData
(0179)  SendData(Byte2);
    012D 2F04      MOV	R16,R20
    012E DF70      RCALL	_SendData
(0180)  SendData(Byte3);
    012F 810C      LDD	R16,Y+4
    0130 DF6E      RCALL	_SendData
(0181)  Stop();
    0131 DFC6      RCALL	_Stop
(0182) }
    0132 D4C6      RCALL	pop_gset2
    0133 9508      RET
_ReadMainMemory:
  N                    --> R20
  p                    --> R22
  addr                 --> R10
    0134 D4E4      RCALL	push_gset3
    0135 2F62      MOV	R22,R18
    0136 2F73      MOV	R23,R19
    0137 2EA0      MOV	R10,R16
    0138 9721      SBIW	R28,1
    0139 814F      LDD	R20,Y+7
(0183) 
(0184) 
(0185) /**********读主存储器**************/
(0186) void ReadMainMemory(uchar addr,uchar *p,uchar N)
(0187) {Command(0x30,addr,0xff);
    013A EF8F      LDI	R24,0xFF
    013B 8388      STD	Y+0,R24
    013C 2D2A      MOV	R18,R10
    013D E300      LDI	R16,0x30
    013E DFE8      RCALL	_Command
(0188)  do{*p=ReceiveData();
    013F DF3E      RCALL	_ReceiveData
    0140 2FE6      MOV	R30,R22
    0141 2FF7      MOV	R31,R23
    0142 8300      STD	Z+0,R16
(0189)     p++;}while(--N);
    0143 5F6F      SUBI	R22,0xFF
    0144 4F7F      SBCI	R23,0xFF
    0145 2F84      MOV	R24,R20
    0146 5081      SUBI	R24,1
    0147 2F48      MOV	R20,R24
    0148 2388      TST	R24
    0149 F7A9      BNE	0x013F
(0190) }
    014A 9621      ADIW	R28,1
    014B D4AF      RCALL	pop_gset3
    014C 9508      RET
_ReadProtectMemory:
  i                    --> R20
  p                    --> R22
    014D D4C8      RCALL	push_gset2
    014E 2F60      MOV	R22,R16
    014F 2F71      MOV	R23,R17
    0150 9721      SBIW	R28,1
(0191) 
(0192) /**********读保护存储器***********/
(0193) void ReadProtectMemory(uchar *p)
(0194) {uchar i=4;
    0151 E044      LDI	R20,4
(0195)  Command(0x34,0xff,0xff);
    0152 EF8F      LDI	R24,0xFF
    0153 8388      STD	Y+0,R24
    0154 EF2F      LDI	R18,0xFF
    0155 E304      LDI	R16,0x34
    0156 DFD0      RCALL	_Command
(0196)  do{*p=ReceiveData();
    0157 DF26      RCALL	_ReceiveData
    0158 2FE6      MOV	R30,R22
    0159 2FF7      MOV	R31,R23
    015A 8300      STD	Z+0,R16
(0197)     p++;}while(i--);
    015B 5F6F      SUBI	R22,0xFF
    015C 4F7F      SBCI	R23,0xFF
    015D 2E24      MOV	R2,R20
    015E 2433      CLR	R3
    015F 5041      SUBI	R20,1
    0160 2022      TST	R2
    0161 F7A9      BNE	0x0157
(0198) }
    0162 9621      ADIW	R28,1
    0163 D495      RCALL	pop_gset2
    0164 9508      RET
_WriteMainMemory:
  Data                 --> R22
  Address              --> R20
    0165 D4B0      RCALL	push_gset2
    0166 2F62      MOV	R22,R18
    0167 2F40      MOV	R20,R16
    0168 9721      SBIW	R28,1
(0199) 
(0200) /************写主存储器************/
(0201) void WriteMainMemory(uchar Address,uchar Data)
(0202) {Command(0x38,Address,Data);
    0169 8368      STD	Y+0,R22
    016A 2F24      MOV	R18,R20
    016B E308      LDI	R16,0x38
    016C DFBA      RCALL	_Command
(0203)  Process();
    016D DF9C      RCALL	_Process
(0204) }
    016E 9621      ADIW	R28,1
    016F D489      RCALL	pop_gset2
    0170 9508      RET
_WriteProtectMemory:
  Data                 --> R22
  Address              --> R20
    0171 D4A4      RCALL	push_gset2
    0172 2F62      MOV	R22,R18
    0173 2F40      MOV	R20,R16
    0174 9721      SBIW	R28,1
(0205) 
(0206) /**************写保护存储器**********/
(0207) void WriteProtectMemory(uchar Address,uchar Data)
(0208) {Command(0x3c,Address,Data);
    0175 8368      STD	Y+0,R22
    0176 2F24      MOV	R18,R20
    0177 E30C      LDI	R16,0x3C
    0178 DFAE      RCALL	_Command
(0209)  Process();
    0179 DF90      RCALL	_Process
(0210) }
    017A 9621      ADIW	R28,1
    017B D47D      RCALL	pop_gset2
    017C 9508      RET
_ReadSafeMemory:
  i                    --> R20
  p                    --> R22
    017D D498      RCALL	push_gset2
    017E 2F60      MOV	R22,R16
    017F 2F71      MOV	R23,R17
    0180 9721      SBIW	R28,1
(0211) 
(0212) /**************读安全存储器************/
(0213) void ReadSafeMemory(uchar *p)
(0214) {uchar i;
(0215)  Command(0x31,0xff,0xff);
    0181 EF8F      LDI	R24,0xFF
    0182 8388      STD	Y+0,R24
    0183 EF2F      LDI	R18,0xFF
    0184 E301      LDI	R16,0x31
    0185 DFA1      RCALL	_Command
(0216)  for(i=0;i<4;i++)
    0186 2744      CLR	R20
    0187 C007      RJMP	0x018F
(0217)  	{*p=ReceiveData();
    0188 DEF5      RCALL	_ReceiveData
    0189 2FE6      MOV	R30,R22
    018A 2FF7      MOV	R31,R23
    018B 8300      STD	Z+0,R16
(0218) 	 p++;}
    018C 5F6F      SUBI	R22,0xFF
    018D 4F7F      SBCI	R23,0xFF
    018E 9543      INC	R20
    018F 3044      CPI	R20,4
    0190 F3B8      BCS	0x0188
(0219) }
    0191 9621      ADIW	R28,1
    0192 D466      RCALL	pop_gset2
    0193 9508      RET
_WriteSafeMemory:
  Data                 --> R22
  Address              --> R20
    0194 D481      RCALL	push_gset2
    0195 2F62      MOV	R22,R18
    0196 2F40      MOV	R20,R16
    0197 9721      SBIW	R28,1
(0220) 
(0221) /*************写安全存储器***************/
(0222) void WriteSafeMemory(uchar Address,uchar Data)
(0223) {Command(0x39,Address,Data);//Address=0,1,2,3
    0198 8368      STD	Y+0,R22
    0199 2F24      MOV	R18,R20
    019A E309      LDI	R16,0x39
    019B DF8B      RCALL	_Command
(0224)  Process();
    019C DF6D      RCALL	_Process
(0225) }
    019D 9621      ADIW	R28,1
    019E D45A      RCALL	pop_gset2
    019F 9508      RET
_VerifyPassword:
  temp                 --> Y+1
  i                    --> R20
  p                    --> R22
    01A0 D475      RCALL	push_gset2
    01A1 2F60      MOV	R22,R16
    01A2 2F71      MOV	R23,R17
    01A3 9725      SBIW	R28,5
(0226) 
(0227) /**************校验密码*******************/
(0228) uchar VerifyPassword(uchar *p)
(0229) {uchar temp[4];//暂存4字节保护密码;
(0230)  uchar i;
(0231)  ReadSafeMemory(temp);//读安全代码以取得错误计数器
    01A4 2F0C      MOV	R16,R28
    01A5 2F1D      MOV	R17,R29
    01A6 5F0F      SUBI	R16,0xFF
    01A7 4F1F      SBCI	R17,0xFF
    01A8 DFD4      RCALL	_ReadSafeMemory
(0232)  if((temp[0]&0x07)!=0)
    01A9 8189      LDD	R24,Y+1
    01AA 7087      ANDI	R24,7
    01AB F179      BEQ	0x01DB
(0233)  	{if((temp[0]&0x07)==0x07)  i=0x06;
    01AC 8189      LDD	R24,Y+1
    01AD 7087      ANDI	R24,7
    01AE 3087      CPI	R24,7
    01AF F409      BNE	0x01B1
    01B0 E046      LDI	R20,6
(0234) 	 if((temp[0]&0x07)==0x06)  i=0x04;
    01B1 8189      LDD	R24,Y+1
    01B2 7087      ANDI	R24,7
    01B3 3086      CPI	R24,6
    01B4 F409      BNE	0x01B6
    01B5 E044      LDI	R20,4
(0235)      if((temp[0]&0x07)==0x04)  i=0x00;
    01B6 8189      LDD	R24,Y+1
    01B7 7087      ANDI	R24,7
    01B8 3084      CPI	R24,4
    01B9 F409      BNE	0x01BB
    01BA 2744      CLR	R20
(0236) 	 WriteSafeMemory(0,i);
    01BB 2F24      MOV	R18,R20
    01BC 2700      CLR	R16
    01BD DFD6      RCALL	_WriteSafeMemory
(0237) 	 for(i=1;i<4;i++,p++)
    01BE E041      LDI	R20,1
    01BF C00B      RJMP	0x01CB
(0238) 	 	{Command(0x33,i,*p);
    01C0 2FE6      MOV	R30,R22
    01C1 2FF7      MOV	R31,R23
    01C2 8020      LDD	R2,Z+0
    01C3 8228      STD	Y+0,R2
    01C4 2F24      MOV	R18,R20
    01C5 E303      LDI	R16,0x33
    01C6 DF60      RCALL	_Command
(0239) 		 Process();}
    01C7 DF42      RCALL	_Process
    01C8 9543      INC	R20
    01C9 5F6F      SUBI	R22,0xFF
    01CA 4F7F      SBCI	R23,0xFF
    01CB 3044      CPI	R20,4
    01CC F398      BCS	0x01C0
(0240)      WriteSafeMemory(0,0xff);
    01CD EF2F      LDI	R18,0xFF
    01CE 2700      CLR	R16
    01CF DFC4      RCALL	_WriteSafeMemory
(0241) 	 ReadSafeMemory(temp);
    01D0 2F0C      MOV	R16,R28
    01D1 2F1D      MOV	R17,R29
    01D2 5F0F      SUBI	R16,0xFF
    01D3 4F1F      SBCI	R17,0xFF
    01D4 DFA8      RCALL	_ReadSafeMemory
(0242) 	 if((temp[0]&0x07)==0x07) return(0x1);
    01D5 8189      LDD	R24,Y+1
    01D6 7087      ANDI	R24,7
    01D7 3087      CPI	R24,7
    01D8 F411      BNE	0x01DB
    01D9 E001      LDI	R16,1
    01DA C001      RJMP	0x01DC
(0243) 	 
(0244)  }
(0245)  return(0);
    01DB 2700      CLR	R16
    01DC 9625      ADIW	R28,5
    01DD D41B      RCALL	pop_gset2
    01DE 9508      RET
_Change:
  temp                 --> R20
  i                    --> R22
  N                    --> R10
  Destination          --> R18
  Source               --> R16
    01DF D439      RCALL	push_gset3
    01E0 80AE      LDD	R10,Y+6
(0246) }
(0247) //*************SLE4442函数结束*****************//
(0248) 
(0249) //*************数据变换**********//
(0250) void Change(uchar *Source,uchar *Destination,uchar N)
(0251) {uchar i,temp;
(0252)  for(i=0;i<N;i++)
    01E1 2766      CLR	R22
    01E2 C017      RJMP	0x01FA
(0253)  {temp=Source[i];
    01E3 2FE6      MOV	R30,R22
    01E4 27FF      CLR	R31
    01E5 0FE0      ADD	R30,R16
    01E6 1FF1      ADC	R31,R17
    01E7 8140      LDD	R20,Z+0
(0254)   Destination[i]=temp>>4;
    01E8 2FE6      MOV	R30,R22
    01E9 27FF      CLR	R31
    01EA 0FE2      ADD	R30,R18
    01EB 1FF3      ADC	R31,R19
    01EC 2F84      MOV	R24,R20
    01ED 9582      SWAP	R24
    01EE 708F      ANDI	R24,0xF
    01EF 8380      STD	Z+0,R24
(0255)   Destination[2*i+1]=temp&0x0f;}
    01F0 2FE6      MOV	R30,R22
    01F1 27FF      CLR	R31
    01F2 0FEE      LSL	R30
    01F3 1FFF      ROL	R31
    01F4 0FE2      ADD	R30,R18
    01F5 1FF3      ADC	R31,R19
    01F6 2F84      MOV	R24,R20
    01F7 708F      ANDI	R24,0xF
    01F8 8381      STD	Z+1,R24
    01F9 9563      INC	R22
    01FA 156A      CP	R22,R10
    01FB F338      BCS	0x01E3
(0256) }
    01FC D3FE      RCALL	pop_gset3
    01FD 9508      RET
_Buzzle_Password:
  i                    --> R20
    01FE D400      RCALL	push_gset1
(0257) 
(0258) //***********密码错误报警***********************//
(0259) void Buzzle_Password(void)
(0260) {uchar i;
(0261)  for(i=0;i<2;i++)
    01FF 2744      CLR	R20
    0200 C00B      RJMP	0x020C
(0262) 	{Voice(0);
    0201 2700      CLR	R16
    0202 DE3D      RCALL	_Voice
(0263)      DelayMs(1000);

⌨️ 快捷键说明

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