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

📄 1302模块.s

📁 mega8515通过的DS1302芯片使用程序
💻 S
字号:
	.module _1302模块.c
	.area text(rom, con, rel)
	.dbfile D:\AVR实验\DS1302时间芯片\1302模块.c
	.dbfunc e Delayus _Delayus fV
;              i -> R16
	.even
_Delayus::
	.dbline -1
	.dbline 29
; #include <iom8515v.h>
; #include <macros.h>
; 
; #define uchar unsigned char
; #define uint  unsigned int
; 
; #define ds1302_clk  PC1
; #define ds1302_data PC2
; #define ds1302_rst  PC3
; 
; #define Set_ds1302_clk  PORTC |=(1<<ds1302_clk)
; #define Set_ds1302_data PORTC |=(1<<ds1302_data)
; #define Set_ds1302_rst  PORTC |=(1<<ds1302_rst)
; 
; #define Clr_ds1302_clk  PORTC &=~(1<<ds1302_clk)
; #define Clr_ds1302_data PORTC &=~(1<<ds1302_data)
; #define Clr_ds1302_rst  PORTC &=~(1<<ds1302_rst)
; 
; #define read_data       PORTC &=~(1<<ds1302_data)
; 
; #define uchar unsigned char
; #define uint  unsigned int
; 
; uchar ReadSec(void);
; 
; 
; 
; void Delayus(uchar i)
;  {
L2:
	.dbline 30
L3:
	.dbline 30
;   while(--i);
	mov R24,R16
	subi R24,1
	mov R16,R24
	tst R24
	brne L2
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbend
	.dbfunc e ReadSec _ReadSec fc
	.even
_ReadSec::
	.dbline -1
	.dbline 35
;  }
; 
; 
; uchar ReadSec(void)    			
; {
	.dbline 36
;     return ReadRTC_Byte(0x81);
	ldi R16,129
	ldi R17,0
	rcall _ReadRTC_Byte
	.dbline -2
L5:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e ReadMin _ReadMin fc
	.even
_ReadMin::
	.dbline -1
	.dbline 39
; }
; uchar ReadMin(void)    		
; {
	.dbline 40
;     return ReadRTC_Byte(0x83);
	ldi R16,131
	ldi R17,0
	rcall _ReadRTC_Byte
	.dbline -2
L6:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e ReadHour _ReadHour fc
	.even
_ReadHour::
	.dbline -1
	.dbline 43
; }
; uchar ReadHour(void)
; {
	.dbline 44
;    return ReadRTC_Byte(0x85);
	ldi R16,133
	ldi R17,0
	rcall _ReadRTC_Byte
	.dbline -2
L7:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e WriteSec _WriteSec fV
;         number -> R20
	.even
_WriteSec::
	rcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 50
; }
; 
; 
; 
; void WriteSec(uchar number)    	
; {
	.dbline 51
;     WriteRTC_Byte(0x80,number);
	mov R18,R20
	clr R19
	ldi R16,128
	ldi R17,0
	rcall _WriteRTC_Byte
	.dbline -2
L8:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r number 20 c
	.dbend
	.dbfunc e WriteMin _WriteMin fV
;         number -> R20
	.even
_WriteMin::
	rcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 54
; }
; void WriteMin(uchar number)    		
; {
	.dbline 55
;     WriteRTC_Byte(0x82,number);
	mov R18,R20
	clr R19
	ldi R16,130
	ldi R17,0
	rcall _WriteRTC_Byte
	.dbline -2
L9:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r number 20 c
	.dbend
	.dbfunc e WriteHour _WriteHour fV
;         number -> R20
	.even
_WriteHour::
	rcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 58
; }
; void WriteHour(uchar number)    		//向DS1302中写入分字节
; {
	.dbline 59
;     WriteRTC_Byte(0x84,number);
	mov R18,R20
	clr R19
	ldi R16,132
	ldi R17,0
	rcall _WriteRTC_Byte
	.dbline -2
L10:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r number 20 c
	.dbend
	.dbfunc e ReadRTC_Byte _ReadRTC_Byte fi
;         redata -> R20,R21
;        address -> R20
	.even
_ReadRTC_Byte::
	rcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 66
; }
; 
; 
; 
; 
; uint ReadRTC_Byte(uchar address)    			
; {
	.dbline 71
;     unsigned int  redata;
;     
; 	
; 	
; 	Clr_ds1302_rst;//ds1302_rst = 0; 			
	cbi 0x15,3
	.dbline 72
;     Clr_ds1302_clk;//ds1302_clk = 0; 				
	cbi 0x15,1
	.dbline 73
;     Set_ds1302_rst;//ds1302_rst = 1;				
	sbi 0x15,3
	.dbline 74
;     Write(address);				
	mov R16,R20
	clr R17
	rcall _Write
	.dbline 75
; 	redata=Read(address);			
	mov R16,R20
	clr R17
	rcall _Read
	movw R20,R16
	.dbline 76
; 	Clr_ds1302_rst;//ds1302_rst = 0;
	cbi 0x15,3
	.dbline 77
; 	Set_ds1302_clk;//ds1302_clk = 1; 
	sbi 0x15,1
	.dbline 78
;    return read_data;				
	in R24,0x15
	andi R24,251
	out 0x15,R24
	mov R16,R24
	clr R17
	.dbline -2
L11:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r redata 20 i
	.dbsym r address 20 c
	.dbend
	.dbfunc e WriteRTC_Byte _WriteRTC_Byte fV
;         number -> R20
;        address -> R22
	.even
_WriteRTC_Byte::
	rcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 82
; }
; 
; void WriteRTC_Byte(uchar address,uchar number)   
; {
	.dbline 83
;     Clr_ds1302_clk;//ds1302_clk = 0;
	cbi 0x15,1
	.dbline 84
;     Clr_ds1302_rst;// ds1302_rst = 0;
	cbi 0x15,3
	.dbline 85
; 	Set_ds1302_rst;//ds1302_rst = 1;  
	sbi 0x15,3
	.dbline 86
;     Write(address);				 
	mov R16,R22
	clr R17
	rcall _Write
	.dbline 87
; 	Write(number);				
	mov R16,R20
	clr R17
	rcall _Write
	.dbline 88
;     Clr_ds1302_rst;//ds1302_rst = 0; 
	cbi 0x15,3
	.dbline 89
; 	Set_ds1302_clk;//ds1302_clk = 1;
	sbi 0x15,1
	.dbline -2
L12:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r number 20 c
	.dbsym r address 22 c
	.dbend
	.dbfunc e Write_bit _Write_bit fV
;              i -> R20
;           addr -> R16
	.even
_Write_bit::
	rcall push_gset1
	.dbline -1
	.dbline 97
; }
; 				
; 
; 
; 
; 
; void Write_bit (uchar addr)				
; {
	.dbline 98
;   uchar i=0;
	clr R20
	.dbline 99
	ldi R20,8
	rjmp L17
L14:
	.dbline 99
;  for(i=8;i>0;i--){
	.dbline 100
; 	if((addr&0x01)==0x01)
	mov R24,R16
	andi R24,1
	cpi R24,1
	brne L18
	.dbline 101
; 	   Set_ds1302_data;//ds1302_dat = 1;
	sbi 0x15,2
	rjmp L19
L18:
	.dbline 103
;     else
; 		Clr_ds1302_data;//ds1302_dat = 0;
	cbi 0x15,2
L19:
	.dbline 104
	sbi 0x15,1
	.dbline 105
	cbi 0x15,1
	.dbline 106
	lsr R16
	.dbline 107
L15:
	.dbline 99
	dec R20
L17:
	.dbline 99
	clr R2
	cp R2,R20
	brlo L14
	.dbline -2
L13:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r addr 16 c
	.dbend
	.dbfunc e Read_bit _Read_bit fc
;         data_r -> R20
;            num -> R22
;              i -> R10
;           addr -> R20
	.even
_Read_bit::
	rcall push_gset3
	mov R20,R16
	.dbline -1
	.dbline 111
;     Set_ds1302_clk;//ds1302_clk=1;
; 	Clr_ds1302_clk;//ds1302_clk=0;
; 	addr>>=1;
;  }
; }
; 
; uchar Read_bit (uchar addr)				
; {
	.dbline 112
; uchar i=0,num;
	clr R10
	.dbline 113
; uchar data_r=0;;
	clr R20
	.dbline 113
	.dbline 114
; Delayus(2);
	ldi R16,2
	rcall _Delayus
	.dbline 116
	ldi R24,8
	mov R10,R24
	rjmp L24
L21:
	.dbline 116
;  //ds1302_dat = 1;
;   for(i=8;i>0;i--){
	.dbline 117
; 	data_r>>=1;
	lsr R20
	.dbline 118
; 	read_data;
	cbi 0x15,2
	.dbline 119
; 	num=PINC&0x04;
	in R22,0x13
	andi R22,4
	.dbline 120
; 	if(num == 1)
	cpi R22,1
	brne L25
	.dbline 121
; 	{
	.dbline 122
; 		data_r|=0x80;
	ori R20,128
	.dbline 123
; 	}	
L25:
	.dbline 124
	sbi 0x15,1
	.dbline 125
	cbi 0x15,1
	.dbline 126
L22:
	.dbline 116
	dec R10
L24:
	.dbline 116
	clr R2
	cp R2,R10
	brlo L21
	.dbline 127
; 	Set_ds1302_clk;//ds1302_clk = 1;	
; 	Clr_ds1302_clk;//ds1302_clk = 0; 
;   }
; return data_r;
	mov R16,R20
	.dbline -2
L20:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r data_r 20 c
	.dbsym r num 22 c
	.dbsym r i 10 c
	.dbsym r addr 20 c
	.dbend

⌨️ 快捷键说明

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