📄 ds1302.lst
字号:
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 + -