⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds1302_main.s

📁 16个单片机c语言实验程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module ds1302_main.c
	.area text(rom, con, rel)
	.dbfile E:\16实验程序\ds1302\ds1302_main.c
	.dbfile E:\16实验程序\ds1302\ds1302.h
	.dbfunc e ds1302_write_byte _ds1302_write_byte fV
;              i -> R20
;              d -> R18
;           addr -> R16
	.even
_ds1302_write_byte::
	st -y,R20
	.dbline -1
	.dbline 37
; //时钟电路DS1302试验程序
; //使用1602液晶显示
; 
; #include "iom16v.h"
; #include "ds1302.h"
; #include "1602.h"
; 
; uchar aa[]={'-'};
; //时钟数据
; unsigned char time_data[8] = {0x21,0x11,0x11,0x12,0x18,0x52,0x00,0x02};
; 
; //在16M延时1ms的延时函数
; void s_1ms(unsigned int ms)
; {
;     unsigned int aa;
; 	for(;ms>=1;ms--)
; 	{
; 	for(aa=0;aa<=2000;aa++)
; 	{;}
; 	}
; }	
; 
; //主函数
; void main() 
; {
; 	unsigned char temp;
; 	//端口初始化
; 	PORTA = 0xFF;				
; 	DDRA = 0xFF;				
; 	PORTB = 0xF0;				
; 	DDRB = 0xFF;				
; 	PORTC = 0x7F;
; 	DDRC = 0x80;
; 	PORTD = 0x00;
; 	DDRD = 0xFF;
; 
; 	s_1ms(20);
	.dbline 40
; 	//1602液晶初始化
; 	LcdInit();
; 	//时钟芯片DS1302初始化
	sbi 0x15,6
	.dbline 43
; 	ds1302_init();
; 	s_1ms(10);
; 	//写入初始的时间
	sbi 0x14,1
	.dbline 44
; 	ds1302_write_time(time_data);
	andi R16,254
	.dbline 45
; 
	clr R20
	xjmp L5
L2:
	.dbline 45
	.dbline 46
; 	while (1) {
	sbrs R16,0
	rjmp L6
X0:
	.dbline 46
	.dbline 47
; 		s_1ms(100);
	sbi 0x15,1
	.dbline 48
; 		//读出时钟数据
	xjmp L7
L6:
	.dbline 49
; 		ds1302_read_time(time_data);
	.dbline 50
; 	    //显示年份
	cbi 0x15,1
	.dbline 51
; 		WriteNum(1,3,2);   //2
L7:
	.dbline 52
; 		WriteNum(1,4,0);   //0
	sbi 0x15,0
	.dbline 53
; 		temp = (time_data[1] >> 4) ;
	cbi 0x15,0
	.dbline 54
; 		WriteNum(1,5,temp);
	lsr R16
	.dbline 55
; 		temp = (time_data[1] & 0x0F);
L3:
	.dbline 45
	inc R20
L5:
	.dbline 45
	cpi R20,8
	brlo L2
X1:
	.dbline 58
; 		WriteNum(1,6,temp);
; 		WriteChar(1,7,2,aa);
; 		
	sbi 0x14,1
	.dbline 59
; 		temp = (time_data[2] >> 4);
	clr R20
	xjmp L11
L8:
	.dbline 59
	.dbline 60
; 		WriteNum(1,8,temp);
	sbrs R18,0
	rjmp L12
X2:
	.dbline 60
	.dbline 61
; 		temp = (time_data[2] & 0x0F);
	sbi 0x15,1
	.dbline 62
; 		WriteNum(1,9,temp);
	xjmp L13
L12:
	.dbline 63
; 		WriteChar(1,10,2,aa);
	.dbline 64
; 		
	cbi 0x15,1
	.dbline 65
; 		temp = (time_data[3] >> 4);
L13:
	.dbline 66
; 		WriteNum(1,11,temp);
	sbi 0x15,0
	.dbline 67
; 		temp = (time_data[3] & 0x0F);
	cbi 0x15,0
	.dbline 68
; 		WriteNum(1,12,temp);
	lsr R18
	.dbline 69
; 		
L9:
	.dbline 59
	inc R20
L11:
	.dbline 59
	cpi R20,8
	brlo L8
X3:
	.dbline 70
; 		temp = (time_data[4] >> 4);
	cbi 0x15,6
	.dbline -2
L1:
	.dbline 0 ; func end
	ld R20,y+
	ret
	.dbsym r i 20 c
	.dbsym r d 18 c
	.dbsym r addr 16 c
	.dbend
	.dbfunc e ds1302_read_byte _ds1302_read_byte fc
;           temp -> R20
;              i -> R22
;           addr -> R16
	.even
_ds1302_read_byte::
	st -y,R20
	st -y,R22
	.dbline -1
	.dbline 74
; 		WriteNum(2,4,temp);
; 		temp = (time_data[4] & 0x0F);
; 		WriteNum(2,5,temp);
; 		WriteChar(2,6,2,aa);
	.dbline 78
; 		
; 		temp = (time_data[5] >> 4);
; 		WriteNum(2,7,temp);
; 		temp = (time_data[5] & 0x0F);
	sbi 0x15,6
	.dbline 81
; 		WriteNum(2,8,temp);
; 		WriteChar(2,9,2,aa);
; 		
	sbi 0x14,1
	.dbline 82
; 		temp = (time_data[6] >> 4);
	ori R16,1
	.dbline 83
; 		WriteNum(2,10,temp);
	clr R22
	xjmp L18
L15:
	.dbline 83
	.dbline 84
; 		temp = (time_data[6] & 0x0F);
	sbrs R16,0
	rjmp L19
X4:
	.dbline 84
	.dbline 85
; 		WriteNum(2,11,temp);
	sbi 0x15,1
	.dbline 86
; 		}
	xjmp L20
L19:
	.dbline 87
; }
	.dbline 88
	cbi 0x15,1
	.dbline 89
L20:
	.dbline 90
	sbi 0x15,0
	.dbline 91
	cbi 0x15,0
	.dbline 92
	lsr R16
	.dbline 93
L16:
	.dbline 83
	inc R22
L18:
	.dbline 83
	cpi R22,8
	brlo L15
X5:
	.dbline 96
	cbi 0x14,1
	.dbline 97
	clr R22
	xjmp L24
L21:
	.dbline 97
	.dbline 98
	lsr R20
	.dbline 99
	sbis 0x13,1
	rjmp L25
X6:
	.dbline 99
	.dbline 100
	ori R20,128
	.dbline 101
	xjmp L26
L25:
	.dbline 102
	.dbline 103
	andi R20,127
	.dbline 104
L26:
	.dbline 105
	sbi 0x15,0
	.dbline 106
	cbi 0x15,0
	.dbline 107
L22:
	.dbline 97
	inc R22
L24:
	.dbline 97
	cpi R22,8
	brlo L21
X7:
	.dbline 109
	cbi 0x15,6
	.dbline 110
	mov R16,R20
	.dbline -2
L14:
	.dbline 0 ; func end
	ld R22,y+
	ld R20,y+
	ret
	.dbsym r temp 20 c
	.dbsym r i 22 c
	.dbsym r addr 16 c
	.dbend
	.dbfunc e ds1302_write_time _ds1302_write_time fV
;      time_data -> R20,R21
	.even
_ds1302_write_time::
	st -y,R20
	st -y,R21
	movw R20,R16
	.dbline -1
	.dbline 115
	.dbline 117
	clr R18
	ldi R16,142
	xcall _ds1302_write_byte
	.dbline 118
	ldi R18,128
	ldi R16,128
	xcall _ds1302_write_byte
	.dbline 119
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 120
	movw R30,R20
	ld R18,Z+
	movw R20,R30
	ldi R16,140
	xcall _ds1302_write_byte
	.dbline 121
	movw R30,R20
	ld R18,Z+
	movw R20,R30
	ldi R16,136
	xcall _ds1302_write_byte
	.dbline 122
	movw R30,R20
	ld R18,Z+
	movw R20,R30
	ldi R16,134
	xcall _ds1302_write_byte
	.dbline 123
	movw R30,R20
	ld R18,Z+
	movw R20,R30
	ldi R16,132
	xcall _ds1302_write_byte
	.dbline 124
	movw R30,R20
	ld R18,Z+
	movw R20,R30
	ldi R16,130
	xcall _ds1302_write_byte
	.dbline 125
	movw R30,R20
	ld R18,Z+
	movw R20,R30
	ldi R16,128
	xcall _ds1302_write_byte
	.dbline 126
	movw R30,R20
	ldd R18,z+0
	ldi R16,138
	xcall _ds1302_write_byte
	.dbline 127
	ldi R18,128
	ldi R16,142
	xcall _ds1302_write_byte
	.dbline -2
L27:
	.dbline 0 ; func end
	ld R21,y+
	ld R20,y+
	ret
	.dbsym r time_data 20 pc
	.dbend
	.dbfunc e ds1302_read_time _ds1302_read_time fV
;      time_data -> R20,R21
	.even
_ds1302_read_time::
	xcall push_xgsetF00C
	movw R20,R16
	.dbline -1
	.dbline 131
	.dbline 132
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 133
	ldi R16,140
	xcall _ds1302_read_byte
	movw R30,R20
	std z+0,R16
	.dbline 134
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 135
	ldi R16,136
	xcall _ds1302_read_byte
	movw R30,R20
	std z+0,R16
	.dbline 136
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 137
	ldi R16,134
	xcall _ds1302_read_byte
	mov R10,R16
	movw R30,R20
	std z+0,R10
	.dbline 138
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 139
	ldi R16,132
	xcall _ds1302_read_byte
	mov R10,R16
	movw R30,R20
	std z+0,R10
	.dbline 140
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 141
	ldi R16,130
	xcall _ds1302_read_byte
	mov R10,R16
	movw R30,R20
	std z+0,R10
	.dbline 142
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 143
	ldi R16,128
	xcall _ds1302_read_byte
	mov R22,R16
	mov R24,R22
	andi R24,127
	movw R30,R20
	std z+0,R24
	.dbline 144
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 145
	ldi R16,138
	xcall _ds1302_read_byte
	mov R10,R16
	movw R30,R20
	std z+0,R10
	.dbline -2
L28:
	.dbline 0 ; func end
	xjmp pop_xgsetF00C
	.dbsym r time_data 20 pc
	.dbend
	.dbfunc e ds1302_init _ds1302_init fV
	.even
_ds1302_init::
	.dbline -1
	.dbline 149
	.dbline 151
	cbi 0x15,6
	.dbline 152
	cbi 0x15,0
	.dbline 153
	sbi 0x14,6
	.dbline 154
	sbi 0x14,0
	.dbline -2
L29:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfile E:\16实验程序\ds1302\1602.h
	.dbfunc e s_ms _s_ms fV
;             ms -> R16,R17
	.even
_s_ms::
	.dbline -1
	.dbline 9
; #define uchar unsigned char 
; #define uint unsigned int 
; 
; #define RS 5
; #define RW 6
; #define EN 7
; 
; void s_ms(uint ms)
; {
	.dbline 10
; 	for(;ms>1;ms--);
	xjmp L34
L31:
	.dbline 10
L32:
	.dbline 10
	subi R16,1
	sbci R17,0
L34:
	.dbline 10
	ldi R24,1
	ldi R25,0
	cp R24,R16
	cpc R25,R17
	brlo L31
X8:
	.dbline -2
L30:
	.dbline 0 ; func end
	ret
	.dbsym r ms 16 i
	.dbend
	.dbfunc e busy _busy fV
;           temp -> R20
	.even
_busy::
	st -y,R20
	.dbline -1
	.dbline 15
; }	
; 
; //查忙
; void busy(void)
; {
	.dbline 17
;     uchar temp;
; 	s_ms(500);
	ldi R16,500
	ldi R17,1
	xcall _s_ms
	.dbline 18
; 	PORTA&=~(1<<RS);    //RS=0
	cbi 0x1b,5
	.dbline 19
; 	s_ms(500);
	ldi R16,500
	ldi R17,1
	xcall _s_ms
	.dbline 20
; 	PORTA|=(1<<RW);     //RW=1
	sbi 0x1b,6
	.dbline 21
; 	s_ms(500);
	ldi R16,500
	ldi R17,1
	xcall _s_ms
	xjmp L37
L36:
	.dbline 23
; 	while(temp)
; 	{
	.dbline 24
; 		PORTA|=(1<<EN); //EN=1
	sbi 0x1b,7
	.dbline 25
; 		s_ms(500);
	ldi R16,500
	ldi R17,1
	xcall _s_ms
	.dbline 26
; 		DDRD=0x00;      //A口变输入
	clr R2
	out 0x11,R2
	.dbline 27
; 		PORTD=0xff;     //上拉使能
	ldi R24,255
	out 0x12,R24
	.dbline 28
; 		s_ms(500);
	ldi R16,500
	ldi R17,1
	xcall _s_ms
	.dbline 29
; 		temp = PIND&0x80;    //读取A口
	in R20,0x10
	andi R20,128
	.dbline 30
; 		s_ms(500);      
	ldi R16,500
	ldi R17,1
	xcall _s_ms
	.dbline 31
; 		DDRD=0xff;      
	ldi R24,255
	out 0x11,R24
	.dbline 32
; 		PORTD=0xff;        //A口变输出
	out 0x12,R24
	.dbline 33
; 		s_ms(500);
	ldi R16,500
	ldi R17,1
	xcall _s_ms
	.dbline 34
; 		PORTA&=~(1<<EN);   //EN=0
	cbi 0x1b,7
	.dbline 35
; 		s_ms(500);
	ldi R16,500
	ldi R17,1
	xcall _s_ms
	.dbline 36
; 	}
L37:
	.dbline 22
	tst R20
	brne L36
X9:
	.dbline -2
L35:
	.dbline 0 ; func end
	ld R20,y+
	ret
	.dbsym r temp 20 c
	.dbend
	.dbfunc e writecom _writecom fV
;            com -> R10
	.even
_writecom::
	st -y,R10
	mov R10,R16
	.dbline -1
	.dbline 41
; }
; 
; //写指令
; void writecom(uchar	com)
; {
	.dbline 42
; 	busy();
	xcall _busy
	.dbline 43
; 	s_ms(500);
	ldi R16,500
	ldi R17,1
	xcall _s_ms
	.dbline 44
; 	PORTA&=~(1<<RS);   //RS=0
	cbi 0x1b,5
	.dbline 45
; 	s_ms(500);
	ldi R16,500
	ldi R17,1
	xcall _s_ms
	.dbline 46
; 	PORTA&=~(1<<RW);   //RW=0
	cbi 0x1b,6
	.dbline 47
; 	s_ms(500);
	ldi R16,500
	ldi R17,1
	xcall _s_ms
	.dbline 48
; 	PORTA|=(1<<EN);    //EN=1
	sbi 0x1b,7
	.dbline 49
; 	s_ms(500);
	ldi R16,500
	ldi R17,1
	xcall _s_ms
	.dbline 50
; 	PORTD = com;       //输出指令
	out 0x12,R10
	.dbline 51
; 	s_ms(500);
	ldi R16,500
	ldi R17,1
	xcall _s_ms
	.dbline 52
; 	PORTA&=~(1<<EN);   //EN=0
	cbi 0x1b,7
	.dbline 53
; 	s_ms(500);
	ldi R16,500
	ldi R17,1
	xcall _s_ms
	.dbline -2
L39:
	.dbline 0 ; func end
	ld R10,y+
	ret
	.dbsym r com 10 c
	.dbend
	.dbfunc e LcdInit _LcdInit fV
	.even
_LcdInit::
	.dbline -1
	.dbline 58
; }
; 
; //1602初始化
; void	LcdInit(void)
; {
	.dbline 59
;     DDRD = 0xff; 
	ldi R24,255
	out 0x11,R24
	.dbline 60
;     PORTD = 0x00; 
	clr R2
	out 0x12,R2
	.dbline 61
; 	writecom(0x38);
	ldi R16,56
	xcall _writecom
	.dbline 62
; 	s_ms(1000);
	ldi R16,1000
	ldi R17,3
	xcall _s_ms
	.dbline 63
; 	writecom(0x01);
	ldi R16,1
	xcall _writecom
	.dbline 64
; 	s_ms(1000);
	ldi R16,1000
	ldi R17,3
	xcall _s_ms
	.dbline 65
; 	s_ms(1000);
	ldi R16,1000
	ldi R17,3
	xcall _s_ms
	.dbline 66
; 	s_ms(1000);
	ldi R16,1000
	ldi R17,3
	xcall _s_ms
	.dbline 67
; 	s_ms(1000);
	ldi R16,1000
	ldi R17,3
	xcall _s_ms
	.dbline 68
; 	s_ms(1000);
	ldi R16,1000
	ldi R17,3
	xcall _s_ms
	.dbline 69
; 	s_ms(1000);
	ldi R16,1000
	ldi R17,3
	xcall _s_ms
	.dbline 70
; 	s_ms(1000);
	ldi R16,1000
	ldi R17,3
	xcall _s_ms
	.dbline 71
; 	writecom(0x02);
	ldi R16,2
	xcall _writecom
	.dbline 72
; 	s_ms(1000);
	ldi R16,1000
	ldi R17,3
	xcall _s_ms
	.dbline 73
; 	writecom(0x06);
	ldi R16,6
	xcall _writecom
	.dbline 74
; 	s_ms(1000);
	ldi R16,1000
	ldi R17,3
	xcall _s_ms
	.dbline 75
; 	writecom(0x0c);
	ldi R16,12
	xcall _writecom
	.dbline 76
; 	s_ms(1000);
	ldi R16,1000
	ldi R17,3
	xcall _s_ms
	.dbline 77
; 	writecom(0x38);	
	ldi R16,56
	xcall _writecom
	.dbline 78
; 	s_ms(1000);
	ldi R16,1000
	ldi R17,3
	.dbline -2
L40:
	.dbline 0 ; func end
	xjmp _s_ms
	.dbend
	.dbfunc e writedata _writedata fV
;           data -> R10
	.even
_writedata::
	st -y,R10
	mov R10,R16
	.dbline -1
	.dbline 83
; }	
; 
; //写数据
; void	writedata(uchar data)
; {
	.dbline 84
; 	busy();
	xcall _busy
	.dbline 85
; 	s_ms(500);
	ldi R16,500
	ldi R17,1
	xcall _s_ms
	.dbline 86
; 	PORTA|=(1<<RS);   //RS=1
	sbi 0x1b,5
	.dbline 87
; 	s_ms(500);
	ldi R16,500
	ldi R17,1
	xcall _s_ms
	.dbline 88
; 	PORTA&=~(1<<RW);   //RW=0
	cbi 0x1b,6
	.dbline 89
; 	s_ms(500);
	ldi R16,500
	ldi R17,1
	xcall _s_ms
	.dbline 90
; 	PORTA|=(1<<EN);    //EN=1
	sbi 0x1b,7
	.dbline 91
; 	s_ms(500);
	ldi R16,500
	ldi R17,1
	xcall _s_ms
	.dbline 92
; 	PORTD = data;      //输出数据
	out 0x12,R10
	.dbline 93
; 	s_ms(500);
	ldi R16,500
	ldi R17,1
	xcall _s_ms
	.dbline 94
; 	PORTA&=~(1<<EN);   //EN=0
	cbi 0x1b,7
	.dbline 95
; 	s_ms(500);
	ldi R16,500
	ldi R17,1
	xcall _s_ms
	.dbline -2
L41:
	.dbline 0 ; func end
	ld R10,y+
	ret
	.dbsym r data 10 c
	.dbend
	.dbfunc e readdata _readdata fc
;           temp -> R10
	.even
_readdata::
	st -y,R10
	.dbline -1
	.dbline 101
; }
; 
; 
; //读数据
; uchar	readdata(void)
; {
	.dbline 103
; 	uchar temp;
; 	busy();
	xcall _busy
	.dbline 104
; 	s_ms(500);
	ldi R16,500
	ldi R17,1
	xcall _s_ms
	.dbline 105
; 	PORTA|=(1<<RS);  //RS=1
	sbi 0x1b,5
	.dbline 106
; 	s_ms(500);
	ldi R16,500
	ldi R17,1
	xcall _s_ms
	.dbline 107
; 	PORTA|=(1<<RW);  //RW=1
	sbi 0x1b,6
	.dbline 108
; 	s_ms(500);
	ldi R16,500
	ldi R17,1
	xcall _s_ms
	.dbline 109
; 	PORTA|=(1<<EN);  //EN=1
	sbi 0x1b,7
	.dbline 110
; 	s_ms(500);
	ldi R16,500
	ldi R17,1
	xcall _s_ms
	.dbline 111
; 	DDRD=0x00;       //A端口变输入
	clr R2
	out 0x11,R2
	.dbline 112
; 	s_ms(500);
	ldi R16,500
	ldi R17,1
	xcall _s_ms
	.dbline 113
; 	temp = PIND;     //读A端口
	in R10,0x10
	.dbline 114
; 	s_ms(500);
	ldi R16,500
	ldi R17,1

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -