📄 pcf8563.s
字号:
.module PCF8563.c
.area data(ram, con, rel)
_week_list::
.blkw 1
.area idata
.word L2
.area data(ram, con, rel)
.blkw 1
.area idata
.word L3
.area data(ram, con, rel)
.blkw 1
.area idata
.word L4
.area data(ram, con, rel)
.blkw 1
.area idata
.word L5
.area data(ram, con, rel)
.blkw 1
.area idata
.word L6
.area data(ram, con, rel)
.blkw 1
.area idata
.word L7
.area data(ram, con, rel)
.blkw 1
.area idata
.word L8
.area data(ram, con, rel)
.dbfile D:\avrvi\AVRVi_m128_Starter_Kit\PCF8563_USART\source\lib\PCF8563.c
.dbsym e week_list _week_list A[14:7]pc
_time_tmp::
.blkb 9
.area idata
.byte 48,48,58,48,48,58,48,48,0
.area data(ram, con, rel)
.dbfile D:\avrvi\AVRVi_m128_Starter_Kit\PCF8563_USART\source\lib\PCF8563.c
.dbsym e time_tmp _time_tmp A[9:9]c
_data_tmp::
.blkb 11
.area idata
.byte 50,48,48,56,46,48,49,46,48,49,0
.area data(ram, con, rel)
.dbfile D:\avrvi\AVRVi_m128_Starter_Kit\PCF8563_USART\source\lib\PCF8563.c
.dbsym e data_tmp _data_tmp A[11:11]c
_time::
.blkb 2
.area idata
.byte 64,'Y
.area data(ram, con, rel)
.dbfile D:\avrvi\AVRVi_m128_Starter_Kit\PCF8563_USART\source\lib\PCF8563.c
.blkb 2
.area idata
.byte 35,41
.area data(ram, con, rel)
.dbfile D:\avrvi\AVRVi_m128_Starter_Kit\PCF8563_USART\source\lib\PCF8563.c
.blkb 2
.area idata
.byte 5,2
.area data(ram, con, rel)
.dbfile D:\avrvi\AVRVi_m128_Starter_Kit\PCF8563_USART\source\lib\PCF8563.c
.blkb 1
.area idata
.byte 8
.area data(ram, con, rel)
.dbfile D:\avrvi\AVRVi_m128_Starter_Kit\PCF8563_USART\source\lib\PCF8563.c
.dbsym e time _time A[7:7]c
.area text(rom, con, rel)
.dbfile D:\avrvi\AVRVi_m128_Starter_Kit\PCF8563_USART\source\lib\PCF8563.c
.dbfunc e clear _clear fV
; num -> R18
; p -> R16,R17
.even
_clear::
.dbline -1
.dbline 41
; /************************************************
; 文件:PCF8563.h
; 用途:PCF8563函数头文件
; 注意:系统时钟8M
; 创建:2008.1.25
; 修改:2008.1.25
; Copy Right (c) www.avrvi.com AVR与虚拟仪器
; ************************************************/
; #include "..\config.h"
; unsigned char syserr;
; unsigned char *week_list[7]={
; " Sunday ",
; " Monday ",
; " Tuesday ",
; "Wednesday",
; "Thursday ",
; " Friday ",
; "Saturday "
; };
; unsigned char write_buff[8],read_buff[8],time_tmp[]="00:00:00",data_tmp[]="2008.01.01",*week_tmp;
; unsigned char time[7]={
; 0x40/*秒*/,
; 0x59/*分*/,
; 0x23/*时*/,
; 0x29/*天*/,
; 0x05/*星期*/,
; 0x02/*月/世纪*/,
; 0x08/*年*/
; };
; /*************************************************************************
; ** 函数名称: clear(unsigned char *p,unsigned char num)
; ** 功能描述: 清除指定区域指定长度的数据
; ** 输 入: unsigned char *p :起始地址 unsigned char num :零数据长度
; ** 输出 :
; ** 全局变量:
; ** 调用模块:
; ** 说明:
; ** 注意:
; **************************************************************************/
; void clear(unsigned char *p,unsigned char num)
; {
.dbline 42
; for(;num>0;num--)
xjmp L13
L10:
.dbline 43
.dbline 44
clr R2
movw R30,R16
std z+0,R2
.dbline 45
subi R16,255 ; offset = 1
sbci R17,255
.dbline 46
L11:
.dbline 42
dec R18
L13:
.dbline 42
clr R2
cp R2,R18
brlo L10
.dbline -2
L9:
.dbline 0 ; func end
ret
.dbsym r num 18 c
.dbsym r p 16 pc
.dbend
.dbfunc e PCF8536_wt _PCF8536_wt fV
; t -> R10
; data -> R20
; add -> R22,R23
.even
_PCF8536_wt::
xcall push_gset3
mov R20,R18
movw R22,R16
.dbline -1
.dbline 60
; {
; *p=0;
; p++;
; }
; }
; /*************************************************************************
; ** 函数名称: PCF8536_wt(unsigned int add,unsigned char data)
; ** 功能描述: 向PCF8563指定地址写入一条数据
; ** 输 入: unsigned int add :高八位为器件地址,低八位为内部寄存器地址
; unsigned char data :需要写入的数据
; ** 输出 :
; ** 全局变量:
; ** 调用模块:
; ** 说明:
; ** 注意:
; **************************************************************************/
; void PCF8536_wt(unsigned int add,unsigned char data)
; {
.dbline 62
; unsigned char t;
; t=add>>8;
movw R10,R22
mov R10,R11
clr R11
.dbline 63
; t<<=1;
lsl R10
.dbline 64
; i2cstart();
xcall _i2cstart
.dbline 65
; if(i2cwt(W_ADD_COM+t)==SLAW)
mov R16,R10
subi R16,94 ; addi 162
xcall _i2cwt
cpi R16,24
brne L15
.dbline 66
; {
.dbline 67
; i2cwt(add);
mov R16,R22
xcall _i2cwt
.dbline 68
; i2cwt(data);
mov R16,R20
xcall _i2cwt
.dbline 69
; }
xjmp L16
L15:
.dbline 70
; else syserr=ERR_SLAW;
ldi R24,1
sts _syserr,R24
L16:
.dbline 71
; i2cstop();
xcall _i2cstop
.dbline -2
L14:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r t 10 c
.dbsym r data 20 c
.dbsym r add 22 i
.dbend
.dbfunc e PCF8536_wt_p _PCF8536_wt_p fV
; t -> R12
; num -> R20
; p -> R22,R23
; add -> R10,R11
.even
_PCF8536_wt_p::
xcall push_gset4
movw R22,R18
movw R10,R16
ldd R20,y+8
.dbline -1
.dbline 86
; }
; /*************************************************************************
; ** 函数名称: PCF8536_wt_p(unsigned int add,unsigned char *p,unsigned char num)
; ** 功能描述: 向PCF8563地址连续的寄存器写入系列数据
; ** 输 入: unsigned int add :高八位为器件地址,低八位为内部寄存器地址
; unsigned char *p :需要写入的数据域的起始地址
; unsigned char num :写入数据的个数
; ** 输出 :
; ** 全局变量:
; ** 调用模块:
; ** 说明:写入数据区域为地址连续的寄存器
; ** 注意:
; **************************************************************************/
; void PCF8536_wt_p(unsigned int add,unsigned char *p,unsigned char num)
; {
.dbline 88
; unsigned char t;
; t=add>>8;
movw R12,R10
mov R12,R13
clr R13
.dbline 89
; t<<=1;
lsl R12
.dbline 90
; i2cstart();
xcall _i2cstart
.dbline 91
; if(i2cwt(W_ADD_COM+t)==SLAW)
mov R16,R12
subi R16,94 ; addi 162
xcall _i2cwt
cpi R16,24
brne L18
.dbline 92
; {
.dbline 93
; i2cwt(add);
mov R16,R10
xcall _i2cwt
.dbline 94
; for(;num>0;num--)
xjmp L23
L20:
.dbline 95
.dbline 96
movw R30,R22
ldd R16,z+0
xcall _i2cwt
.dbline 97
subi R22,255 ; offset = 1
sbci R23,255
.dbline 98
nop
.dbline 99
L21:
.dbline 94
dec R20
L23:
.dbline 94
clr R2
cp R2,R20
brlo L20
.dbline 100
; {
; i2cwt(*p);
; p++;
; _NOP();
; }
; }
xjmp L19
L18:
.dbline 101
; else syserr=ERR_SLAW;
ldi R24,1
sts _syserr,R24
L19:
.dbline 102
; i2cstop();
xcall _i2cstop
.dbline -2
L17:
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r t 12 c
.dbsym r num 20 c
.dbsym r p 22 pc
.dbsym r add 10 i
.dbend
.dbfunc e PCF8536_rd _PCF8536_rd fV
; t -> R12
; num -> R20
; p -> R22,R23
; add -> R10,R11
.even
_PCF8536_rd::
xcall push_gset4
movw R22,R18
movw R10,R16
ldd R20,y+8
.dbline -1
.dbline 117
; }
; /*************************************************************************
; ** 函数名称: PCF8536_rd(unsigned int add,unsigned char *p,unsigned char num)
; ** 功能描述: 读PCF8563
; ** 输 入: unsigned int add :高八位为器件地址,低八位为内部寄存器地址
; unsigned char *p :读出的数据存放地址的起始地址
; unsigned char num :读出数据的个数
; ** 输出 :
; ** 全局变量:
; ** 调用模块:
; ** 说明:
; ** 注意:
; **************************************************************************/
; void PCF8536_rd(unsigned int add,unsigned char *p,unsigned char num)
; {
.dbline 119
; unsigned char t;
; t=add>>8;
movw R12,R10
mov R12,R13
clr R13
.dbline 120
; t<<=1;
lsl R12
.dbline 121
; i2cstart();
xcall _i2cstart
.dbline 122
; if(i2cwt(W_ADD_COM+t)==SLAW)
mov R16,R12
subi R16,94 ; addi 162
xcall _i2cwt
cpi R16,24
brne L25
.dbline 123
; {
.dbline 124
; i2cwt(add);
mov R16,R10
xcall _i2cwt
.dbline 125
; }
xjmp L26
L25:
.dbline 126
; else syserr=ERR_SLAW;
ldi R24,1
sts _syserr,R24
L26:
.dbline 128
;
; i2cstart();
xcall _i2cstart
.dbline 129
; if(i2cwt(R_ADD_COM+t)==SLAW)
mov R16,R12
subi R16,93 ; addi 163
xcall _i2cwt
cpi R16,24
brne L27
.dbline 130
; {
.dbline 131
; i2cwt(add);
mov R16,R10
xcall _i2cwt
.dbline 132
; }
xjmp L32
L27:
.dbline 133
; else syserr=ERR_SLAW;
ldi R24,1
sts _syserr,R24
.dbline 135
;
; for(;num>0;num--)
xjmp L32
L29:
.dbline 136
.dbline 137
xcall _i2crd
movw R30,R22
std z+0,R16
.dbline 138
subi R22,255 ; offset = 1
sbci R23,255
.dbline 139
L30:
.dbline 135
dec R20
L32:
.dbline 135
clr R2
cp R2,R20
brlo L29
.dbline -2
L24:
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r t 12 c
.dbsym r num 20 c
.dbsym r p 22 pc
.dbsym r add 10 i
.dbend
.dbfunc e PCF8563_init _PCF8563_init fV
.even
_PCF8563_init::
.dbline -1
.dbline 152
; {
; *p=i2crd();
; p++;
; }
; }
; /*************************************************************************
; ** 函数名称: PCF8563_init(void)
; ** 功能描述: PCF8563初始化
; ** 输 入:
; ** 输出 :
; ** 全局变量:
; ** 调用模块:
; ** 说明:
; ** 注意:
; **************************************************************************/
; void PCF8563_init(void)
; {
.dbline 153
; clear(write_buff,8);
ldi R18,8
ldi R16,<_write_buff
ldi R17,>_write_buff
xcall _clear
.dbline 154
; clear(read_buff,8);
ldi R18,8
ldi R16,<_read_buff
ldi R17,>_read_buff
xcall _clear
.dbline 156
;
; PCF8536_wt(0x00,0x20);//写寄存器1,停止计时
ldi R18,32
clr R16
clr R17
xcall _PCF8536_wt
.dbline 158
; //PCF8536_wt_p(0x02,time,7);//设定时间
; PCF8536_wt(0x00,0x00);//写寄存器1,开始计时
clr R18
clr R16
clr R17
xcall _PCF8536_wt
.dbline -2
L33:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile D:\avrvi\AVRVi_m128_Starter_Kit\PCF8563_USART\source\lib\PCF8563.c
_syserr::
.blkb 1
.dbsym e syserr _syserr c
_week_tmp::
.blkb 2
.dbsym e week_tmp _week_tmp pc
_read_buff::
.blkb 8
.dbsym e read_buff _read_buff A[8:8]c
_write_buff::
.blkb 8
.dbsym e write_buff _write_buff A[8:8]c
.area data(ram, con, rel)
.dbfile D:\avrvi\AVRVi_m128_Starter_Kit\PCF8563_USART\source\lib\PCF8563.c
L8:
.blkb 10
.area idata
.byte 'S,'a,'t,'u,'r,'d,'a,'y,32,0
.area data(ram, con, rel)
.dbfile D:\avrvi\AVRVi_m128_Starter_Kit\PCF8563_USART\source\lib\PCF8563.c
L7:
.blkb 10
.area idata
.byte 32,'F,'r,'i,'d,'a,'y,32,32,0
.area data(ram, con, rel)
.dbfile D:\avrvi\AVRVi_m128_Starter_Kit\PCF8563_USART\source\lib\PCF8563.c
L6:
.blkb 10
.area idata
.byte 'T,'h,'u,'r,'s,'d,'a,'y,32,0
.area data(ram, con, rel)
.dbfile D:\avrvi\AVRVi_m128_Starter_Kit\PCF8563_USART\source\lib\PCF8563.c
L5:
.blkb 10
.area idata
.byte 'W,'e,'d,'n,'e,'s,'d,'a,'y,0
.area data(ram, con, rel)
.dbfile D:\avrvi\AVRVi_m128_Starter_Kit\PCF8563_USART\source\lib\PCF8563.c
L4:
.blkb 10
.area idata
.byte 32,'T,'u,'e,'s,'d,'a,'y,32,0
.area data(ram, con, rel)
.dbfile D:\avrvi\AVRVi_m128_Starter_Kit\PCF8563_USART\source\lib\PCF8563.c
L3:
.blkb 10
.area idata
.byte 32,32,'M,'o,'n,'d,'a,'y,32,0
.area data(ram, con, rel)
.dbfile D:\avrvi\AVRVi_m128_Starter_Kit\PCF8563_USART\source\lib\PCF8563.c
L2:
.blkb 10
.area idata
.byte 32,32,'S,'u,'n,'d,'a,'y,32,0
.area data(ram, con, rel)
.dbfile D:\avrvi\AVRVi_m128_Starter_Kit\PCF8563_USART\source\lib\PCF8563.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -