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

📄 1302.lst

📁 mega8515通过的DS1302芯片使用程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0047) 		
(0048) 	
(0049) 	    update_display_dp(num);
    012C 018A      MOVW	R16,R20
    012D DF0A      RCALL	_update_display_dp
    012E CFA7      RJMP	0x00D6
    012F 9508      RET
FILE: D:\AVR实验\DS1302时间芯片\mudle1302.c
(0001) #include "ds1302.h"
(0002) 
(0003) 
(0004) void Delayus(uchar i)
(0005)  {
(0006)   while(--i);
_Delayus:
  i                    --> R16
    0130 2F80      MOV	R24,R16
    0131 5081      SUBI	R24,1
    0132 2F08      MOV	R16,R24
    0133 2388      TST	R24
    0134 F7D9      BNE	0x0130
    0135 9508      RET
(0007)   }
(0008)  
(0009)   
(0010) 
(0011) 
(0012) uchar ReadSec(void)    			
(0013) {
(0014)     return ReadRTC_Byte(0x81);
_ReadSec:
    0136 E801      LDI	R16,0x81
    0137 E010      LDI	R17,0
    0138 D024      RCALL	_ReadRTC_Byte
    0139 9508      RET
(0015) }
(0016) uchar ReadMin(void)    		
(0017) {
(0018)     return ReadRTC_Byte(0x83);
_ReadMin:
    013A E803      LDI	R16,0x83
    013B E010      LDI	R17,0
    013C D020      RCALL	_ReadRTC_Byte
    013D 9508      RET
(0019) }
(0020) uchar ReadHour(void)
(0021) {
(0022)    return ReadRTC_Byte(0x85);
_ReadHour:
    013E E805      LDI	R16,0x85
    013F E010      LDI	R17,0
    0140 D01C      RCALL	_ReadRTC_Byte
    0141 9508      RET
_WriteSec:
  number               --> R20
    0142 D09A      RCALL	push_gset1
    0143 2F40      MOV	R20,R16
(0023) }
(0024) 
(0025) 
(0026) 
(0027) void WriteSec(uchar number)    	
(0028) {
(0029)     WriteRTC_Byte(0x80,number);
    0144 2F24      MOV	R18,R20
    0145 2733      CLR	R19
    0146 E800      LDI	R16,0x80
    0147 E010      LDI	R17,0
    0148 D023      RCALL	_WriteRTC_Byte
    0149 D096      RCALL	pop_gset1
    014A 9508      RET
_WriteMin:
  number               --> R20
    014B D091      RCALL	push_gset1
    014C 2F40      MOV	R20,R16
(0030) }
(0031) void WriteMin(uchar number)    		
(0032) {
(0033)     WriteRTC_Byte(0x82,number);
    014D 2F24      MOV	R18,R20
    014E 2733      CLR	R19
    014F E802      LDI	R16,0x82
    0150 E010      LDI	R17,0
    0151 D01A      RCALL	_WriteRTC_Byte
    0152 D08D      RCALL	pop_gset1
    0153 9508      RET
_WriteHour:
  number               --> R20
    0154 D088      RCALL	push_gset1
    0155 2F40      MOV	R20,R16
(0034) }
(0035) void WriteHour(uchar number)    		//向DS1302中写入分字节
(0036) {
(0037)     WriteRTC_Byte(0x84,number);
    0156 2F24      MOV	R18,R20
    0157 2733      CLR	R19
    0158 E804      LDI	R16,0x84
    0159 E010      LDI	R17,0
    015A D011      RCALL	_WriteRTC_Byte
    015B D084      RCALL	pop_gset1
    015C 9508      RET
_ReadRTC_Byte:
  redata               --> R20
  address              --> R20
    015D D07F      RCALL	push_gset1
    015E 2F40      MOV	R20,R16
(0038) }
(0039) 
(0040) 
(0041) 
(0042) 
(0043) uint ReadRTC_Byte(uchar address)    			
(0044) {
(0045)     unsigned char  redata;
(0046) 
(0047) 	Clr_ds1302_rst;//ds1302_rst = 0; 			
    015F 98AB      CBI	0x15,3
(0048)     Clr_ds1302_clk;//ds1302_clk = 0; 				
    0160 98A9      CBI	0x15,1
(0049)     Set_ds1302_rst;//ds1302_rst = 1;				
    0161 9AAB      SBI	0x15,3
(0050)     Write_bit(address);				
    0162 2F04      MOV	R16,R20
    0163 2711      CLR	R17
    0164 D017      RCALL	_Write_bit
(0051) 	redata=Read_bit();			
    0165 D02A      RCALL	_Read_bit
    0166 2F40      MOV	R20,R16
(0052) 	Clr_ds1302_rst;//ds1302_rst = 0;
    0167 98AB      CBI	0x15,3
(0053) 	Set_ds1302_clk;//ds1302_clk = 1; 
    0168 9AA9      SBI	0x15,1
(0054)    return redata;				
    0169 2711      CLR	R17
    016A D075      RCALL	pop_gset1
    016B 9508      RET
_WriteRTC_Byte:
  number               --> R20
  address              --> R22
    016C D06E      RCALL	push_gset2
    016D 2F42      MOV	R20,R18
    016E 2F60      MOV	R22,R16
(0055) }
(0056) 
(0057) void WriteRTC_Byte(uchar address,uchar number)   
(0058) {
(0059)     Clr_ds1302_clk;//ds1302_clk = 0;
    016F 98A9      CBI	0x15,1
(0060)     Clr_ds1302_rst;// ds1302_rst = 0;
    0170 98AB      CBI	0x15,3
(0061) 	Set_ds1302_rst;//ds1302_rst = 1;  
    0171 9AAB      SBI	0x15,3
(0062)     Write_bit(address);				 
    0172 2F06      MOV	R16,R22
    0173 2711      CLR	R17
    0174 D007      RCALL	_Write_bit
(0063) 	Write_bit(number);				
    0175 2F04      MOV	R16,R20
    0176 2711      CLR	R17
    0177 D004      RCALL	_Write_bit
(0064)     Clr_ds1302_rst;//ds1302_rst = 0; 
    0178 98AB      CBI	0x15,3
(0065) 	Set_ds1302_clk;//ds1302_clk = 1;
    0179 9AA9      SBI	0x15,1
    017A D056      RCALL	pop_gset2
    017B 9508      RET
_Write_bit:
  i                    --> R20
  addr                 --> R16
    017C D060      RCALL	push_gset1
(0066) }
(0067) 				
(0068) 
(0069) 
(0070) 
(0071) 
(0072) void Write_bit (uchar addr)				
(0073) {
(0074)   uchar i=0;
    017D 2744      CLR	R20
(0075)  for(i=8;i>0;i--){
    017E E048      LDI	R20,0x8
    017F C00B      RJMP	0x018B
(0076) 	if((addr&0x01)==0x01)
    0180 2F80      MOV	R24,R16
    0181 7081      ANDI	R24,1
    0182 3081      CPI	R24,1
    0183 F411      BNE	0x0186
(0077) 	   Set_ds1302_data;//ds1302_dat = 1;
    0184 9AAA      SBI	0x15,2
    0185 C001      RJMP	0x0187
(0078)     else
(0079) 		Clr_ds1302_data;//ds1302_dat = 0;
    0186 98AA      CBI	0x15,2
(0080)     Set_ds1302_clk;//ds1302_clk=1;
    0187 9AA9      SBI	0x15,1
(0081) 	Clr_ds1302_clk;//ds1302_clk=0;
    0188 98A9      CBI	0x15,1
(0082) 	addr>>=1;
    0189 9506      LSR	R16
    018A 954A      DEC	R20
    018B 2422      CLR	R2
    018C 1624      CP	R2,R20
    018D F390      BCS	0x0180
    018E D051      RCALL	pop_gset1
    018F 9508      RET
_Read_bit:
  num                  --> Y+1
  data_r               --> R20
  i                    --> R22
    0190 D04A      RCALL	push_gset2
(0083)  }
(0084) }
(0085) 
(0086) uchar Read_bit ()				
(0087) {
(0088)   uchar i=0,num;
    0191 2766      CLR	R22
(0089)   uchar data_r=0;
    0192 2744      CLR	R20
(0090)   Delayus(15);//19us  delay
    0193 E00F      LDI	R16,0xF
    0194 DF9B      RCALL	_Delayus
(0091)   data_in;
    0195 98A2      CBI	0x14,2
(0092) 
(0093) 
(0094)   for(i=8;i>0;i--){
    0196 E068      LDI	R22,0x8
    0197 C007      RJMP	0x019F
(0095) 	data_r>>=1;
    0198 9546      LSR	R20
(0096) 	
(0097) 	
(0098) 	if(data_in_read)
    0199 9B9A      SBIS	0x13,2
    019A C001      RJMP	0x019C
(0099) 	{
(0100) 		data_r|=0x80;
    019B 6840      ORI	R20,0x80
(0101) 	}	
(0102) 	Set_ds1302_clk;//ds1302_clk = 1;	
    019C 9AA9      SBI	0x15,1
(0103) 	Clr_ds1302_clk;//ds1302_clk = 0; 
    019D 98A9      CBI	0x15,1
    019E 956A      DEC	R22
    019F 2422      CLR	R2
    01A0 1626      CP	R2,R22
    01A1 F3B0      BCS	0x0198
(0104)   }
(0105) return data_r;
FILE: <library>
    01A2 2F04      MOV	R16,R20
    01A3 D02D      RCALL	pop_gset2
    01A4 9508      RET
mod16u:
    01A5 9468      BSET	6
    01A6 C001      RJMP	xdiv16u
div16u:
    01A7 94E8      BCLR	6
xdiv16u:
    01A8 92EA      ST	R14,-Y
    01A9 92FA      ST	R15,-Y
    01AA 938A      ST	R24,-Y
    01AB 24EE      CLR	R14
    01AC 24FF      CLR	R15
    01AD E180      LDI	R24,0x10
    01AE 0F00      LSL	R16
    01AF 1F11      ROL	R17
    01B0 1CEE      ROL	R14
    01B1 1CFF      ROL	R15
    01B2 16E2      CP	R14,R18
    01B3 06F3      CPC	R15,R19
    01B4 F018      BCS	0x01B8
    01B5 1AE2      SUB	R14,R18
    01B6 0AF3      SBC	R15,R19
    01B7 9503      INC	R16
    01B8 958A      DEC	R24
    01B9 F7A1      BNE	0x01AE
    01BA F416      BRTC	0x01BD
    01BB 2D0E      MOV	R16,R14
    01BC 2D1F      MOV	R17,R15
    01BD 9189      LD	R24,Y+
    01BE 90F9      LD	R15,Y+
    01BF 90E9      LD	R14,Y+
    01C0 9508      RET
empy16s:
    01C1 920A      ST	R0,-Y
    01C2 921A      ST	R1,-Y
    01C3 938A      ST	R24,-Y
    01C4 939A      ST	R25,-Y
    01C5 9F02      MUL	R16,R18
    01C6 01C0      MOVW	R24,R0
    01C7 9F12      MUL	R17,R18
    01C8 0D90      ADD	R25,R0
    01C9 9F03      MUL	R16,R19
    01CA 0D90      ADD	R25,R0
    01CB 018C      MOVW	R16,R24
    01CC 9199      LD	R25,Y+
    01CD 9189      LD	R24,Y+
    01CE 9019      LD	R1,Y+
    01CF 9009      LD	R0,Y+
    01D0 9508      RET
pop_gset2:
    01D1 E0E2      LDI	R30,2
    01D2 C00E      RJMP	pop
pop_gset4:
    01D3 E0E8      LDI	R30,0x8
    01D4 C00C      RJMP	pop
push_gset5:
    01D5 92FA      ST	R15,-Y
    01D6 92EA      ST	R14,-Y
push_gset4:
    01D7 92DA      ST	R13,-Y
    01D8 92CA      ST	R12,-Y
push_gset3:
    01D9 92BA      ST	R11,-Y
    01DA 92AA      ST	R10,-Y
push_gset2:
    01DB 937A      ST	R23,-Y
    01DC 936A      ST	R22,-Y
push_gset1:
    01DD 935A      ST	R21,-Y
    01DE 934A      ST	R20,-Y
    01DF 9508      RET
pop_gset1:
    01E0 E0E1      LDI	R30,1
pop:
    01E1 9149      LD	R20,Y+
    01E2 9159      LD	R21,Y+
    01E3 FDE0      SBRC	R30,0
    01E4 9508      RET
    01E5 9169      LD	R22,Y+
    01E6 9179      LD	R23,Y+
    01E7 FDE1      SBRC	R30,1
    01E8 9508      RET
    01E9 90A9      LD	R10,Y+
    01EA 90B9      LD	R11,Y+
    01EB FDE2      SBRC	R30,2
    01EC 9508      RET
    01ED 90C9      LD	R12,Y+
    01EE 90D9      LD	R13,Y+
    01EF FDE3      SBRC	R30,3
    01F0 9508      RET
    01F1 90E9      LD	R14,Y+
    01F2 90F9      LD	R15,Y+
    01F3 9508      RET

⌨️ 快捷键说明

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