📄 ds1305.s
字号:
.module DS1305.c
.area vector(rom, abs)
.org 2
rjmp _int0_isr
.area text(rom, con, rel)
.dbfile F:\ziliao\JTAG\example\DS1305\DS1305.c
.dbfunc e int0_isr _int0_isr fV
.even
_int0_isr::
st -y,R2
st -y,R24
in R2,0x3f
st -y,R2
.dbline -1
.dbline 50
; /*DS1302时钟显示*/
;
; #include <iom8v.h>
; #include <macros.h>
; #include <stdio.h>
;
; /*串口波特率设置*/
; #define fosc 7372800 //晶振7.3728M
; #define baud 9600 //波特率设置
;
; #define ds1305_rst PC0
; #define ds1305_sclk PC1
; #define ds1305_io PC2
; #define set_ds1305_rst_ddr() DDRC|=1<<ds1305_rst
; #define set_ds1305_rst() PORTC|=1<<ds1305_rst
; #define clr_ds1305_rst() PORTC&=~(1<<ds1305_rst)
; #define set_ds1305_io_ddr() DDRC|=1<<ds1305_io
; #define set_ds1305_io() PORTC|=1<<ds1305_io
; #define clr_ds1305_io() PORTC&=~(1<<ds1305_io)
; #define clr_ds1305_io_ddr() DDRC&=~(1<<ds1305_io)
; #define in_ds1305_io() PINC&(1<<ds1305_io)
; #define set_ds1305_sclk_ddr() DDRC|=1<<ds1305_sclk
; #define set_ds1305_sclk() PORTC|=1<<ds1305_sclk
; #define clr_ds1305_sclk() PORTC&=~(1<<ds1305_sclk)
;
; #define ds1305_sec_reg 0x00
; #define ds1305_min_reg 0x01
; #define ds1305_hr_reg 0x02
; #define ds1305_date_reg 0x04
; #define ds1305_month_reg 0x05
; #define ds1305_day_reg 0x03
; #define ds1305_year_reg 0x06
; #define alarm0_sec_reg 0x07
; #define alarm0_min_reg 0x08
; #define alarm0_hr_reg 0x09
; #define alarm0_day_reg 0x0a
; #define alarm1_sec_reg 0x0b
; #define alarm1_min_reg 0x0c
; #define alarm1_hr_reg 0x0d
; #define alarm1_day_reg 0x0e
; #define ds1305_control_reg 0x0f
; #define ds1305_status_reg 0x10
; #define ds1305_charger_reg 0x11
;
;
; unsigned char month,week,day,hour,minute,second;
; unsigned int year;
; #pragma interrupt_handler int0_isr:2
; void int0_isr(void)
; {
.dbline 51
; PORTB^=0X01;
ldi R24,1
in R2,0x18
eor R2,R24
out 0x18,R2
.dbline -2
L1:
ld R2,y+
out 0x3f,R2
ld R24,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e main _main fV
; guangbiao -> <dead>
; queren_zhi1 -> <dead>
; jia_zhi1 -> <dead>
; jian_zhi1 -> <dead>
; tuichu_zhi1 -> <dead>
; queren_zhi -> <dead>
; jia_zhi -> <dead>
; jian_zhi -> <dead>
; tuichu_zhi -> <dead>
; she_zhi -> <dead>
; queren1 -> <dead>
; tuichu1 -> <dead>
; jian1 -> <dead>
; jia1 -> <dead>
; queren -> <dead>
; tuichu -> <dead>
; jian -> <dead>
; jia -> <dead>
; shu -> <dead>
; j -> <dead>
.even
_main::
sbiw R28,12
.dbline -1
.dbline 56
;
; }
;
; void main(void)
; { unsigned char j,shu,jia,jian,tuichu,queren,jia1,jian1,tuichu1,queren1,she_zhi,tuichu_zhi,jian_zhi,jia_zhi,queren_zhi,tuichu_zhi1,jian_zhi1,jia_zhi1,queren_zhi1,guangbiao;
.dbline 58
; //guangbiao=0;
; CLI();
cli
.dbline 59
; DDRC=0XFF;
ldi R24,255
out 0x14,R24
.dbline 60
; PORTC|=0x07;
in R24,0x15
ori R24,7
out 0x15,R24
.dbline 61
; DDRB=0XFF;
ldi R24,255
out 0x17,R24
.dbline 62
; PORTB=0x00;
clr R2
out 0x18,R2
.dbline 63
; PORTD=0XFF;
out 0x12,R24
.dbline 64
; DDRD=0X00;
out 0x11,R2
.dbline 65
; MCUCR=0x00;
out 0x35,R2
.dbline 66
; GICR=0X40;
ldi R24,64
out 0x3b,R24
.dbline 67
; uart_init();
rcall _uart_init
.dbline 68
; ds1305_init();
rcall _ds1305_init
.dbline 69
; SEI();
sei
rjmp L4
L3:
.dbline 72
.dbline 73
ldi R16,500
ldi R17,1
rcall _delay_nms
.dbline 74
rcall _ds1305_read_time
.dbline 75
lds R2,_second
clr R3
std y+11,R3
std y+10,R2
lds R2,_minute
clr R3
std y+9,R3
std y+8,R2
lds R2,_hour
clr R3
std y+7,R3
std y+6,R2
lds R2,_week
clr R3
std y+5,R3
std y+4,R2
lds R2,_day
clr R3
std y+3,R3
std y+2,R2
lds R2,_month
clr R3
std y+1,R3
std y+0,R2
lds R18,_year
lds R19,_year+1
ldi R16,<L6
ldi R17,>L6
rcall _printf
.dbline 76
ldi R16,10
rcall _putchar
.dbline 77
ldi R16,13
rcall _putchar
.dbline 78
L4:
.dbline 71
rjmp L3
X0:
.dbline -2
L2:
adiw R28,12
.dbline 0 ; func end
ret
.dbsym l guangbiao 13 c
.dbsym l queren_zhi1 13 c
.dbsym l jia_zhi1 13 c
.dbsym l jian_zhi1 13 c
.dbsym l tuichu_zhi1 13 c
.dbsym l queren_zhi 13 c
.dbsym l jia_zhi 13 c
.dbsym l jian_zhi 13 c
.dbsym l tuichu_zhi 13 c
.dbsym l she_zhi 13 c
.dbsym l queren1 13 c
.dbsym l tuichu1 13 c
.dbsym l jian1 13 c
.dbsym l jia1 13 c
.dbsym l queren 13 c
.dbsym l tuichu 13 c
.dbsym l jian 13 c
.dbsym l jia 13 c
.dbsym l shu 13 c
.dbsym l j 13 c
.dbend
.dbfunc e ds1305_write _ds1305_write fV
; i -> R20
; data -> R18
; reg -> R16
.even
_ds1305_write::
rcall push_gset1
.dbline -1
.dbline 83
;
; while(1)
; {
; delay_nms(500);
; ds1305_read_time();
; printf("当前的时间是: %d年%d月%d日 星期%d %d:%d:%d\n",year,month,day,week,hour,minute,second);
; putchar(0x0a);
; putchar(0x0d);
; }
;
; }
;
; void ds1305_write(unsigned char reg,unsigned char data)
; {
.dbline 84
; unsigned char i=0;
clr R20
.dbline 85
; reg+=0x80;//写标志
subi R16,128 ; addi 128
.dbline 86
; set_ds1305_io_ddr();
sbi 0x14,2
.dbline 89
; //asm("nop");
; //asm("nop");
; clr_ds1305_rst();
cbi 0x15,0
.dbline 90
; asm("nop");
nop
.dbline 91
; asm("nop");
nop
.dbline 92
; clr_ds1305_sclk();
cbi 0x15,1
.dbline 93
; asm("nop");
nop
.dbline 94
; asm("nop");
nop
.dbline 95
; set_ds1305_rst();
sbi 0x15,0
.dbline 96
; asm("nop");
nop
.dbline 97
; asm("nop");
nop
.dbline 98
; for(i=8;i>0;i--)
ldi R20,8
rjmp L11
L8:
.dbline 99
; {
.dbline 100
; if(reg&0x01) set_ds1305_io();
sbrs R16,0
rjmp L12
.dbline 100
sbi 0x15,2
rjmp L13
L12:
.dbline 101
; else clr_ds1305_io();
cbi 0x15,2
L13:
.dbline 102
nop
.dbline 103
nop
.dbline 104
sbi 0x15,1
.dbline 105
nop
.dbline 106
nop
.dbline 107
cbi 0x15,1
.dbline 108
nop
.dbline 109
nop
.dbline 110
lsr R16
.dbline 111
L9:
.dbline 98
dec R20
L11:
.dbline 98
clr R2
cp R2,R20
brlo L8
.dbline 112
; asm("nop");
; asm("nop");
; set_ds1305_sclk();
; asm("nop");
; asm("nop");
; clr_ds1305_sclk();
; asm("nop");
; asm("nop");
; reg>>=1;
; }
; for(i=8;i>0;i--)
ldi R20,8
rjmp L17
L14:
.dbline 113
; {
.dbline 114
; if(data&0x01) set_ds1305_io();
sbrs R18,0
rjmp L18
.dbline 114
sbi 0x15,2
rjmp L19
L18:
.dbline 115
; else clr_ds1305_io();
cbi 0x15,2
L19:
.dbline 116
nop
.dbline 117
nop
.dbline 118
sbi 0x15,1
.dbline 119
nop
.dbline 120
nop
.dbline 121
cbi 0x15,1
.dbline 122
nop
.dbline 123
nop
.dbline 124
lsr R18
.dbline 125
L15:
.dbline 112
dec R20
L17:
.dbline 112
clr R2
cp R2,R20
brlo L14
.dbline 126
; asm("nop");
; asm("nop");
; set_ds1305_sclk();
; asm("nop");
; asm("nop");
; clr_ds1305_sclk();
; asm("nop");
; asm("nop");
; data>>=1;
; }
; clr_ds1305_rst();
cbi 0x15,0
.dbline 127
; asm("nop");
nop
.dbline 128
; asm("nop");
nop
.dbline 129
; clr_ds1305_io_ddr();
cbi 0x14,2
.dbline 130
; asm("nop");
nop
.dbline 131
; asm("nop");
nop
.dbline -2
L7:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r data 18 c
.dbsym r reg 16 c
.dbend
.dbfunc e ds1305_read _ds1305_read fc
; data -> R20
; i -> R22
; reg -> R16
.even
_ds1305_read::
rcall push_gset2
.dbline -1
.dbline 134
; }
; unsigned char ds1305_read(unsigned char reg)
; {
.dbline 135
; unsigned char data=0;
clr R20
.dbline 136
; unsigned char i=0;
clr R22
.dbline 138
;
; set_ds1305_io_ddr();
sbi 0x14,2
.dbline 141
; //asm("nop");
; //asm("nop");
; clr_ds1305_rst();
cbi 0x15,0
.dbline 142
; asm("nop");
nop
.dbline 143
; asm("nop");
nop
.dbline 144
; clr_ds1305_sclk();
cbi 0x15,1
.dbline 145
; asm("nop");
nop
.dbline 146
; asm("nop");
nop
.dbline 147
; set_ds1305_rst();
sbi 0x15,0
.dbline 148
; asm("nop");
nop
.dbline 149
; asm("nop");
nop
.dbline 150
; for(i=8;i>0;i--)
ldi R22,8
rjmp L24
L21:
.dbline 151
; {
.dbline 153
;
; if(reg&0x01) set_ds1305_io();
sbrs R16,0
rjmp L25
.dbline 153
sbi 0x15,2
rjmp L26
L25:
.dbline 154
; else clr_ds1305_io();
cbi 0x15,2
L26:
.dbline 155
nop
.dbline 156
nop
.dbline 157
sbi 0x15,1
.dbline 158
nop
.dbline 159
nop
.dbline 160
cbi 0x15,1
.dbline 161
nop
.dbline 162
nop
.dbline 163
lsr R16
.dbline 164
L22:
.dbline 150
dec R22
L24:
.dbline 150
clr R2
cp R2,R22
brlo L21
.dbline 165
; asm("nop");
; asm("nop");
; set_ds1305_sclk();
; asm("nop");
; asm("nop");
; clr_ds1305_sclk();
; asm("nop");
; asm("nop");
; reg>>=1;
; }
; clr_ds1305_io_ddr();
cbi 0x14,2
.dbline 166
; asm("nop");
nop
.dbline 167
; asm("nop");
nop
.dbline 168
; for(i=8;i>0;i--)
ldi R22,8
rjmp L30
L27:
.dbline 169
; {
.dbline 170
; data>>=1;
lsr R20
.dbline 171
; if(in_ds1305_io()) data|=0x80;
sbis 0x13,2
rjmp L31
.dbline 171
ori R20,128
L31:
.dbline 172
nop
.dbline 173
nop
.dbline 174
sbi 0x15,1
.dbline 175
nop
.dbline 176
nop
.dbline 177
cbi 0x15,1
.dbline 178
nop
.dbline 179
nop
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -