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

📄 ds1302.lst

📁 ATmega16应用例子
💻 LST
📖 第 1 页 / 共 5 页
字号:
    02AF 2F06      MOV	R16,R22
    02B0 DFBB      RCALL	_read
    02B1 01FA      MOVW	R30,R20
    02B2 8302      STD	Z+2,R16
(0279) 	buf[2]=changeHexToInt(buf[2]);
    02B3 01CA      MOVW	R24,R20
    02B4 9602      ADIW	R24,2
    02B5 011C      MOVW	R2,R24
    02B6 01FC      MOVW	R30,R24
    02B7 8040      LDD	R4,Z+0
    02B8 2455      CLR	R5
    02B9 E110      LDI	R17,0x10
    02BA 2D04      MOV	R16,R4
    02BB 940E039F  CALL	mod8u
    02BD 2D84      MOV	R24,R4
    02BE 9582      SWAP	R24
    02BF 708F      ANDI	R24,0xF
    02C0 E09A      LDI	R25,0xA
    02C1 9F98      MUL	R25,R24
    02C2 2C40      MOV	R4,R0
    02C3 0E40      ADD	R4,R16
    02C4 01F1      MOVW	R30,R2
    02C5 8240      STD	Z+0,R4
    02C6 940E03EA  CALL	pop_gset4
    02C8 9508      RET
_DS1302_setTime:
  secondAdr            --> R20
  minuteAdr            --> R10
  hourAdr              --> R14
  second               --> R22
  minute               --> R12
  hour                 --> Y+10
    02C9 940E0329  CALL	push_arg4
    02CB 940E03F0  CALL	push_gset5
    02CD 2EC2      MOV	R12,R18
    02CE 856E      LDD	R22,Y+14
(0280) 
(0281) 	//DS1302_speaTime();
(0282) }
(0283) /*--------------------------------------------------------------------
(0284) 函数名称:DS1302读日期
(0285) 函数功能:
(0286) 注意事项:无
(0287) 提示说明:无
(0288) 输    入:无
(0289) 返    回:无
(0290) --------------------------------------------------------------------*/
(0291) //void DS1302_getDate(void)
(0292) //{
(0293) //
(0294) //}
(0295) /*--------------------------------------------------------------------
(0296) 函数名称:DS1302拆时间
(0297) 函数功能:
(0298) 注意事项:无
(0299) 提示说明:低层将时间拆好,方便上层调用
(0300) 输    入:无
(0301) 返    回:无
(0302) --------------------------------------------------------------------*/
(0303) //void DS1302_speaTime(void)
(0304) //{
(0305) //	speaData(DS1302Second,2);
(0306) //	DS1302SecHi=dataElem[1];
(0307) //	DS1302SecLow=dataElem[0];
(0308) //
(0309) //	speaData(DS1302Minute,2);
(0310) //	DS1302MinHi=dataElem[1];
(0311) //	DS1302MinLow=dataElem[0];
(0312) //
(0313) //	speaData(DS1302Hour,2);
(0314) //	DS1302HourHi=dataElem[1];
(0315) //	DS1302HourLow=dataElem[0];
(0316) //}
(0317) /*--------------------------------------------------------------------
(0318) 函数名称:DS1302拆日期
(0319) 函数功能:
(0320) 注意事项:无
(0321) 提示说明:无
(0322) 输    入:无
(0323) 返    回:无
(0324) --------------------------------------------------------------------*/
(0325) //void DS1302_speaDate(void)
(0326) //{
(0327) //
(0328) //}
(0329) /*--------------------------------------------------------------------
(0330) 函数名称:DS1302设置时间
(0331) 函数功能:
(0332) 注意事项:无
(0333) 提示说明:无
(0334) 输    入:
(0335) 返    回:无
(0336) --------------------------------------------------------------------*/
(0337) void DS1302_setTime(uint8 hour,uint8 minute,uint8 second)
(0338) {
(0339) 	uint8 hourAdr=2,minuteAdr=1,secondAdr=0;
    02CF E082      LDI	R24,2
    02D0 2EE8      MOV	R14,R24
    02D1 24AA      CLR	R10
    02D2 94A3      INC	R10
    02D3 2744      CLR	R20
(0340) 
(0341) 	hour=changeIntToHex(hour);
    02D4 E01A      LDI	R17,0xA
    02D5 850A      LDD	R16,Y+10
    02D6 940E039F  CALL	mod8u
    02D8 2E20      MOV	R2,R16
    02D9 E01A      LDI	R17,0xA
    02DA 850A      LDD	R16,Y+10
    02DB 940E03A1  CALL	div8u
    02DD 2F80      MOV	R24,R16
    02DE 708F      ANDI	R24,0xF
    02DF 9582      SWAP	R24
    02E0 0D82      ADD	R24,R2
    02E1 878A      STD	Y+10,R24
(0342) 	minute=changeIntToHex(minute);
    02E2 E01A      LDI	R17,0xA
    02E3 2D0C      MOV	R16,R12
    02E4 940E039F  CALL	mod8u
    02E6 2E20      MOV	R2,R16
    02E7 E01A      LDI	R17,0xA
    02E8 2D0C      MOV	R16,R12
    02E9 940E03A1  CALL	div8u
    02EB 2F80      MOV	R24,R16
    02EC 708F      ANDI	R24,0xF
    02ED 9582      SWAP	R24
    02EE 2EC8      MOV	R12,R24
    02EF 0CC2      ADD	R12,R2
(0343) 	second=changeIntToHex(second);
    02F0 E01A      LDI	R17,0xA
    02F1 2F06      MOV	R16,R22
    02F2 940E039F  CALL	mod8u
    02F4 2E20      MOV	R2,R16
    02F5 E01A      LDI	R17,0xA
    02F6 2F06      MOV	R16,R22
    02F7 940E03A1  CALL	div8u
    02F9 2F60      MOV	R22,R16
    02FA 706F      ANDI	R22,0xF
    02FB 9562      SWAP	R22
    02FC 0D62      ADD	R22,R2
(0344) 
(0345) 	openWP();
    02FD DF4C      RCALL	_openWP
(0346) 	write(hourAdr,hour);
    02FE 852A      LDD	R18,Y+10
    02FF 2D0E      MOV	R16,R14
    0300 DF57      RCALL	_write
(0347) 	write(minuteAdr,minute);
    0301 2D2C      MOV	R18,R12
    0302 2D0A      MOV	R16,R10
    0303 DF54      RCALL	_write
(0348) 	write(secondAdr,second);
    0304 2F26      MOV	R18,R22
    0305 2F04      MOV	R16,R20
    0306 DF51      RCALL	_write
(0349) 	closeWP();
    0307 DF34      RCALL	_closeWP
    0308 940E03ED  CALL	pop_gset5
    030A 9624      ADIW	R28,4
    030B 9508      RET
(0350) }
(0351) /*--------------------------------------------------------------------
(0352) 函数名称:DS1302设置日期
(0353) 函数功能:
(0354) 注意事项:无
(0355) 提示说明:无
(0356) 输    入:
(0357) 返    回:无
(0358) --------------------------------------------------------------------*/
(0359) //void DS1302_setDate(uint8 year,uint8 month,uint8 day)
(0360) //{
(0361) //
(0362) //}
(0363) /*--------------------------------------------------------------------
(0364) 函数名称:DS1302初始化
(0365) 函数功能:
(0366) 注意事项:无
(0367) 提示说明:无
(0368) 输    入:无
(0369) 返    回:无
(0370) --------------------------------------------------------------------*/
(0371) void DS1302_init(void)
(0372) {
(0373) 	OUT_SCK;
_DS1302_init:
    030C 9AA7      SBI	0x14,7
(0374) 	OUT_SIO;
    030D 9AA6      SBI	0x14,6
(0375) 	OUT_RST;
    030E 9AA5      SBI	0x14,5
(0376) 	openWP();
    030F DF3A      RCALL	_openWP
(0377) 	setChargePrmt();
    0310 DF1F      RCALL	_setChargePrmt
(0378) 	closeWP();
    0311 DF2A      RCALL	_closeWP
    0312 9508      RET
_main:
  time                 --> Y+1
    0313 9724      SBIW	R28,4
FILE: E:\WaveShare\微雪电子CD1\开发板试验器\SD系列\M16SD\试验教程\外围模块相关试验\DS1302~1\DS1302\DS1302_.C
(0001) /*********************************************************************
(0002) 	微 雪 电 子   WaveShare   http://www.waveShare.net	
(0003) 
(0004) 功能目的:   建立使用DS1302的示例程序
(0005) 
(0006) 目标系统:   基于AVR单片机
(0007) 
(0008) 应用软件:   ICCAVR                                               
(0009) 
(0010) 版    本:   Version 1.0
(0011) 
(0012) 圆版时间:   2005-03-01
(0013) 
(0014) 开发人员:   SEE
(0015) 
(0016) 说    明:   若用于商业用途,请保留此段文字或注明代码来源 
(0017) 
(0018) 	深 圳 微 雪 电 子 保 留 所 有 的 版 权
(0019) *********************************************************************/
(0020) 
(0021) /*01010101010101010101010101010101010101010101010101010101010101010101
(0022) ----------------------------------------------------------------------
(0023) 版本更新记录:
(0024) 
(0025) ----------------------------------------------------------------------
(0026) 实验内容:
(0027) 初始化、设置时间、获取时间,使用PA口的LED指示获取的时间数据,观测是否正确写入。
(0028) ----------------------------------------------------------------------
(0029) 硬件连接:
(0030) 将PA口的LED指示灯使用短路帽短接。
(0031) DS1302:VCC、GND、SCK、SIO、~RST
(0032)          |    |   |    |    |
(0033) M16SD: VCC、GND、PD0、PD1、PD2
(0034) ----------------------------------------------------------------------
(0035) 注意事项: 
(0036) 详见M16SD说明书
(0037) ----------------------------------------------------------------------
(0038) 10101010101010101010101010101010101010101010101010101010101010101010*/
(0039) 
(0040) #include <iom16v.H>
(0041) #include "D:\ICC_H\CmmICC.H"
(0042) 
(0043) #define OUT_SCK sbi(DDRC,7)
(0044) #define OUT_SIO sbi(DDRC,6)
(0045) #define OUT_RST sbi(DDRC,5)
(0046) 
(0047) #define IN_SIO  cbi(DDRC,6)
(0048) 
(0049) #define SET_SCK sbi(PORTC,7)
(0050) #define SET_SIO sbi(PORTC,6)
(0051) #define SET_RST sbi(PORTC,5)
(0052) 
(0053) #define CLR_SCK cbi(PORTC,7)
(0054) #define CLR_SIO cbi(PORTC,6)
(0055) #define CLR_RST cbi(PORTC,5)
(0056) 
(0057) #define GET_SIO gbi(PINC,6)
(0058) 
(0059) #include "D:\ICC_H\DS1302.H"
(0060) 
(0061) #define DISP_DDR  DDRA
(0062) #define DISP_PORT PORTA
(0063) 
(0064) /*--------------------------------------------------------------------
(0065) 函数全称:
(0066) 函数功能:
(0067) 注意事项:
(0068) 提示说明:
(0069) 输    入:	
(0070) 返    回:
(0071) --------------------------------------------------------------------*/
(0072) void main()
(0073) { 
(0074) 	uint8 time[3];
(0075) 	
(0076) 	DISP_DDR = 0XFF;
    0314 EF8F      LDI	R24,0xFF
    0315 BB8A      OUT	0x1A,R24
(0077) 	OUT_SCK;
    0316 9AA7      SBI	0x14,7
(0078) 	OUT_SIO;
    0317 9AA6      SBI	0x14,6
(0079) 	OUT_RST;
    0318 9AA5      SBI	0x14,5
(0080) 
(0081) 	DS1302_init();
    0319 DFF2      RCALL	_DS1302_init
(0082) 	DS1302_setTime(10,20,30);		//set time: 10:20:30
    031A E18E      LDI	R24,0x1E
    031B 8388      STD	Y+0,R24
    031C E124      LDI	R18,0x14
    031D E00A      LDI	R16,0xA
    031E DFAA      RCALL	_DS1302_setTime
    031F C006      RJMP	0x0326
(0083) 	while(1)
(0084) 	{
(0085) 		DS1302_getTime(time);
    0320 018E      MOVW	R16,R28
    0321 5F0F      SUBI	R16,0xFF
    0322 4F1F      SBCI	R17,0xFF
    0323 DF5A      RCALL	_DS1302_getTime
(0086) 		DISP_PORT = time[0];
FILE: <library>
    0324 8029      LDD	R2,Y+1
    0325 BA2B      OUT	0x1B,R2
    0326 CFF9      RJMP	0x0320
    0327 9624      ADIW	R28,4
    0328 9508      RET
push_arg4:
    0329 933A      ST	R19,-Y
    032A 932A      ST	R18,-Y
push_arg2:
    032B 931A      ST	R17,-Y
    032C 930A      ST	R16,-Y
    032D 9508      RET
div32u:
    032E 94E8      BCLR	6
    032F C001      RJMP	0x0331
mod32u:
    0330 9468      BSET	6
    0331 D02F      RCALL	long_div_prolog
    0332 24CC      CLR	R12
    0333 C008      RJMP	0x033C
div32s:
    0334 94E8      BCLR	6
    0335 C001      RJMP	0x0337
mod32s:
    0336 9468      BSET	6
    0337 D029      RCALL	long_div_prolog
    0338 FD37      SBRC	R19,7
    0339 D053      RCALL	neg_R16_R19
    033A FDB7      SBRC	R27,7
    033B D05A      RCALL	neg_R24_R27
    033C 2477      CLR	R7
    033D 2488      CLR	R8
    033E 2499      CLR	R9
    033F 24AA      CLR	R10
    0340 24BB      CLR	R11
    0341 D041      RCALL	tst_R16_R19
    0342 F0C1      BEQ	0x035B
    0343 D044      RCALL	tst_R24_R27
    0344 F0B1      BEQ	0x035B
    0345 E2E8      LDI	R30,0x28
    0346 0F00      LSL	R16
    0347 1F11      ROL	R17
    0348 1F22      ROL	R18
    0349 1F33      ROL	R19
    034A 1C77      ROL	R7
    034B 1C88      ROL	R8
    034C 1C99      ROL	R9
    034D 1CAA      ROL	R10
    034E 1CBB      ROL	R11
    034F 1688      CP	R8,R24
    0350 0699      CPC	R9,R25
    0351 06AA      CPC	R10,R26
    0352 06BB      CPC	R11,R27
    0353 F028      BCS	0x0359
    0354 1A88      SUB	R8,R24
    0355 0A99      SBC	R9,R25
    0356 0AAA      SBC	R10,R26
    0357 0ABB      SBC	R11,R27
    0358 9503      INC	R16
    0359 95EA      DEC	R30
    035A F759      BNE	0x0346
    035B F426      BRTC	0x0360
    035C 2D08      MOV	R16,R8
    035D 2D19      MOV	R17,R9
    035E 2D2A      MOV	R18,R10
    035F 2D3B      MOV	R19,R11
    0360 C013      RJMP	long_div_epilog
long_div_prolog:
    0361 927A      ST	R7,-Y
    0362 928A      ST	R8,-Y
    0363 929A      ST	R9,-Y
    0364 92AA      ST	R10,-Y
    0365 92BA      ST	R11,-Y
    0366 92CA      ST	R12,-Y
    0367 93EA      ST	R30,-Y
    0368 938A      ST	R24,-Y
    0369 939A      ST	R25,-Y
    036A 93AA      ST	R26,-Y
    036B 93BA      ST	R27,-Y
    036C 858B      LDD	R24,Y+11
    036D 859C      LDD	R25,Y+12
    036E 85AD      LDD	R26,Y+13
    036F 85BE      LDD	R27,Y+14
    0370 2EC3      MOV	R12,R19
    0371 F00E      BRTS	0x0373
    0372 26CB      EO

⌨️ 快捷键说明

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