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

📄 ds1302.s

📁 DS1302
💻 S
📖 第 1 页 / 共 5 页
字号:
	.module DS1302.c
	.area data(ram, con, rel)
_WriteAddress::
	.blkb 2
	.area idata
	.byte 140,136
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 134,132
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 130,128
	.area data(ram, con, rel)
	.blkb 1
	.area idata
	.byte 138
	.area data(ram, con, rel)
	.dbfile E:\biyesheji\SUCCES~1\SENDSE~1\SETPFI~2\程序/ds1302.h
	.dbsym e WriteAddress _WriteAddress A[7:7]c
_WriteTime::
	.blkb 2
	.area idata
	.byte 7,5
	.area data(ram, con, rel)
	.dbfile E:\biyesheji\SUCCES~1\SENDSE~1\SETPFI~2\程序/ds1302.h
	.blkb 2
	.area idata
	.byte 2,19
	.area data(ram, con, rel)
	.dbfile E:\biyesheji\SUCCES~1\SENDSE~1\SETPFI~2\程序/ds1302.h
	.blkb 2
	.area idata
	.byte 'P,48
	.area data(ram, con, rel)
	.dbfile E:\biyesheji\SUCCES~1\SENDSE~1\SETPFI~2\程序/ds1302.h
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\biyesheji\SUCCES~1\SENDSE~1\SETPFI~2\程序/ds1302.h
	.dbsym e WriteTime _WriteTime A[7:7]c
	.area text(rom, con, rel)
	.dbfile E:\biyesheji\SUCCES~1\SENDSE~1\SETPFI~2\程序/ds1302.h
	.dbfunc e DS1302_set _DS1302_set fV
;              i -> R16
	.even
_DS1302_set::
	.dbline -1
	.dbline 49
; //ICC-AVR 修改日期: 2007-05-01 15:38:44
; //PC3:功能按键
; //PC4:移位按键
; //PC5:加一按键
; //PB0:减一按键
; //  CenWenJiao
; // Target : M8
; // Crystal: 1.0000Mhz
; //2007.05.01 21:08:CC 完成时间调整程序
; #include <iom8v.h>
; #include <macros.h>
; #include "ds1302.h"
; #include "DELAY.C"
; #include "LCD.h"    //eureka
; 
; /*cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
;                              单片机初始化程序
; ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
; void port_init(void) //设置portb和portc端口
; {
;  PORTB = 0x01;//PB0 作为减一按键
;  DDRB  = 0x00;
;  PORTC = 0x38; //m103 output only//PC3; PC4; PC5; 功能,移位,加一
;  DDRC  = 0xC7;  
;  PORTD = 0x00;
;  DDRD  = 0xFF;
; }
; /*ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
;      1302初始化驱动
; cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
; void init_devices(void)
; {
;  //CLI(); //disable all interrupts
;  port_init();
;  DS1302_set();
;  //timer1_init();
;  MCUCR = 0x00;
;  GICR  = 0x00;
;  TIMSK = 0x04; 
;  //SEI(); //re-enable interrupts
; }
; /*ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
;      LCD1602初始化驱动
; cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
; void init_devicesl(void)
; {
;   //CLI(); //disable all interrupts
;   LCD_init();
;  // DS1302_set();
	.dbline 50
;   MCUCR = 0x00;
	cbi 0x15,1
	.dbline 51
;   GICR  = 0x00;
	cbi 0x15,0
	.dbline 52
;   TIMSK = 0x00; //timer interrupt sources
	clr R16
	rjmp L5
L2:
	.dbline 53
	.dbline 54
	nop
	.dbline 55
L3:
	.dbline 52
	inc R16
L5:
	.dbline 52
	cpi R16,8
	brlo L2
	.dbline 56
;  // SEI(); //re-enable interrupts
; }
; /*ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
;      基本的显示程序
	sbi 0x15,0
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbend
	.dbfunc e DS1302_Write _DS1302_Write fV
;              i -> R20,R21
;              x -> R22
	.even
_DS1302_Write::
	rcall push_gset2
	mov R22,R16
	.dbline -1
	.dbline 62
; cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
; void SendDataForDisplay(void)
; {
;     //DS1302_ReadTime();
;     //DataFenli();
;   
	.dbline 65
;     LCD_write_string(0,0,"time:");  
;     LCD_write_char(6,0,hourth+48);  //时
; 	LCD_write_char(7,0,hourtl+48);
	cbi 0x15,1
	.dbline 66
; 	LCD_write_char(8,0,45);
	sbi 0x14,2
	.dbline 67
; 	LCD_write_char(9,0,minuteth+48);  //分
	clr R20
	clr R21
L7:
	.dbline 68
; 	LCD_write_char(10,0,minutetl+48);
	.dbline 68
	cbi 0x15,1
	.dbline 69
; 	LCD_write_char(11,0,45);
	ldi R16,1
	ldi R17,0
	movw R18,R20
	rcall lsl16
	mov R2,R22
	clr R3
	and R2,R16
	and R3,R17
	tst R2
	brne X0
	tst R3
	breq L11
X0:
	.dbline 70
; 	LCD_write_char(12,0,secondth+48);
	sbi 0x15,2
	rjmp L12
L11:
	.dbline 72
;     LCD_write_char(13,0,secondtl+48); //秒
;     
	cbi 0x15,2
L12:
	.dbline 73
	nop
	.dbline 74
	sbi 0x15,1
	.dbline 75
	nop
	.dbline 76
L8:
	.dbline 67
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 67
	cpi R20,8
	ldi R30,0
	cpc R21,R30
	brlt L7
	.dbline 77
;     LCD_write_string(0,1,"data:");
;     LCD_write_char(6,1,yearth+48);
; 	LCD_write_char(7,1,yeartl+48);  //年
; 	LCD_write_char(8,1,45);
; 	LCD_write_char(9,1,monthth+48);  //月
	cbi 0x15,1
	.dbline -2
L6:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 I
	.dbsym r x 22 c
	.dbend
	.dbfunc e DS1302_WriteT _DS1302_WriteT fV
;           time -> R20
;            ddr -> R22
	.even
_DS1302_WriteT::
	rcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 81
; 	LCD_write_char(10,1,monthtl+48);
; 	LCD_write_char(11,1,45);
; 	LCD_write_char(12,1,dateth+48);  //日
;     LCD_write_char(13,1,datetl+48); 
	.dbline 82
;    
	rcall _DS1302_set
	.dbline 83
;    delay_nus(200);
	mov R16,R22
	rcall _DS1302_Write
	.dbline 84
; 
	mov R16,R20
	rcall _DS1302_Write
	.dbline -2
L13:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r time 20 c
	.dbsym r ddr 22 c
	.dbend
	.dbfunc e DS1302_Read _DS1302_Read fc
;              k -> R20
;           temp -> R22
;              i -> R10
;           addr -> R20
	.even
_DS1302_Read::
	rcall push_gset3
	mov R20,R16
	.dbline -1
	.dbline 90
; }
; /*ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
;  显示中调用的闪烁调用程序
; cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
;  void black(int m,int n)//闪烁
;  {
	.dbline 92
;  LCD_write_char(m,n,95);//95为闪烁时"下滑线"的代码
;   delay_nus(1000);
	clr R22
	.dbline 93
;  }
	sbi 0x14,2
	.dbline 94
; /*cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
	cbi 0x15,0
	.dbline 95
;   /*设置分钟,秒,加法子程序*/
	cbi 0x15,1
	.dbline 96
; /*cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
	nop
	.dbline 97
; void PlusForSET(int i)           
	nop
	.dbline 98
; 	       {    
	nop
	.dbline 99
; 	        if(WriteTime[i]==0x09)  //writetime[i] 是定义存储写地址的数组
	nop
	.dbline 100
; 			{ WriteTime[i]=0x0f;
	sbi 0x15,0
	.dbline 101
; 			  }
	mov R22,R20
	.dbline 102
; 			if(WriteTime[i]==0x19)
	clr R10
	rjmp L18
L15:
	.dbline 103
; 		    {WriteTime[i]=0x1f;
	.dbline 104
; 			} 
	ldi R16,1
	mov R17,R10
	rcall lsl8
	mov R2,R22
	and R2,R16
	breq L19
	.dbline 105
; 			if(WriteTime[i]==0x29)
	sbi 0x15,2
	rjmp L20
L19:
	.dbline 107
; 			 {WriteTime[i]=0x2f;
; 			} 
	cbi 0x15,2
L20:
	.dbline 108
	nop
	.dbline 109
	nop
	.dbline 110
	sbi 0x15,1
	.dbline 111
	cbi 0x15,1
	.dbline 112
L16:
	.dbline 102
	inc R10
L18:
	.dbline 102
	mov R24,R10
	cpi R24,8
	brlo L15
	.dbline 113
; 	    	if(WriteTime[i]==0x39)
; 		    {WriteTime[i]=0x3f;
; 			} 
; 			if(WriteTime[i]==0x49)
; 			{WriteTime[i]=0x4f;
; 				} 
	cbi 0x14,2
	.dbline 115
; 			if(WriteTime[i]==0x59)
; 			{WriteTime[i]=0x00;
	clr R10
	rjmp L24
L21:
	.dbline 116
; 				} 
	.dbline 117
; 			else
	in R20,0x13
	andi R20,4
	.dbline 118
; 			WriteTime[i]=WriteTime[i]+1;
	cpi R20,4
	brne L25
	.dbline 119
; 		   }
	ldi R16,1
	mov R17,R10
	rcall lsl8
	or R22,R16
	rjmp L26
L25:
	.dbline 121
; //ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
; // 设置分钟,秒 减法程序
	ldi R16,1
	mov R17,R10
	rcall lsl8
	mov R2,R16
	com R2
	and R22,R2
L26:
	.dbline 122
	nop
	.dbline 123
	nop
	.dbline 124
	sbi 0x15,1
	.dbline 125
	cbi 0x15,1
	.dbline 126
L22:
	.dbline 115
	inc R10
L24:
	.dbline 115
	mov R24,R10
	cpi R24,8
	brlo L21
	.dbline 127
; //ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
; void SubForSET(int i)           
; 	       {    
; 	        if(WriteTime[i]==0x00)
; 			{ WriteTime[i]=0x5a;
; 			  }
	sbi 0x14,2
	.dbline 128
; 			if(WriteTime[i]==0x10)
	cbi 0x15,1
	.dbline 129
; 		    {WriteTime[i]=0x0a;
	cbi 0x15,0
	.dbline 130
; 			} 
	mov R16,R22
	.dbline -2
L14:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r k 20 c
	.dbsym r temp 22 c
	.dbsym r i 10 c
	.dbsym r addr 20 c
	.dbend
	.dbfunc e DataFenli _DataFenli fV
	.even
_DataFenli::
	.dbline -1
	.dbline 134
; 			if(WriteTime[i]==0x20)
; 			 {WriteTime[i]=0x1a;
; 			} 
; 	    	if(WriteTime[i]==0x30)
	.dbline 135
; 		    {WriteTime[i]=0x2a;
	lds R24,_second
	andi R24,15
	sts _secondtl,R24
	.dbline 136
; 			} 
	lds R24,_second
	swap R24
	andi R24,#0x0F
	sts _secondth,R24
	.dbline 138
; 			if(WriteTime[i]==0x40)
; 			{WriteTime[i]=0x3a;
	lds R24,_minute
	andi R24,15
	sts _minutetl,R24
	.dbline 139
; 				} 
	lds R24,_minute
	swap R24
	andi R24,#0x0F
	sts _minuteth,R24
	.dbline 141
; 			if(WriteTime[i]==0x50)
; 			{WriteTime[i]=0x49;
	lds R24,_hour
	andi R24,15
	sts _hourtl,R24
	.dbline 142
; 				} 
	lds R24,_hour
	swap R24
	andi R24,#0x0F
	sts _hourth,R24
	.dbline 144
; 			else
; 			WriteTime[i]=WriteTime[i]-1;
	lds R24,_date
	andi R24,15
	sts _datetl,R24
	.dbline 145
; 		   }		   
	lds R24,_date
	swap R24
	andi R24,#0x0F
	sts _dateth,R24
	.dbline 147
; 
; /*cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
	lds R24,_month
	andi R24,15
	sts _monthtl,R24
	.dbline 148
; //设置小时加减法子程序
	lds R24,_month
	swap R24
	andi R24,#0x0F
	sts _monthth,R24
	.dbline 150
; //ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
; //加法
	lds R24,_year
	andi R24,15
	sts _yeartl,R24
	.dbline 151
; void PlusHour(int i)
	lds R24,_year
	swap R24
	andi R24,#0x0F
	sts _yearth,R24
	.dbline -2
L27:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e DS1302_ReadTime _DS1302_ReadTime fV
	.even
_DS1302_ReadTime::
	.dbline -1
	.dbline 157
; {
;            if(WriteTime[i]==0x09)
; 			{ WriteTime[i]=0x0f;
; 			  }
; 			if(WriteTime[i]==0x19)
; 		    {WriteTime[i]=0x1f;
	.dbline 158
; 			} 
	ldi R16,129
	rcall _DS1302_Read
	sts _second,R16
	.dbline 159
; 			if(WriteTime[i]==0x23)
	ldi R16,131
	rcall _DS1302_Read
	sts _minute,R16
	.dbline 160
; 			 {WriteTime[i]=0x00;
	ldi R16,133
	rcall _DS1302_Read
	sts _hour,R16
	.dbline 161
; 			} 
	ldi R16,135
	rcall _DS1302_Read
	sts _date,R16
	.dbline 162
; 			else
	ldi R16,137
	rcall _DS1302_Read
	sts _month,R16
	.dbline 163
; 			WriteTime[i]=WriteTime[i]+1;
	ldi R16,141
	rcall _DS1302_Read
	sts _year,R16
	.dbline 170
; }
; //减法
; void SubHour(int i)
; {          
;             if(WriteTime[i]==0x00)
; 			{ WriteTime[i]=0x24;
; 			  }
	rcall _DataFenli
	.dbline -2
L28:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e DS1302_WriteTime _DS1302_WriteTime fV
;           time -> R20,R21
;            ddr -> R22,R23
	.even
_DS1302_WriteTime::
	rcall push_gset2
	.dbline -1
	.dbline 176
; 			if(WriteTime[i]==0x10)
; 		    {WriteTime[i]=0x0a;
; 			} 
; 			if(WriteTime[i]==0x20)
; 			 {WriteTime[i]=0x19;
; 			}
	.dbline 177
; 			else
	ldi R22,<_WriteAddress
	ldi R23,>_WriteAddress
	.dbline 178
; 			WriteTime[i]=WriteTime[i]-1;
	ldi R20,<_WriteTime
	ldi R21,>_WriteTime
	rjmp L31
L30:
	.dbline 180
	.dbline 181
	movw R30,R20
	ldd R18,z+0
	movw R30,R22
	ldd R16,z+0
	rcall _DS1302_WriteT
	.dbline 182
	subi R22,255  ; offset = 1
	sbci R23,255
	.dbline 183
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 184
L31:
	.dbline 179
; }
	movw R30,R22
	ldd R2,z+0
	tst R2
	brne L30
	.dbline -2
L29:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r time 20 pc
	.dbsym r ddr 22 pc
	.dbend
	.dbfile E:\biyesheji\SUCCES~1\SENDSE~1\SETPFI~2\程序/DELAY.C
	.dbfunc e delay_1us _delay_1us fV
	.even
_delay_1us::
	.dbline -1
	.dbline 5
	.dbline 6
	nop
	.dbline -2
L33:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e delay_nus _delay_nus fV
;              i -> R20,R21
;              n -> R22,R23
	.even
_delay_nus::
	rcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 10
	.dbline 11
	clr R20
	clr R21
	.dbline 12
	rjmp L38
L35:
	.dbline 13
	rcall _delay_1us
L36:
	.dbline 12
	subi R20,255  ; offset = 1
	sbci R21,255
L38:
	.dbline 12
	cp R20,R22
	cpc R21,R23
	brlo L35
	.dbline -2
L34:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r n 22 i
	.dbend
	.dbfunc e delay_1ms _delay_1ms fV
;              i -> R16,R17
	.even
_delay_1ms::
	.dbline -1
	.dbline 17
	.dbline 19
	clr R16
	clr R17
	rjmp L43
L40:
	.dbline 19
L41:
	.dbline 19
	subi R16,255  ; offset = 1
	sbci R17,255
L43:
	.dbline 19
	cpi R16,141
	ldi R30,0
	cpc R17,R30
	brlo L40
	.dbline -2
L39:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 i
	.dbend
	.dbfunc e delay_nms _delay_nms fV
;              i -> R20,R21
;              n -> R22,R23
	.even
_delay_nms::
	rcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 23
	.dbline 24
	clr R20
	clr R21
	.dbline 25
	rjmp L48
L45:
	.dbline 26
	.dbline 27
	rcall _delay_1ms
	.dbline 28
L46:
	.dbline 25
	subi R20,255  ; offset = 1
	sbci R21,255
L48:
	.dbline 25
	cp R20,R22
	cpc R21,R23
	brlo L45
	.dbline -2
L44:
	rcall pop_gset2

⌨️ 快捷键说明

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