📄 1302.s
字号:
.module _1302.c
.area text(rom, con, rel)
.dbfile D:\zhangyu\H2test\program\1302.c
.dbfunc e pDS1302_Write _pDS1302_Write fV
; i -> R20
; data -> R22
; reg -> R10
.even
_pDS1302_Write::
xcall push_gset3
mov R22,R18
mov R10,R16
.dbline -1
.dbline 18
; /*-------------------------------------------------------------*-
; File name: 1302.c
; Description:本模块为实时时钟模块。
; Function List:
; 1.void pDS1302_Write(uchar reg,uchar data) 写实时时钟函数
; 2.uchar pDS1302_Read(uchar reg) 读实时时钟函数
; 3.void pDS1302_Init(void) 1302初始化函数
;
; -----------------------------------------------------------------
; 实时时钟模块
; -*--------------------------------------------------------------*/
; #include <iom16v.h>
; #include <macros.h>
; #include "1302.h"
; #include "main.h"
;
; void pDS1302_Write(unsigned char reg,unsigned char data)
; {
.dbline 21
; unsigned char i;
;
; mDS1302IO_Out;
sbi 0x11,4
.dbline 22
; mSetDS1302IO;
sbi 0x12,4
.dbline 23
; mClrDS1302RST;
cbi 0x12,3
.dbline 24
; wait;
nop
nop
.dbline 25
; mClrDS1302SCK;
cbi 0x12,2
.dbline 26
; wait;
nop
nop
.dbline 27
; mSetDS1302RST;
sbi 0x12,3
.dbline 28
; wait;
nop
nop
.dbline 29
; for(i=0;i<8;i++)
clr R20
xjmp L5
L2:
.dbline 30
; {
.dbline 31
; if(reg&BIT(i))
ldi R16,1
mov R17,R20
xcall lsl8
mov R2,R10
and R2,R16
breq L6
.dbline 32
; mSetDS1302IO;
sbi 0x12,4
xjmp L7
L6:
.dbline 34
; else
; mClrDS1302IO;
cbi 0x12,4
L7:
.dbline 35
nop
nop
.dbline 36
sbi 0x12,2
.dbline 37
nop
nop
.dbline 38
cbi 0x12,2
.dbline 39
nop
nop
.dbline 40
L3:
.dbline 29
inc R20
L5:
.dbline 29
cpi R20,8
brlo L2
.dbline 42
; wait;
; mSetDS1302SCK;
; wait;
; mClrDS1302SCK;
; wait;
; }
;
; for(i=0;i<8;i++)
clr R20
xjmp L11
L8:
.dbline 43
; {
.dbline 44
; if(data&BIT(i))
ldi R16,1
mov R17,R20
xcall lsl8
mov R2,R22
and R2,R16
breq L12
.dbline 45
; mSetDS1302IO;
sbi 0x12,4
xjmp L13
L12:
.dbline 47
; else
; mClrDS1302IO;
cbi 0x12,4
L13:
.dbline 48
nop
nop
.dbline 49
sbi 0x12,2
.dbline 50
nop
nop
.dbline 51
cbi 0x12,2
.dbline 52
nop
nop
.dbline 53
L9:
.dbline 42
inc R20
L11:
.dbline 42
cpi R20,8
brlo L8
.dbline 55
; wait;
; mSetDS1302SCK;
; wait;
; mClrDS1302SCK;
; wait;
; }
;
; wait;
nop
nop
.dbline 56
; mClrDS1302RST;
cbi 0x12,3
.dbline 57
; wait;
nop
nop
.dbline -2
L1:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r data 22 c
.dbsym r reg 10 c
.dbend
.dbfunc e pDS1302_Read _pDS1302_Read fc
; data -> R20
; i -> R22
; reg -> R10
.even
_pDS1302_Read::
xcall push_gset3
mov R10,R16
.dbline -1
.dbline 61
; }
;
; unsigned char pDS1302_Read(unsigned char reg)
; {
.dbline 62
; unsigned char data=0,i;
clr R20
.dbline 64
;
; mDS1302IO_Out;
sbi 0x11,4
.dbline 65
; reg+=1;//读标志
inc R10
.dbline 66
; mSetDS1302IO;
sbi 0x12,4
.dbline 68
;
; mClrDS1302RST;
cbi 0x12,3
.dbline 69
; wait;
nop
nop
.dbline 70
; mClrDS1302SCK;
cbi 0x12,2
.dbline 71
; wait;
nop
nop
.dbline 72
; wait;
nop
nop
.dbline 73
; mSetDS1302RST;
sbi 0x12,3
.dbline 74
; wait;
nop
nop
.dbline 76
;
; for(i=0;i<8;i++)
clr R22
xjmp L18
L15:
.dbline 77
; {
.dbline 78
; if(reg&BIT(i))
ldi R16,1
mov R17,R22
xcall lsl8
mov R2,R10
and R2,R16
breq L19
.dbline 79
; mSetDS1302IO;
sbi 0x12,4
xjmp L20
L19:
.dbline 81
; else
; mClrDS1302IO;
cbi 0x12,4
L20:
.dbline 82
nop
nop
.dbline 83
sbi 0x12,2
.dbline 84
nop
nop
.dbline 85
cbi 0x12,2
.dbline 86
nop
nop
.dbline 87
L16:
.dbline 76
inc R22
L18:
.dbline 76
cpi R22,8
brlo L15
.dbline 89
; wait;
; mSetDS1302SCK;
; wait;
; mClrDS1302SCK;
; wait;
; }
;
; mDS1302IO_In;
cbi 0x11,4
.dbline 90
; wait;
nop
nop
.dbline 91
; wait;
nop
nop
.dbline 93
;
; for(i=0;i<8;i++)
clr R22
xjmp L24
L21:
.dbline 94
; {
.dbline 95
; if(mTestDS1302IO)
sbis 0x10,4
rjmp L25
.dbline 96
; data |= BIT(i);
ldi R16,1
mov R17,R22
xcall lsl8
or R20,R16
xjmp L26
L25:
.dbline 98
; else
; data &= ~BIT(i);
ldi R16,1
mov R17,R22
xcall lsl8
mov R2,R16
com R2
and R20,R2
L26:
.dbline 99
sbi 0x12,2
.dbline 100
nop
nop
.dbline 101
cbi 0x12,2
.dbline 102
nop
nop
.dbline 103
L22:
.dbline 93
inc R22
L24:
.dbline 93
cpi R22,8
brlo L21
.dbline 104
; mSetDS1302SCK;
; wait;
; mClrDS1302SCK;
; wait;
; }
; wait;
nop
nop
.dbline 105
; mClrDS1302RST;
cbi 0x12,3
.dbline 106
; wait;
nop
nop
.dbline 108
;
; return(data);
mov R16,R20
.dbline -2
L14:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r data 20 c
.dbsym r i 22 c
.dbsym r reg 10 c
.dbend
.dbfunc e pDS1302_Init _pDS1302_Init fV
.even
_pDS1302_Init::
.dbline -1
.dbline 112
; }
;
; void pDS1302_Init(void)
; {
.dbline 113
; pDS1302_Write(mDS1302_CONTROL_Reg,0x00); //关闭写保护
clr R18
ldi R16,142
xcall _pDS1302_Write
.dbline 115
; //pDS1302_Write(mDS1302_SEC_Reg,0x80); //暂停
; pDS1302_Write(mDS1302_CHARGER_Reg,0x00); //涓流充电 A9
clr R18
ldi R16,144
xcall _pDS1302_Write
.dbline 116
; pDS1302_Write(mDS1302_HOUR_Reg,0x08); //时
ldi R18,8
ldi R16,132
xcall _pDS1302_Write
.dbline 117
; pDS1302_Write(mDS1302_MIN_Reg,0x34); //分
ldi R18,52
ldi R16,130
xcall _pDS1302_Write
.dbline 118
; pDS1302_Write(mDS1302_SEC_Reg,0x20); //秒
ldi R18,32
ldi R16,128
xcall _pDS1302_Write
.dbline 119
; pDS1302_Write(mDS1302_CONTROL_Reg,0x80); //打开写保护
ldi R18,128
ldi R16,142
xcall _pDS1302_Write
.dbline -2
L27:
.dbline 0 ; func end
ret
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -