📄 ds1302.lis
字号:
.module DS1302.c
.area code(ram, con, rel)
.area lit(rom, con, rel)
0000 _table::
0000 3F00 .word 63
0002 0600 .word 6
0004 5B00 .word 91
0006 4F00 .word 79
0008 6600 .word 102
000A 6D00 .word 109
000C 7D00 .word 125
000E 0700 .word 7
0010 7F00 .word 127
0012 6F00 .word 111
0014 7700 .word 119
0016 7C00 .word 124
0018 3900 .word 57
001A 5E00 .word 94
001C 7900 .word 121
001E 7100 .word 113
0020 .dbfile D:\卜凡涛单片机\卜凡涛做板\DS1302/xianshi.C
0020 .dbsym e table _table A[32:16]kI
.area text(rom, con, rel)
0000 .dbfile D:\卜凡涛单片机\卜凡涛做板\DS1302/xianshi.C
0000 .dbfunc e delay _delay fV
0000 ; i -> R20,R21
0000 ; j -> R22,R23
0000 ; ms -> R16,R17
.even
0000 _delay::
0000 0E940000 xcall push_gset2
0004 .dbline -1
0004 .dbline 9
0004 ; #include <iom16v.h> //包含型号头文件
0004 ; #include <macros.h> //包含"位"操作头文件
0004 ; #define uchar unsigned char
0004 ; #define uint unsigned int
0004 ;
0004 ; #define TRUE 1
0004 ; #define FALSE 0
0004 ; #include "xianshi.C" //包含1602液晶函数文件
0004 ;
0004 .dbline 11
0004 ; /******************RTC常量******************/
0004 ; #define RTC_CLK PC7
0004 4427 clr R20
0006 5527 clr R21
0008 0BC0 xjmp L5
000A L2:
000A .dbline 12
000A ; #define RTC_DATA PC6
000A .dbline 13
000A 6627 clr R22
000C 7727 clr R23
000E 02C0 xjmp L9
0010 L6:
0010 .dbline 13
0010 L7:
0010 .dbline 13
0010 6F5F subi R22,255 ; offset = 1
0012 7F4F sbci R23,255
0014 L9:
0014 .dbline 13
0014 6537 cpi R22,117
0016 E4E0 ldi R30,4
0018 7E07 cpc R23,R30
001A D0F3 brlo L6
001C .dbline 14
001C L3:
001C .dbline 11
001C 4F5F subi R20,255 ; offset = 1
001E 5F4F sbci R21,255
0020 L5:
0020 .dbline 11
0020 4017 cp R20,R16
0022 5107 cpc R21,R17
0024 90F3 brlo L2
0026 .dbline -2
0026 L1:
0026 0E940000 xcall pop_gset2
002A .dbline 0 ; func end
002A 0895 ret
002C .dbsym r i 20 i
002C .dbsym r j 22 i
002C .dbsym r ms 16 i
002C .dbend
002C .dbfunc e show _show fV
002C ; j -> R20
002C ; i -> R22
.even
002C _show::
002C 0E940000 xcall push_gset2
0030 422F mov R20,R18
0032 602F mov R22,R16
0034 .dbline -1
0034 .dbline 17
0034 ; #define RTC_CS PC1
0034 ; //命令
0034 ; #define RD 0x01
0034 ; #define WR 0x00
0034 ; #define C_SEC 0x80 //秒
0034 .dbline 17
0034 8FEF ldi R24,255
0036 87BB out 0x17,R24
0038 .dbline 18
0038 ; #define C_MIN 0x82 //分
0038 8CE3 ldi R24,60
003A 81BB out 0x11,R24
003C .dbline 19
003C ; #define C_HR 0x84 //时
003C 82E0 ldi R24,2
003E 869F mul R24,R22
0040 F001 movw R30,R0
0042 80E0 ldi R24,<_table
0044 90E0 ldi R25,>_table
0046 E80F add R30,R24
0048 F91F adc R31,R25
004A 0590 lpm R0,Z+
004C 1490 lpm R1,Z
004E F001 movw R30,R0
0050 E8BB out 0x18,R30
0052 .dbline 22
0052 ; #define C_DAY 0x86 //日
0052 ; #define C_MTH 0x88 //月
0052 ; #define C_WK 0x8A //星期 DATE
0052 142F mov R17,R20
0054 1E5F subi R17,254 ; addi 2
0056 01E0 ldi R16,1
0058 0E940000 xcall lsl8
005C 202E mov R2,R16
005E 2094 com R2
0060 32B2 in R3,0x12
0062 3220 and R3,R2
0064 32BA out 0x12,R3
0066 .dbline 23
0066 ; #define C_YR 0x8C //年
0066 01E0 ldi R16,1
0068 10E0 ldi R17,0
006A CADF xcall _delay
006C .dbline -2
006C L10:
006C 0E940000 xcall pop_gset2
0070 .dbline 0 ; func end
0070 0895 ret
0072 .dbsym r j 20 c
0072 .dbsym r i 22 c
0072 .dbend
0072 .dbfile D:\卜凡涛单片机\卜凡涛做板\DS1302\DS1302.c
0072 .dbfunc e Delayus _Delayus fV
0072 ; i -> R20,R21
0072 ; US -> R22,R23
.even
0072 _Delayus::
0072 0E940000 xcall push_gset2
0076 B801 movw R22,R16
0078 .dbline -1
0078 .dbline 41
0078 ; #define C_WP 0x8E //控制(写保护)
0078 ; #define C_CHARGE 0x90 //涓流充电
0078 ; #define C_BURST 0xBE //时钟多字节
0078 ; //配置
0078 ; #define CLK_HALT 0x80 //停止时钟控制位 SECOND bit7
0078 ; #define CLK_START 0x00 //启动时钟
0078 ; #define M12_24 0x80 //12/24小时值选择位 HOUR bit7
0078 ; #define PROTECT 0x80 //写保护控制位 CONTROL bit7
0078 ; #define UPROTECT 0x00 //写保护控制位 CONTROL bit7
0078 ; //涓流充电控制常量
0078 ; #define TC_D1R2 0xA5 //high 1 Diode +2K Resistors
0078 ; #define TC_D2R8 0xAB //low 2 Diodes+8K Resistors
0078 ; #define TC_DISABLED 0x00 //Disabled(TCS<>1010 or DS=00 or RS=00)
0078 ; //RAM 命令
0078 ; #define C_RAMBASE 0xC0 //RAM0~RAM30<<1 地址需左移一位
0078 ;
0078 ; void Delayus(uint US)
0078 ; {
0078 .dbline 43
0078 ; uint i;
0078 ; US=US*5/4; //5/4是在8MHz晶振下,通过软件仿真反复实验得到的数值
0078 05E0 ldi R16,5
007A 10E0 ldi R17,0
007C 9B01 movw R18,R22
007E 0E940000 xcall empy16s
0082 B801 movw R22,R16
0084 7695 lsr R23
0086 6795 ror R22
0088 7695 lsr R23
008A 6795 ror R22
008C .dbline 44
008C 4427 clr R20
008E 5527 clr R21
0090 02C0 xjmp L15
0092 L12:
0092 .dbline 44
0092 L13:
0092 .dbline 44
0092 4F5F subi R20,255 ; offset = 1
0094 5F4F sbci R21,255
0096 L15:
0096 .dbline 44
0096 ; for( i=0;i<US;i++);
0096 4617 cp R20,R22
0098 5707 cpc R21,R23
009A D8F3 brlo L12
009C .dbline -2
009C L11:
009C 0E940000 xcall pop_gset2
00A0 .dbline 0 ; func end
00A0 0895 ret
00A2 .dbsym r i 20 i
00A2 .dbsym r US 22 i
00A2 .dbend
00A2 .dbfunc e Delayms _Delayms fV
00A2 ; i -> R20,R21
00A2 ; j -> R22,R23
00A2 ; MS -> R16,R17
.even
00A2 _Delayms::
00A2 0E940000 xcall push_gset2
00A6 .dbline -1
00A6 .dbline 47
00A6 ; }
00A6 ; void Delayms(uint MS)
00A6 ; {
00A6 .dbline 49
00A6 ; uint i,j;
00A6 ; for( i=0;i<MS;i++)
00A6 4427 clr R20
00A8 5527 clr R21
00AA 0BC0 xjmp L20
00AC L17:
00AC .dbline 50
00AC 6627 clr R22
00AE 7727 clr R23
00B0 02C0 xjmp L24
00B2 L21:
00B2 .dbline 50
00B2 L22:
00B2 .dbline 50
00B2 6F5F subi R22,255 ; offset = 1
00B4 7F4F sbci R23,255
00B6 L24:
00B6 .dbline 50
00B6 6537 cpi R22,117
00B8 E4E0 ldi R30,4
00BA 7E07 cpc R23,R30
00BC D0F3 brlo L21
00BE L18:
00BE .dbline 49
00BE 4F5F subi R20,255 ; offset = 1
00C0 5F4F sbci R21,255
00C2 L20:
00C2 .dbline 49
00C2 4017 cp R20,R16
00C4 5107 cpc R21,R17
00C6 90F3 brlo L17
00C8 .dbline -2
00C8 L16:
00C8 0E940000 xcall pop_gset2
00CC .dbline 0 ; func end
00CC 0895 ret
00CE .dbsym r i 20 i
00CE .dbsym r j 22 i
00CE .dbsym r MS 16 i
00CE .dbend
00CE .dbfunc e DS1302_portinit _DS1302_portinit fV
.even
00CE _DS1302_portinit::
00CE .dbline -1
00CE .dbline 62
00CE ; for(j=0;j<1141;j++); //1141是在8MHz晶振下,通过软件仿真反复实验得到的数值
00CE ; }
00CE ;
00CE ;
00CE ;
00CE ; /*******************************************
00CE ; 函数名称: DS1302_init
00CE ; 功 能: 初始化DS1302的数据接口
00CE ; 参 数: 无
00CE ; 返回值 : 无
00CE ; /********************************************/
00CE ; void DS1302_portinit(void)
00CE ; {
00CE .dbline 63
00CE ; DDRC|=BIT(RTC_CLK)|BIT(RTC_DATA)|BIT(RTC_CS);//将时钟端(RTC_CLK)数据端(RTC_DATA)片选端(RTC_CS)设置为输出
00CE 84B3 in R24,0x14
00D0 826C ori R24,194
00D2 84BB out 0x14,R24
00D4 .dbline -2
00D4 L25:
00D4 .dbline 0 ; func end
00D4 0895 ret
00D6 .dbend
00D6 .dbfunc e DS1302_writeB _DS1302_writeB fV
00D6 ; i -> R20
00D6 ; byte -> R22
.even
00D6 _DS1302_writeB::
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -