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

📄 ds1302.s

📁 该程序是医院用的CPCR记录仪的终端控制程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	sbci R23,255
	.dbline 133
L24:
	.dbline 129
	inc R20
L26:
	.dbline 129
	cpi R20,8
	brlo L23
	.dbline 134
;     {
;        *Cdata = R_Byte();   /* 读1Byte数据 */
;        Cdata++;
;     }
;     SET_CLK();
	cbi 0x2,4
	.dbline 135
;     CLEAR_RST();
	sbi 0x2,6
	.dbline -2
L22:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r Cdata 22 pc
	.dbend
	.dbfunc e BurstW1302R _BurstW1302R fV
;              i -> R20
;          Cdata -> R22,R23
	.even
_BurstW1302R::
	xcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 147
; }
; /******************************************************************** 
; 
;  函 数 名:BurstW1302R()
;  功    能:往DS1302寄存器数写入数据(多字节方式)
;  说    明:先写地址,后写数据(寄存器多字节方式)
;  调    用:W_Byte()
;  入口参数:pWReg: 寄存器数据地址
;  返 回 值:无
; ***********************************************************************/
; void BurstW1302R(unsigned char *Cdata)
; {
	.dbline 149
;     unsigned char i;
;     W_1302(0x8e,0x00);         /* 控制命令,WP=0,写操作*/
	clr R18
	ldi R16,142
	xcall _W_1302
	.dbline 150
; 	CLEAR_RST();
	sbi 0x2,6
	.dbline 151
; 	CLEAR_CLK();
	sbi 0x2,4
	.dbline 152
;     SET_RST();
	cbi 0x2,6
	.dbline 153
;     W_Byte(0xfe);         /* 0xbe:时钟多字节写命令 */
	ldi R16,254
	xcall _W_Byte
	.dbline 154
;     for (i=31; i>0; i--)       /* 31Byte 寄存器数据 */
	ldi R20,31
	xjmp L31
L28:
	.dbline 155
	.dbline 156
	movw R30,R22
	ldd R16,z+0
	xcall _W_Byte
	.dbline 157
	subi R22,255  ; offset = 1
	sbci R23,255
	.dbline 158
L29:
	.dbline 154
	dec R20
L31:
	.dbline 154
	clr R2
	cp R2,R20
	brlo L28
	.dbline 159
;     {
;         W_Byte(*Cdata);    /* 写1Byte数据*/
;         Cdata++;
;     }
;     SET_CLK();
	cbi 0x2,4
	.dbline 160
;     CLEAR_RST();
	sbi 0x2,6
	.dbline -2
L27:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r Cdata 22 pc
	.dbend
	.dbfunc e BurstR1302R _BurstR1302R fV
;              i -> R20
;          Cdata -> R22,R23
	.even
_BurstR1302R::
	xcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 172
; } 
; /******************************************************************** 
; 
;  函 数 名:BurstR1302R()
;  功    能:读取DS1302寄存器数据
;  说    明:先写地址,后读命令/数据(寄存器多字节方式)
;  调    用:W_Byte() , R_Byte()
;  入口参数:pRReg: 寄存器数据地址
;  返 回 值:无
; ***********************************************************************/
; void BurstR1302R(unsigned char *Cdata)
; {
	.dbline 174
;     unsigned char i;
;     CLEAR_RST();
	sbi 0x2,6
	.dbline 175
; 	CLEAR_CLK();
	sbi 0x2,4
	.dbline 176
; 	SET_RST();
	cbi 0x2,6
	.dbline 177
;     W_Byte(0xff);            /* 0xff:时钟多字节读命令 */
	ldi R16,255
	xcall _W_Byte
	.dbline 178
;     for (i=31; i>0; i--)          /*31Byte 寄存器数据 */
	ldi R20,31
	xjmp L36
L33:
	.dbline 179
	.dbline 180
	xcall _R_Byte
	movw R30,R22
	std z+0,R16
	.dbline 181
	subi R22,255  ; offset = 1
	sbci R23,255
	.dbline 182
L34:
	.dbline 178
	dec R20
L36:
	.dbline 178
	clr R2
	cp R2,R20
	brlo L33
	.dbline 183
;     {
;         *Cdata = R_Byte();  /* 读1Byte数据 */
;         Cdata++;
;     }
;     SET_CLK();
	cbi 0x2,4
	.dbline 184
;     CLEAR_RST();
	sbi 0x2,6
	.dbline -2
L32:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r Cdata 22 pc
	.dbend
	.dbfunc e Set_1302 _Set_1302 fV
;           Addr -> R20
;              i -> R22
;         pClock -> R10,R11
	.even
_Set_1302::
	xcall push_gset3
	movw R10,R16
	.dbline -1
	.dbline 197
; }
; /******************************************************************** 
; 
;  函 数 名:Set_1302()
;  功    能:设置初始时间
;  说    明:先写地址,后读命令/数据(寄存器多字节方式)
;  调    用:W1302()
;  入口参数:pClock: 读取时钟数据地址 格式为: 秒 分 时 日 月 星期 年
;                             7Byte (BCD码)	1B 1B 1B 1B 1B  1B  1B
;  返 回 值:无
; ***********************************************************************/
; void Set_1302(unsigned char *pClock) 
; {
	.dbline 199
;     unsigned char i;
;     unsigned char Addr = 0x80; 
	ldi R20,128
	.dbline 200
;     W_1302(0x8e,0x00);           /* 控制命令,WP=0,写操作?*/
	clr R18
	ldi R16,142
	xcall _W_1302
	.dbline 201
;     for(i=0;i<7;i++)
	clr R22
	xjmp L41
L38:
	.dbline 202
	.dbline 203
	movw R30,R10
	ldd R18,z+0
	mov R16,R20
	xcall _W_1302
	.dbline 204
	movw R24,R10
	adiw R24,1
	movw R10,R24
	.dbline 205
	subi R20,254    ; addi 2
	.dbline 206
L39:
	.dbline 201
	inc R22
L41:
	.dbline 201
	cpi R22,7
	brlo L38
	.dbline 207
;     { 
;         W_1302(Addr,*pClock);  /* 秒 分 时 日 月 星期 年 */ 
;         pClock++;
;         Addr +=2;
;     }
;     W_1302(0x8e,0x80);           /* 控制命令,WP=1,写保护?*/
	ldi R18,128
	ldi R16,142
	xcall _W_1302
	.dbline -2
L37:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r Addr 20 c
	.dbsym r i 22 c
	.dbsym r pClock 10 pc
	.dbend
	.dbfunc e Get_1302 _Get_1302 fV
;           Addr -> R20
;              i -> R22
;         Pclock -> R10,R11
	.even
_Get_1302::
	xcall push_gset3
	movw R10,R16
	.dbline -1
	.dbline 220
; }
; /******************************************************************** 
; 
;  函 数 名:Get_1302()
;  功    能:读取DS1302当前时间
;  说    明:
;  调    用:R1302() 
;  入口参数:ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年 
;                                         7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
;  返 回 值:无
; ***********************************************************************/
; void Get_1302(unsigned char *Pclock) 
; {
	.dbline 222
;     unsigned char i;
;     unsigned char Addr = 0x81;
	ldi R20,129
	.dbline 223
;     for (i=0; i<7; i++)
	clr R22
	xjmp L46
L43:
	.dbline 224
	.dbline 225
	mov R16,R20
	xcall _R_1302
	movw R30,R10
	st Z+,R16
	movw R10,R30
	.dbline 226
	subi R20,254    ; addi 2
	.dbline 227
L44:
	.dbline 223
	inc R22
L46:
	.dbline 223
	cpi R22,7
	brlo L43
	.dbline -2
L42:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r Addr 20 c
	.dbsym r i 22 c
	.dbsym r Pclock 10 pc
	.dbend
	.dbfunc e Set_charge _Set_charge fV
;           Addr -> R20
	.even
_Set_charge::
	xcall push_gset1
	.dbline -1
	.dbline 230
;     {
;         *Pclock++ = R_1302(Addr);/*格式为: 秒 分 时 日 月 星期 年 */
;         Addr += 2;
;     }
; }
; void Set_charge(void)
; {
	.dbline 231
;  	 unsigned char Addr=0x90;
	ldi R20,144
	.dbline 232
; 	 W_1302(Addr,0xA6);    //10100110    diode is one  resistor is 4K
	ldi R18,166
	mov R16,R20
	xcall _W_1302
	.dbline -2
L47:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r Addr 20 c
	.dbend
	.dbfunc e delay_1 _delay_1 fV
;              i -> R16
	.even
_delay_1::
	.dbline -1
	.dbline 235
; }
; void delay_1(void)
; {
	.dbline 237
	clr R16
	xjmp L52
L49:
	.dbline 237
L50:
	.dbline 237
	inc R16
L52:
	.dbline 237
;   	 unsigned char i;
; 	 for(i=0;i<5;i++);
	cpi R16,5
	brlo L49
	.dbline -2
L48:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbend
	.dbfunc e CLOCK _CLOCK fV
	.even
_CLOCK::
	.dbline -1
	.dbline 240
; }
; void CLOCK(void)
; { 
	.dbline 241
;      SET_CLK();
	cbi 0x2,4
	.dbline 242
;      delay_1();
	xcall _delay_1
	.dbline 243
;      CLEAR_CLK();
	sbi 0x2,4
	.dbline -2
L53:
	.dbline 0 ; func end
	ret
	.dbend

⌨️ 快捷键说明

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