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

📄 ds1302.lst

📁 通过编程可以是实现对DS1302提供相应的时钟信号
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0118) 	/*输出数据:temp*/
(0119) 	IO_IN;
    00A5 98A3      CBI	0x14,3
(0120) 	for (i = 0; i < 8; i ++) {
    00A6 2766      CLR	R22
    00A7 C009      RJMP	0x00B1
(0121) 		temp = temp >> 1;
    00A8 9546      LSR	R20
(0122) 		if (IO_R) {
    00A9 9B9B      SBIS	0x13,3
    00AA C002      RJMP	0x00AD
(0123) 			temp |= 0x80;
    00AB 6840      ORI	R20,0x80
(0124) 			}
    00AC C001      RJMP	0x00AE
(0125) 		else {
(0126) 			temp &= 0x7F;
    00AD 774F      ANDI	R20,0x7F
(0127) 			}
(0128) 		SCK_SET;
    00AE 9AAA      SBI	0x15,2
(0129) 		SCK_CLR;
    00AF 98AA      CBI	0x15,2
    00B0 9563      INC	R22
    00B1 3068      CPI	R22,0x8
    00B2 F3A8      BCS	0x00A8
(0130) 		}
(0131) 	
(0132) 	RST_CLR;					/*停止DS1302总线*/
    00B3 98AC      CBI	0x15,4
(0133) 	return temp;
    00B4 2F04      MOV	R16,R20
    00B5 940E0128  CALL	pop_gset2
    00B7 9508      RET
(0134) }
(0135) 
(0136) /*向DS302写入时钟数据*/
(0137) void ds1302_write_time(void) {
(0138) 
(0139) 	ds1302_write_byte(ds1302_control_add,0x00);			//关闭写保护 
_ds1302_write_time:
    00B8 2722      CLR	R18
    00B9 E80E      LDI	R16,0x8E
    00BA DFB4      RCALL	_ds1302_write_byte
(0140) 	ds1302_write_byte(ds1302_sec_add,0x80);				//暂停 
    00BB E820      LDI	R18,0x80
    00BC E800      LDI	R16,0x80
    00BD DFB1      RCALL	_ds1302_write_byte
(0141) 	//ds1302_write_byte(ds1302_charger_add,0xa9);			//涓流充电 
(0142) 	ds1302_write_byte(ds1302_year_add,time_buf[1]);		//年 
    00BE 91200061  LDS	R18,time_buf+1
    00C0 E80C      LDI	R16,0x8C
    00C1 DFAD      RCALL	_ds1302_write_byte
(0143) 	ds1302_write_byte(ds1302_month_add,time_buf[2]);	//月 
    00C2 91200062  LDS	R18,time_buf+2
    00C4 E808      LDI	R16,0x88
    00C5 DFA9      RCALL	_ds1302_write_byte
(0144) 	ds1302_write_byte(ds1302_date_add,time_buf[3]);		//日 
    00C6 91200063  LDS	R18,time_buf+3
    00C8 E806      LDI	R16,0x86
    00C9 DFA5      RCALL	_ds1302_write_byte
(0145) 	ds1302_write_byte(ds1302_day_add,time_buf[7]);		//周 
    00CA 91200067  LDS	R18,0x67
    00CC E80A      LDI	R16,0x8A
    00CD DFA1      RCALL	_ds1302_write_byte
(0146) 	ds1302_write_byte(ds1302_hr_add,time_buf[4]);		//时 
    00CE 91200064  LDS	R18,0x64
    00D0 E804      LDI	R16,0x84
    00D1 DF9D      RCALL	_ds1302_write_byte
(0147) 	ds1302_write_byte(ds1302_min_add,time_buf[5]);		//分
    00D2 91200065  LDS	R18,0x65
    00D4 E802      LDI	R16,0x82
    00D5 DF99      RCALL	_ds1302_write_byte
(0148) 	ds1302_write_byte(ds1302_sec_add,time_buf[6]);		//秒
    00D6 91200066  LDS	R18,0x66
    00D8 E800      LDI	R16,0x80
    00D9 DF95      RCALL	_ds1302_write_byte
(0149) 	ds1302_write_byte(ds1302_day_add,time_buf[7]);		//周 
    00DA 91200067  LDS	R18,0x67
    00DC E80A      LDI	R16,0x8A
    00DD DF91      RCALL	_ds1302_write_byte
(0150) 	ds1302_write_byte(ds1302_control_add,0x80);			//打开写保护 
    00DE E820      LDI	R18,0x80
    00DF E80E      LDI	R16,0x8E
    00E0 DF8E      RCALL	_ds1302_write_byte
    00E1 9508      RET
(0151) }
(0152) 
(0153) /*从DS302读出时钟数据*/
(0154) void ds1302_read_time(void)  { 
(0155) 
(0156) 	time_buf[1]=ds1302_read_byte(ds1302_year_add);		//年 
_ds1302_read_time:
    00E2 E80C      LDI	R16,0x8C
    00E3 DFAF      RCALL	_ds1302_read_byte
    00E4 93000061  STS	time_buf+1,R16
(0157) 	time_buf[2]=ds1302_read_byte(ds1302_month_add);		//月 
    00E6 E808      LDI	R16,0x88
    00E7 DFAB      RCALL	_ds1302_read_byte
    00E8 93000062  STS	time_buf+2,R16
(0158) 	time_buf[3]=ds1302_read_byte(ds1302_date_add);		//日 
    00EA E806      LDI	R16,0x86
    00EB DFA7      RCALL	_ds1302_read_byte
    00EC 93000063  STS	time_buf+3,R16
(0159) 	time_buf[4]=ds1302_read_byte(ds1302_hr_add);		//时 
    00EE E804      LDI	R16,0x84
    00EF DFA3      RCALL	_ds1302_read_byte
    00F0 93000064  STS	0x64,R16
(0160) 	time_buf[5]=ds1302_read_byte(ds1302_min_add);		//分 
    00F2 E802      LDI	R16,0x82
    00F3 DF9F      RCALL	_ds1302_read_byte
    00F4 93000065  STS	0x65,R16
(0161) 	time_buf[6]=(ds1302_read_byte(ds1302_sec_add))&0x7F;//秒 
    00F6 E800      LDI	R16,0x80
    00F7 DF9B      RCALL	_ds1302_read_byte
    00F8 2F80      MOV	R24,R16
    00F9 778F      ANDI	R24,0x7F
    00FA 93800066  STS	0x66,R24
(0162) 	time_buf[7]=ds1302_read_byte(ds1302_day_add);		//周 
    00FC E80A      LDI	R16,0x8A
    00FD DF95      RCALL	_ds1302_read_byte
    00FE 93000067  STS	0x67,R16
    0100 9508      RET
(0163) }
(0164) 
(0165) /*DS302初始化函数*/
(0166) void ds1302_init(void) {
(0167) 	
(0168) 	RST_CLR;			/*RST脚置低*/
_ds1302_init:
    0101 98AC      CBI	0x15,4
(0169) 	SCK_CLR;			/*SCK脚置低*/
    0102 98AA      CBI	0x15,2
(0170) 	RST_OUT;			/*RST脚设置为输出*/
    0103 9AA4      SBI	0x14,4
(0171) 	SCK_OUT;			/*SCK脚设置为输出*/
    0104 9AA2      SBI	0x14,2
    0105 9508      RET
FILE: D:\AVR\我的程序\DS1302的时钟实验\main.c
(0001) /***********************************
(0002) *实验目的:熟悉DS1302编程
(0003) *设    计:萧联珠
(0004) *日    期:2007-11-22
(0005) ************************************/
(0006) #include <iom16v.h>
(0007) #include "cfg.h"
(0008) 
(0009) void main()
(0010) {
(0011)  unsigned char i;
(0012)  ds1302_init();
_main:
  i                    --> R20
    0106 DFFA      RCALL	_ds1302_init
(0013)  uart_init();
    0107 DF5C      RCALL	_uart_init
(0014)  delay_ms(1000);
    0108 EE08      LDI	R16,0xE8
    0109 E013      LDI	R17,3
    010A DF44      RCALL	_delay_ms
(0015)  ds1302_write_time();  //写入时间初始值
    010B DFAC      RCALL	_ds1302_write_time
    010C C019      RJMP	0x0126
(0016)  
(0017)  while(1)
(0018)  { 
(0019)    ds1302_read_time(); //读时间值
    010D DFD4      RCALL	_ds1302_read_time
(0020)    delay_ms(100);
    010E E604      LDI	R16,0x64
    010F E010      LDI	R17,0
    0110 DF3E      RCALL	_delay_ms
(0021)    for(i=1;i<7;i++)
    0111 E041      LDI	R20,1
    0112 C00E      RJMP	0x0121
(0022)    {
(0023)      while(!(UCSRA&(1<<UDRE)));  //等待发送寄存器为空  
    0113 9B5D      SBIS	0x0B,5
    0114 CFFE      RJMP	0x0113
(0024) 	 delay_ms(10);
    0115 E00A      LDI	R16,0xA
    0116 E010      LDI	R17,0
    0117 DF37      RCALL	_delay_ms
(0025)      UDR=time_buf[i];   //发送时间数据:年月日周时分秒
    0118 E680      LDI	R24,0x60
    0119 E090      LDI	R25,0
    011A 2FE4      MOV	R30,R20
    011B 27FF      CLR	R31
    011C 0FE8      ADD	R30,R24
    011D 1FF9      ADC	R31,R25
    011E 8020      LDD	R2,Z+0
    011F B82C      OUT	0x0C,R2
    0120 9543      INC	R20
    0121 3047      CPI	R20,7
    0122 F380      BCS	0x0113
(0026)    }
(0027)    delay_ms(100);
FILE: <library>
    0123 E604      LDI	R16,0x64
    0124 E010      LDI	R17,0
    0125 DF29      RCALL	_delay_ms
    0126 CFE6      RJMP	0x010D
    0127 9508      RET
pop_gset2:
    0128 E0E2      LDI	R30,2
    0129 940C0137  JMP	pop
push_gset5:
    012B 92FA      ST	R15,-Y
    012C 92EA      ST	R14,-Y
push_gset4:
    012D 92DA      ST	R13,-Y
    012E 92CA      ST	R12,-Y
push_gset3:
    012F 92BA      ST	R11,-Y
    0130 92AA      ST	R10,-Y
push_gset2:
    0131 937A      ST	R23,-Y
    0132 936A      ST	R22,-Y
push_gset1:
    0133 935A      ST	R21,-Y
    0134 934A      ST	R20,-Y
    0135 9508      RET
pop_gset1:
    0136 E0E1      LDI	R30,1
pop:
    0137 9149      LD	R20,Y+
    0138 9159      LD	R21,Y+
    0139 FDE0      SBRC	R30,0
    013A 9508      RET
    013B 9169      LD	R22,Y+
    013C 9179      LD	R23,Y+
    013D FDE1      SBRC	R30,1
    013E 9508      RET
    013F 90A9      LD	R10,Y+
    0140 90B9      LD	R11,Y+
    0141 FDE2      SBRC	R30,2
    0142 9508      RET
    0143 90C9      LD	R12,Y+
    0144 90D9      LD	R13,Y+
    0145 FDE3      SBRC	R30,3
    0146 9508      RET
    0147 90E9      LD	R14,Y+
    0148 90F9      LD	R15,Y+
    0149 9508      RET

⌨️ 快捷键说明

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