📄 ds1302.lis
字号:
.module DS1302.c
.area text(rom, con, rel)
0000 .dbfile D:\单片机编程\iccavr\DS1302时钟\DS1302.c
0000 .dbfunc e SetDateTime _SetDateTime fV
0000 ; i -> R20
0000 ; data -> R18
0000 ; cmd -> R16
.even
0000 _SetDateTime::
0000 0E940000 xcall push_gset1
0004 .dbline -1
0004 .dbline 49
0004 ; #include <iom16v.h>
0004 ; #include <macros.h>
0004 ;
0004 ; //秒
0004 ; #define SEC_W 0x80
0004 ; #define SEC_R 0x81
0004 ;
0004 ; //分
0004 ; #define MIN_W 0x82
0004 ; #define MIN_R 0x83
0004 ;
0004 ; //小时
0004 ; #define HR_W 0x84
0004 ; #define HR_R 0x85
0004 ;
0004 ; //日期
0004 ; #define DATE_W 0x86
0004 ; #define DATE_R 0x87
0004 ;
0004 ; //月
0004 ; #define MONTH_W 0x88
0004 ; #define MONTH_R 0x89
0004 ;
0004 ; //星期几
0004 ; #define DAY_W 0x8A
0004 ; #define DAY_R 0x8B
0004 ;
0004 ; //年
0004 ; #define YEAR_W 0x8C
0004 ; #define YEAR_R 0x8D
0004 ;
0004 ; //控制写保护
0004 ; #define CONTROL_W 0x8E
0004 ; #define CONTROL_R 0x8F
0004 ;
0004 ; //控制充电
0004 ; #define TRIC_CHARGE_W 0x90
0004 ; #define TRIC_CHARGE_R 0x91
0004 ;
0004 ; //突发模式
0004 ; #define CLOCK_BURST_W 0xBE
0004 ; #define CLOCK_BURST_R 0xBF
0004 ;
0004 ; //写入时钟控制信息
0004 ; //SZRST--PD5
0004 ; //SZSDA--PD6
0004 ; //SZSCK--PD7
0004 ; void SetDateTime(unsigned char cmd,unsigned char data)
0004 ; {
0004 .dbline 50
0004 ; unsigned char i=0;
0004 4427 clr R20
0006 .dbline 51
0006 ; PORTD&=0x1F;//设置PD5~PD7为低 0001 1111
0006 82B3 in R24,0x12
0008 8F71 andi R24,31
000A 82BB out 0x12,R24
000C .dbline 52
000C ; DDRD|=0xE0;//设置PD5~PD7为输出 1110 0000
000C 81B3 in R24,0x11
000E 806E ori R24,224
0010 81BB out 0x11,R24
0012 .dbline 53
0012 ; PORTD|=0x20;//RESET为高 0010 0000
0012 959A sbi 0x12,5
0014 .dbline 54
0014 ; for(i=0;i<8;i++)
0014 0DC0 xjmp L5
0016 L2:
0016 .dbline 55
0016 ; {
0016 .dbline 56
0016 ; if(cmd&0x01)
0016 00FF sbrs R16,0
0018 02C0 rjmp L6
001A .dbline 57
001A ; {
001A .dbline 58
001A ; PORTD|=0x40; //0100 0000
001A 969A sbi 0x12,6
001C .dbline 59
001C ; }
001C 03C0 xjmp L7
001E L6:
001E .dbline 61
001E ; else
001E ; {
001E .dbline 62
001E ; PORTD&=0xBF; //1011 1111
001E 82B3 in R24,0x12
0020 8F7B andi R24,191
0022 82BB out 0x12,R24
0024 .dbline 63
0024 ; }
0024 L7:
0024 .dbline 64
0024 979A sbi 0x12,7
0026 .dbline 65
0026 82B3 in R24,0x12
0028 8F77 andi R24,127
002A 82BB out 0x12,R24
002C .dbline 66
002C 0695 lsr R16
002E .dbline 67
002E L3:
002E .dbline 54
002E 4395 inc R20
0030 L5:
0030 .dbline 54
0030 4830 cpi R20,8
0032 88F3 brlo L2
0034 .dbline 68
0034 ; PORTD|=0x80; //1000 0000
0034 ; PORTD&=0x7F; //0111 1111
0034 ; cmd=cmd>>1;
0034 ; }
0034 ; for(i=0;i<8;i++)
0034 4427 clr R20
0036 0DC0 xjmp L11
0038 L8:
0038 .dbline 69
0038 ; {
0038 .dbline 70
0038 ; if(data&0x01)
0038 20FF sbrs R18,0
003A 02C0 rjmp L12
003C .dbline 71
003C ; {
003C .dbline 72
003C ; PORTD|=0x40;//0100 0000
003C 969A sbi 0x12,6
003E .dbline 73
003E ; }
003E 03C0 xjmp L13
0040 L12:
0040 .dbline 75
0040 ; else
0040 ; {
0040 .dbline 76
0040 ; PORTD&=0xBF;//1011 1111
0040 82B3 in R24,0x12
0042 8F7B andi R24,191
0044 82BB out 0x12,R24
0046 .dbline 77
0046 ; }
0046 L13:
0046 .dbline 78
0046 979A sbi 0x12,7
0048 .dbline 79
0048 82B3 in R24,0x12
004A 8F77 andi R24,127
004C 82BB out 0x12,R24
004E .dbline 80
004E 2695 lsr R18
0050 .dbline 81
0050 L9:
0050 .dbline 68
0050 4395 inc R20
0052 L11:
0052 .dbline 68
0052 4830 cpi R20,8
0054 88F3 brlo L8
0056 .dbline 82
0056 ; PORTD|=0x80;//SZSCK=1;
0056 ; PORTD&=0x7F;//SZSCK=0;
0056 ; data=data>>1;
0056 ; }
0056 ; PORTD&=0xDF;//设置RESET为低
0056 82B3 in R24,0x12
0058 8F7D andi R24,223
005A 82BB out 0x12,R24
005C .dbline -2
005C .dbline 83
005C ; }
005C L1:
005C 0E940000 xcall pop_gset1
0060 .dbline 0 ; func end
0060 0895 ret
0062 .dbsym r i 20 c
0062 .dbsym r data 18 c
0062 .dbsym r cmd 16 c
0062 .dbend
0062 .dbfunc e ReadDateTime _ReadDateTime fc
0062 ; code -> R20
0062 ; i -> R22
0062 ; cmd -> R16
.even
0062 _ReadDateTime::
0062 0E940000 xcall push_gset2
0066 .dbline -1
0066 .dbline 91
0066 ;
0066 ;
0066 ; //读出时钟控制信息
0066 ; //SZRST--PD5
0066 ; //SZSDA--PD6
0066 ; //SZSCK--PD7
0066 ; unsigned char ReadDateTime(unsigned char cmd)
0066 ; {
0066 .dbline 92
0066 ; unsigned char i=0;
0066 6627 clr R22
0068 .dbline 94
0068 ; unsigned char code;//返回的数据值
0068 ; PORTD&=0x1F;//设置PD5~PD7为低 0001 1111
0068 82B3 in R24,0x12
006A 8F71 andi R24,31
006C 82BB out 0x12,R24
006E .dbline 95
006E ; DDRD|=0xE0;//设置PD5~PD7为输出 1110 0000
006E 81B3 in R24,0x11
0070 806E ori R24,224
0072 81BB out 0x11,R24
0074 .dbline 96
0074 ; PORTD|=0x20;//RESET为高 0010 0000
0074 959A sbi 0x12,5
0076 .dbline 97
0076 ; for(i=0;i<8;i++)
0076 0DC0 xjmp L18
0078 L15:
0078 .dbline 98
0078 ; {
0078 .dbline 99
0078 ; if(cmd&0x01)
0078 00FF sbrs R16,0
007A 02C0 rjmp L19
007C .dbline 100
007C ; {
007C .dbline 101
007C ; PORTD|=0x40; //0100 0000
007C 969A sbi 0x12,6
007E .dbline 102
007E ; }
007E 03C0 xjmp L20
0080 L19:
0080 .dbline 104
0080 ; else
0080 ; {
0080 .dbline 105
0080 ; PORTD&=0xBF; //1011 1111
0080 82B3 in R24,0x12
0082 8F7B andi R24,191
0084 82BB out 0x12,R24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -