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

📄 ds1302.s

📁 有遥控的温度计,用dS1302做时钟芯片
💻 S
字号:
	.module ds1302.c
	.area text(rom, con, rel)
	.dbfile D:\时钟芯片\1302\1302-162\ds1302.c
	.dbfunc e delay _delay fV
;              a -> R20
;              n -> R16
	.even
_delay::
	rcall push_gset1
	.dbline -1
	.dbline 9
; 
; #include <io8515v.h>
; #include <macros.h>
; #include <162-1302.h>
; /************************************************
;                        延时程序
; ************************************************/
; void delay(uchar n)
; {
	.dbline 11
; uchar a;
; for(a=0;a<n;a++)
	clr R20
	rjmp L5
L2:
	.dbline 12
L3:
	.dbline 11
	inc R20
L5:
	.dbline 11
	cp R20,R16
	brlo L2
	.dbline -2
L1:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r a 20 c
	.dbsym r n 16 c
	.dbend
	.dbfunc e write_data _write_data fV
;           temp -> R20
;              i -> R22
;           data -> R10
;           addr -> R22
	.even
_write_data::
	rcall push_gset3
	mov R10,R18
	mov R22,R16
	.dbline -1
	.dbline 18
;   ;
; }
; /****************************************************
;                       写一个字节
; ****************************************************/
; void write_data(uchar addr,uchar data)
; {
	.dbline 20
; unsigned char i,temp;
;  T_DDR|=T_IO;
	sbi 0x14,6
	.dbline 21
; T_PORT&=~T_RST;
	cbi 0x15,7
	.dbline 22
; T_PORT&=~T_CLK;         
	cbi 0x15,5
	.dbline 23
;   asm("nop");
	nop
	.dbline 24
;   asm("nop");
	nop
	.dbline 25
;   asm("nop");
	nop
	.dbline 26
;   asm("nop");
	nop
	.dbline 27
; T_PORT|=T_RST;                  //时钟信号低时拉高RST初始化
	sbi 0x15,7
	.dbline 28
;   temp=addr;
	mov R20,R22
	.dbline 29
;   for(i=0;i<8;i++) 
	clr R22
	rjmp L10
L7:
	.dbline 30
;   { 
	.dbline 31
;   if(temp&(1<<i))  
	ldi R16,1
	mov R17,R22
	rcall lsl8
	mov R2,R20
	and R2,R16
	breq L11
	.dbline 32
;   		T_PORT |=T_IO ;  
	sbi 0x15,6
	rjmp L12
L11:
	.dbline 34
;   else 
;   	    T_PORT &=~T_IO ;
	cbi 0x15,6
L12:
	.dbline 35
	nop
	.dbline 36
	nop
	.dbline 37
	sbi 0x15,5
	.dbline 38
	nop
	.dbline 39
	cbi 0x15,5
	.dbline 40
L8:
	.dbline 29
	inc R22
L10:
	.dbline 29
	cpi R22,8
	brlo L7
	.dbline 41
;   asm("nop");
;   asm("nop");
;   T_PORT |=T_CLK;             //时钟上升沿写入数据
;   asm("nop");
;   T_PORT &=~T_CLK;             //时钟拉低电平 
;   }
;   temp=data;
	mov R20,R10
	.dbline 42
;     for(i=0;i<8;i++) 
	clr R22
	rjmp L16
L13:
	.dbline 43
;   { 
	.dbline 44
;   if(temp&(1<<i))  
	ldi R16,1
	mov R17,R22
	rcall lsl8
	mov R2,R20
	and R2,R16
	breq L17
	.dbline 45
;   	    T_PORT |=T_IO ;  
	sbi 0x15,6
	rjmp L18
L17:
	.dbline 47
;   else 
;   	    T_PORT &=~T_IO ; 
	cbi 0x15,6
L18:
	.dbline 48
	nop
	.dbline 49
	nop
	.dbline 50
	sbi 0x15,5
	.dbline 51
	nop
	.dbline 52
	cbi 0x15,5
	.dbline 53
L14:
	.dbline 42
	inc R22
L16:
	.dbline 42
	cpi R22,8
	brlo L13
	.dbline 54
;   asm("nop");
;   asm("nop"); 
;   T_PORT |=T_CLK;             //时钟上升沿写入数据
;    asm("nop");
;   T_PORT &=~T_CLK;             //时钟拉低电平 
;   } 
;   T_PORT&=~T_RST;             //禁止DS1302 
	cbi 0x15,7
	.dbline -2
L6:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r temp 20 c
	.dbsym r i 22 c
	.dbsym r data 10 c
	.dbsym r addr 22 c
	.dbend
	.dbfunc e read_data _read_data fc
;              k -> R20
;           temp -> R22
;              i -> R10
;           addr -> R20
	.even
_read_data::
	rcall push_gset3
	mov R20,R16
	.dbline -1
	.dbline 61
; }
; 
; /***************************************************
;                       读一个字节
; ***************************************************/
; uchar read_data(uchar addr)
; {
	.dbline 63
; uchar i,temp,k;
; temp=0;
	clr R22
	.dbline 64
; T_DDR|=T_IO;
	sbi 0x14,6
	.dbline 65
; T_PORT&=~T_RST;
	cbi 0x15,7
	.dbline 66
; T_PORT&=~T_CLK;         
	cbi 0x15,5
	.dbline 67
;   asm("nop");
	nop
	.dbline 68
;   asm("nop");
	nop
	.dbline 69
;   asm("nop");
	nop
	.dbline 70
;   asm("nop");
	nop
	.dbline 71
; T_PORT|=T_RST;                  //时钟信号低时拉高RST初始化
	sbi 0x15,7
	.dbline 72
; temp=addr;
	mov R22,R20
	.dbline 73
;   for(i=0;i<8;i++) 
	clr R10
	rjmp L23
L20:
	.dbline 74
;   { 
	.dbline 75
;   	if(temp&(1<<i)) 
	ldi R16,1
	mov R17,R10
	rcall lsl8
	mov R2,R22
	and R2,R16
	breq L24
	.dbline 76
;   		 T_PORT |=T_IO ;  
	sbi 0x15,6
	rjmp L25
L24:
	.dbline 78
;   	else 
;   		 T_PORT &=~T_IO ;
	cbi 0x15,6
L25:
	.dbline 79
	nop
	.dbline 80
	nop
	.dbline 81
	sbi 0x15,5
	.dbline 82
	cbi 0x15,5
	.dbline 83
L21:
	.dbline 73
	inc R10
L23:
	.dbline 73
	mov R24,R10
	cpi R24,8
	brlo L20
	.dbline 84
;     asm("nop");
;     asm("nop"); 
;   	T_PORT |=T_CLK;             //时钟上升沿写入数据 	
; 	T_PORT &=~T_CLK;             //时钟拉低电平 
;   }
;    T_DDR&=~T_IO;
	cbi 0x14,6
	.dbline 85
; for(i=0;i<8;i++)
	clr R10
	rjmp L29
L26:
	.dbline 86
;  { 
	.dbline 87
;     k=(T_PIN&T_IO);
	in R20,0x13
	andi R20,64
	.dbline 88
;   if(k==T_IO)
	cpi R20,64
	brne L30
	.dbline 89
;       temp|=(1<<i);
	ldi R16,1
	mov R17,R10
	rcall lsl8
	or R22,R16
	rjmp L31
L30:
	.dbline 91
;   else
;   	  temp&=~(1<<i);
	ldi R16,1
	mov R17,R10
	rcall lsl8
	mov R2,R16
	com R2
	and R22,R2
L31:
	.dbline 92
	nop
	.dbline 93
	nop
	.dbline 94
	sbi 0x15,5
	.dbline 95
	cbi 0x15,5
	.dbline 96
L27:
	.dbline 85
	inc R10
L29:
	.dbline 85
	mov R24,R10
	cpi R24,8
	brlo L26
	.dbline 97
; 	    asm("nop");
;        asm("nop"); 
;   T_PORT|=T_CLK;              //上升沿读出数据 
;    T_PORT &=~T_CLK;             //时钟电平拉低 
;   }
;   T_DDR|=T_IO;
	sbi 0x14,6
	.dbline 98
;   T_PORT&=~T_CLK; 
	cbi 0x15,5
	.dbline 99
;   T_PORT&=~T_RST;             //禁止DS1302 
	cbi 0x15,7
	.dbline 100
;  return(temp);
	mov R16,R22
	.dbline -2
L19:
	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 init_1302 _init_1302 fV
	.even
_init_1302::
	.dbline -1
	.dbline 104
; }
; //1302初始化
; void init_1302()
; {
	.dbline 105
; write_data(0x8e,0x00);      //关闭寄存器写保护
	clr R18
	ldi R16,142
	rcall _write_data
	.dbline 106
; write_data(0x90,0x00);	    //写充电寄存器
	clr R18
	ldi R16,144
	rcall _write_data
	.dbline 107
; write_data(0x80,0x00);      //秒寄存器停止位置0,时钟启动,初值设为0
	clr R18
	ldi R16,128
	rcall _write_data
	.dbline -2
L32:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e init_time _init_time fV
;              d -> y+10
;          month -> y+8
;            day -> y+6
;           hour -> y+4
;            min -> R20
;            sec -> R22
	.even
_init_time::
	rcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 111
; }
; 
; void init_time(uchar sec,uchar min,uchar hour,uchar day,uchar month,uchar d)
; {
	.dbline 112
;   write_data(0x80,sec);
	mov R18,R22
	ldi R16,128
	rcall _write_data
	.dbline 113
;   write_data(0x82,min);
	mov R18,R20
	ldi R16,130
	rcall _write_data
	.dbline 114
;   write_data(0x84,hour);
	ldd R18,y+4
	ldi R16,132
	rcall _write_data
	.dbline 115
;   write_data(0x86,day);
	ldd R18,y+6
	ldi R16,134
	rcall _write_data
	.dbline 116
;   write_data(0x88,month);
	ldd R18,y+8
	ldi R16,136
	rcall _write_data
	.dbline 117
;   write_data(0x8a,d);
	ldd R18,y+10
	ldi R16,138
	rcall _write_data
	.dbline -2
L33:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l d 10 c
	.dbsym l month 8 c
	.dbsym l day 6 c
	.dbsym l hour 4 c
	.dbsym r min 20 c
	.dbsym r sec 22 c
	.dbend

⌨️ 快捷键说明

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