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

📄 mudle1302.lst

📁 mega8515通过的DS1302芯片使用程序
💻 LST
字号:
__text_start:
__start:
    0011 E5CF      LDI	R28,0x5F
    0012 E0D2      LDI	R29,2
    0013 BFCD      OUT	0x3D,R28
    0014 BFDE      OUT	0x3E,R29
    0015 51C0      SUBI	R28,0x10
    0016 40D0      SBCI	R29,0
    0017 EA0A      LDI	R16,0xAA
    0018 8308      STD	Y+0,R16
    0019 2400      CLR	R0
    001A E6E0      LDI	R30,0x60
    001B E0F0      LDI	R31,0
    001C E010      LDI	R17,0
    001D 36E0      CPI	R30,0x60
    001E 07F1      CPC	R31,R17
    001F F011      BEQ	0x0022
    0020 9201      ST	R0,Z+
    0021 CFFB      RJMP	0x001D
    0022 8300      STD	Z+0,R16
    0023 E2E2      LDI	R30,0x22
    0024 E0F0      LDI	R31,0
    0025 E6A0      LDI	R26,0x60
    0026 E0B0      LDI	R27,0
    0027 E010      LDI	R17,0
    0028 32E2      CPI	R30,0x22
    0029 07F1      CPC	R31,R17
    002A F021      BEQ	0x002F
    002B 95C8      LPM
    002C 9631      ADIW	R30,1
    002D 920D      ST	R0,X+
    002E CFF9      RJMP	0x0028
    002F D088      RCALL	_main
_exit:
    0030 CFFF      RJMP	_exit
FILE: mudle1302.c
(0001) #include "ds1302.h"
(0002) 
(0003) 
(0004) void Delayus(uchar i)
(0005)  {
(0006)   while(--i);
_Delayus:
  i                    --> R16
    0031 2F80      MOV	R24,R16
    0032 5081      SUBI	R24,1
    0033 2F08      MOV	R16,R24
    0034 2388      TST	R24
    0035 F7D9      BNE	0x0031
    0036 9508      RET
_Delayms:
  i                    --> R20
    0037 D08D      RCALL	push_gset1
    0038 01A8      MOVW	R20,R16
(0007)   }
(0008) void Delayms(uint i)
(0009)  {
    0039 C002      RJMP	0x003C
(0010)   while(i--)
(0011)   {
(0012)   	Delayus(125);
    003A E70D      LDI	R16,0x7D
    003B DFF5      RCALL	_Delayus
    003C 011A      MOVW	R2,R20
    003D 5041      SUBI	R20,1
    003E 4050      SBCI	R21,0
    003F 2022      TST	R2
    0040 F7C9      BNE	0x003A
    0041 2033      TST	R3
    0042 F7B9      BNE	0x003A
    0043 D084      RCALL	pop_gset1
    0044 9508      RET
(0013)   }
(0014)  } 
(0015)   
(0016)   
(0017) 
(0018) 
(0019) uchar ReadSec(void)    			
(0020) {
(0021)     return ReadRTC_Byte(0x81);
_ReadSec:
    0045 E801      LDI	R16,0x81
    0046 E010      LDI	R17,0
    0047 D024      RCALL	_ReadRTC_Byte
    0048 9508      RET
(0022) }
(0023) uchar ReadMin(void)    		
(0024) {
(0025)     return ReadRTC_Byte(0x83);
_ReadMin:
    0049 E803      LDI	R16,0x83
    004A E010      LDI	R17,0
    004B D020      RCALL	_ReadRTC_Byte
    004C 9508      RET
(0026) }
(0027) uchar ReadHour(void)
(0028) {
(0029)    return ReadRTC_Byte(0x85);
_ReadHour:
    004D E805      LDI	R16,0x85
    004E E010      LDI	R17,0
    004F D01C      RCALL	_ReadRTC_Byte
    0050 9508      RET
_WriteSec:
  number               --> R20
    0051 D073      RCALL	push_gset1
    0052 2F40      MOV	R20,R16
(0030) }
(0031) 
(0032) 
(0033) 
(0034) void WriteSec(uchar number)    	
(0035) {
(0036)     WriteRTC_Byte(0x80,number);
    0053 2F24      MOV	R18,R20
    0054 2733      CLR	R19
    0055 E800      LDI	R16,0x80
    0056 E010      LDI	R17,0
    0057 D023      RCALL	_WriteRTC_Byte
    0058 D06F      RCALL	pop_gset1
    0059 9508      RET
_WriteMin:
  number               --> R20
    005A D06A      RCALL	push_gset1
    005B 2F40      MOV	R20,R16
(0037) }
(0038) void WriteMin(uchar number)    		
(0039) {
(0040)     WriteRTC_Byte(0x82,number);
    005C 2F24      MOV	R18,R20
    005D 2733      CLR	R19
    005E E802      LDI	R16,0x82
    005F E010      LDI	R17,0
    0060 D01A      RCALL	_WriteRTC_Byte
    0061 D066      RCALL	pop_gset1
    0062 9508      RET
_WriteHour:
  number               --> R20
    0063 D061      RCALL	push_gset1
    0064 2F40      MOV	R20,R16
(0041) }
(0042) void WriteHour(uchar number)    		//向DS1302中写入分字节
(0043) {
(0044)     WriteRTC_Byte(0x84,number);
    0065 2F24      MOV	R18,R20
    0066 2733      CLR	R19
    0067 E804      LDI	R16,0x84
    0068 E010      LDI	R17,0
    0069 D011      RCALL	_WriteRTC_Byte
    006A D05D      RCALL	pop_gset1
    006B 9508      RET
_ReadRTC_Byte:
  redata               --> R20
  address              --> R20
    006C D058      RCALL	push_gset1
    006D 2F40      MOV	R20,R16
(0045) }
(0046) 
(0047) 
(0048) 
(0049) 
(0050) uint ReadRTC_Byte(uchar address)    			
(0051) {
(0052)     unsigned char  redata;
(0053) 
(0054) 	Clr_ds1302_rst;//ds1302_rst = 0; 			
    006E 98AB      CBI	0x15,3
(0055)     Clr_ds1302_clk;//ds1302_clk = 0; 				
    006F 98A9      CBI	0x15,1
(0056)     Set_ds1302_rst;//ds1302_rst = 1;				
    0070 9AAB      SBI	0x15,3
(0057)     Write_bit(address);				
    0071 2F04      MOV	R16,R20
    0072 2711      CLR	R17
    0073 D017      RCALL	_Write_bit
(0058) 	redata=Read_bit();			
    0074 D02A      RCALL	_Read_bit
    0075 2F40      MOV	R20,R16
(0059) 	Clr_ds1302_rst;//ds1302_rst = 0;
    0076 98AB      CBI	0x15,3
(0060) 	Set_ds1302_clk;//ds1302_clk = 1; 
    0077 9AA9      SBI	0x15,1
(0061)    return redata;				
    0078 2711      CLR	R17
    0079 D04E      RCALL	pop_gset1
    007A 9508      RET
_WriteRTC_Byte:
  number               --> R20
  address              --> R22
    007B D047      RCALL	push_gset2
    007C 2F42      MOV	R20,R18
    007D 2F60      MOV	R22,R16
(0062) }
(0063) 
(0064) void WriteRTC_Byte(uchar address,uchar number)   
(0065) {
(0066)     Clr_ds1302_clk;//ds1302_clk = 0;
    007E 98A9      CBI	0x15,1
(0067)     Clr_ds1302_rst;// ds1302_rst = 0;
    007F 98AB      CBI	0x15,3
(0068) 	Set_ds1302_rst;//ds1302_rst = 1;  
    0080 9AAB      SBI	0x15,3
(0069)     Write_bit(address);				 
    0081 2F06      MOV	R16,R22
    0082 2711      CLR	R17
    0083 D007      RCALL	_Write_bit
(0070) 	Write_bit(number);				
    0084 2F04      MOV	R16,R20
    0085 2711      CLR	R17
    0086 D004      RCALL	_Write_bit
(0071)     Clr_ds1302_rst;//ds1302_rst = 0; 
    0087 98AB      CBI	0x15,3
(0072) 	Set_ds1302_clk;//ds1302_clk = 1;
    0088 9AA9      SBI	0x15,1
    0089 D02F      RCALL	pop_gset2
    008A 9508      RET
_Write_bit:
  i                    --> R20
  addr                 --> R16
    008B D039      RCALL	push_gset1
(0073) }
(0074) 				
(0075) 
(0076) 
(0077) 
(0078) 
(0079) void Write_bit (uchar addr)				
(0080) {
(0081)   uchar i=0;
    008C 2744      CLR	R20
(0082)  for(i=8;i>0;i--){
    008D E048      LDI	R20,0x8
    008E C00B      RJMP	0x009A
(0083) 	if((addr&0x01)==0x01)
    008F 2F80      MOV	R24,R16
    0090 7081      ANDI	R24,1
    0091 3081      CPI	R24,1
    0092 F411      BNE	0x0095
(0084) 	   Set_ds1302_data;//ds1302_dat = 1;
    0093 9AAA      SBI	0x15,2
    0094 C001      RJMP	0x0096
(0085)     else
(0086) 		Clr_ds1302_data;//ds1302_dat = 0;
    0095 98AA      CBI	0x15,2
(0087)     Set_ds1302_clk;//ds1302_clk=1;
    0096 9AA9      SBI	0x15,1
(0088) 	Clr_ds1302_clk;//ds1302_clk=0;
    0097 98A9      CBI	0x15,1
(0089) 	addr>>=1;
    0098 9506      LSR	R16
    0099 954A      DEC	R20
    009A 2422      CLR	R2
    009B 1624      CP	R2,R20
    009C F390      BCS	0x008F
    009D D02A      RCALL	pop_gset1
    009E 9508      RET
_Read_bit:
  data_r               --> R20
  num                  --> R22
  i                    --> R10
    009F D021      RCALL	push_gset3
(0090)  }
(0091) }
(0092) 
(0093) uchar Read_bit ()				
(0094) {
(0095) uchar i=0,num;
    00A0 24AA      CLR	R10
(0096) uchar data_r=0;
    00A1 2744      CLR	R20
(0097) Delayus(2);
    00A2 E002      LDI	R16,2
    00A3 DF8D      RCALL	_Delayus
(0098)  //ds1302_dat = 1;
(0099)  Set_ds1302_data;
    00A4 9AAA      SBI	0x15,2
(0100)  data_in;
    00A5 98A2      CBI	0x14,2
(0101)   for(i=8;i>0;i--){
    00A6 E088      LDI	R24,0x8
    00A7 2EA8      MOV	R10,R24
    00A8 C009      RJMP	0x00B2
(0102) 	data_r>>=1;
    00A9 9546      LSR	R20
(0103) 	
(0104) 	num=PINC&0x04;
    00AA B363      IN	R22,0x13
    00AB 7064      ANDI	R22,4
(0105) 	if(num == 1)
    00AC 3061      CPI	R22,1
    00AD F409      BNE	0x00AF
(0106) 	{
(0107) 		data_r|=0x80;
    00AE 6840      ORI	R20,0x80
(0108) 	}	
(0109) 	Set_ds1302_clk;//ds1302_clk = 1;	
    00AF 9AA9      SBI	0x15,1
(0110) 	Clr_ds1302_clk;//ds1302_clk = 0; 
    00B0 98A9      CBI	0x15,1
    00B1 94AA      DEC	R10
    00B2 2422      CLR	R2
    00B3 142A      CP	R2,R10
    00B4 F3A0      BCS	0x00A9
(0111)   }
(0112) return data_r;
    00B5 2F04      MOV	R16,R20
    00B6 D004      RCALL	pop_gset3
    00B7 9508      RET
(0113) }
(0114) 
(0115) main()
(0116) {}FILE: <library>
_main:
    00B8 9508      RET
pop_gset2:
    00B9 E0E2      LDI	R30,2
    00BA C00E      RJMP	pop
pop_gset3:
    00BB E0E4      LDI	R30,4
    00BC C00C      RJMP	pop
push_gset5:
    00BD 92FA      ST	R15,-Y
    00BE 92EA      ST	R14,-Y
push_gset4:
    00BF 92DA      ST	R13,-Y
    00C0 92CA      ST	R12,-Y
push_gset3:
    00C1 92BA      ST	R11,-Y
    00C2 92AA      ST	R10,-Y
push_gset2:
    00C3 937A      ST	R23,-Y
    00C4 936A      ST	R22,-Y
push_gset1:
    00C5 935A      ST	R21,-Y
    00C6 934A      ST	R20,-Y
    00C7 9508      RET
pop_gset1:
    00C8 E0E1      LDI	R30,1
pop:
    00C9 9149      LD	R20,Y+
    00CA 9159      LD	R21,Y+
    00CB FDE0      SBRC	R30,0
    00CC 9508      RET
    00CD 9169      LD	R22,Y+
    00CE 9179      LD	R23,Y+
    00CF FDE1      SBRC	R30,1
    00D0 9508      RET
    00D1 90A9      LD	R10,Y+
    00D2 90B9      LD	R11,Y+
    00D3 FDE2      SBRC	R30,2
    00D4 9508      RET
    00D5 90C9      LD	R12,Y+
    00D6 90D9      LD	R13,Y+
    00D7 FDE3      SBRC	R30,3
    00D8 9508      RET
    00D9 90E9      LD	R14,Y+
    00DA 90F9      LD	R15,Y+
    00DB 9508      RET

⌨️ 快捷键说明

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