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

📄 ds1302a.lst

📁 基于avr单片机上的ds1302实时时钟源程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 248               		rcall ds1302_write
 249               	/* epilogue: frame size=0 */
 250 005c 65EA      		ret
 251 005e 80E9      	/* epilogue end (size=1) */
 252 0060 00D0      	/* function initialize_1302 size 10 (9) */
 254               	.Lscope5:
 257 0066 00D0      	.global	ds1302_read
 259 0068 0895      	ds1302_read:
 261               	.LM32:
 262               	.LFBB6:
 263               	/* prologue: frame size=0 */
 264               	/* prologue end (size=0) */
 266               	.LM33:
 267               		cbi 50-0x20,5
 127:../ds1302a/ds1302a.c **** }
 128:../ds1302a/ds1302a.c **** 
 129:../ds1302a/ds1302a.c **** /********************************************************************
 130:../ds1302a/ds1302a.c **** * 名称: read_1302
 131:../ds1302a/ds1302a.c **** * 说明: 先写地址,后读命令/数据
 132:../ds1302a/ds1302a.c **** * 功能: 读取DS1302某地址的数据
 133:../ds1302a/ds1302a.c **** * 调用: ds1302_write_a_byte() , ds1302_read_a_byte()
 134:../ds1302a/ds1302a.c **** * 输入: ucAddr: DS1302地址
 135:../ds1302a/ds1302a.c **** * 返回值: ucDa :读取的数据
 136:../ds1302a/ds1302a.c **** ***********************************************************************/
 137:../ds1302a/ds1302a.c **** unsigned char ds1302_read(unsigned char ucAddr)
 138:../ds1302a/ds1302a.c **** {
 269               	.LFBB6
 270               	.LM35:
 271               		sbi 50-0x20,5
 273               	.LM36:
 139:../ds1302a/ds1302a.c ****     unsigned char ucDa;
 140:../ds1302a/ds1302a.c **** 	CLRBIT(PORTD,T_RST);
 274               	r24,lo8(1)
 275               		rcall ds1302_write_a_byte
 141:../ds1302a/ds1302a.c **** 	//;;nop();
 142:../ds1302a/ds1302a.c **** 	CLRBIT(PORTD,T_CLK);
 277               	37:
 278               		rcall ds1302_read_a_byte
 143:../ds1302a/ds1302a.c **** 	//;;nop();
 144:../ds1302a/ds1302a.c **** 	SETBIT(PORTD,T_RST);
 280               	38:
 281               		sbi 50-0x20,7
 145:../ds1302a/ds1302a.c **** 
 146:../ds1302a/ds1302a.c **** 
 147:../ds1302a/ds1302a.c ****     ds1302_write_a_byte(ucAddr|0x01); /* 地址,命令 */
 283               	39:
 284               		cbi 50-0x20,5
 286 0072 00D0      	.LM40:
 148:../ds1302a/ds1302a.c **** 	
 149:../ds1302a/ds1302a.c **** 	ucDa = ds1302_read_a_byte(); /* 读1Byte数据 */
 287               	 r25,lo8(0)
 288               	/* epilogue: frame size=0 */
 289 0074 00D0      		ret
 150:../ds1302a/ds1302a.c **** 	SETBIT(PORTD,T_CLK);
 290               	epilogue end (size=1) */
 291               	/* function ds1302_read size 10 (9) */
 151:../ds1302a/ds1302a.c **** 	//;;nop();
 152:../ds1302a/ds1302a.c **** 	CLRBIT(PORTD,T_RST);
 293               	cope6:
 153:../ds1302a/ds1302a.c **** 	
 154:../ds1302a/ds1302a.c **** 	//;;nop();
 155:../ds1302a/ds1302a.c ****     return(ucDa);
 156:../ds1302a/ds1302a.c **** }
 296               	obal	v_BurstW1302T
 298 007a 90E0      	v_BurstW1302T:
 300 007c 0895      	.LM41:
 301               	.LFBB7:
 302               	/* prologue: frame size=0 */
 303               		push r17
 304               		push r28
 305               		push r29
 306               	/* prologue end (size=3) */
 307               		movw r28,r24
 309               	.LM42:
 157:../ds1302a/ds1302a.c **** 
 158:../ds1302a/ds1302a.c **** /********************************************************************
 159:../ds1302a/ds1302a.c **** * 名称: v_BurstW1302T
 160:../ds1302a/ds1302a.c **** * 说明: 先写地址,后写数据(时钟多字节方式)
 161:../ds1302a/ds1302a.c **** * 功能: 往DS1302写入时钟数据(多字节方式)
 162:../ds1302a/ds1302a.c **** * 调用: ds1302_write_a_byte()
 163:../ds1302a/ds1302a.c **** * 输入: pSecDa: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 控制
 164:../ds1302a/ds1302a.c **** * 8Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B 1B
 165:../ds1302a/ds1302a.c **** * 返回值: 无
 166:../ds1302a/ds1302a.c **** ***********************************************************************/
 167:../ds1302a/ds1302a.c **** void v_BurstW1302T(unsigned char *pSecDa)
 168:../ds1302a/ds1302a.c **** {
 310               	)
 311               		ldi r24,lo8(-114)
 312               		rcall ds1302_write
 314 007e 1F93      	.LM43:
 315 0080 CF93      		cbi 50-0x20,5
 317               	.LM44:
 318 0084 EC01      		cbi 50-0x20,7
 169:../ds1302a/ds1302a.c ****     unsigned char i;
 170:../ds1302a/ds1302a.c ****     ds1302_write(0x8e,0x00); // 控制命令,WP=0,写操作?
 319               	8,0,173,.LM45-.LFBB7
 320               	.LM45:
 321 0086 60E0      		sbi 50-0x20,5
 323 008a 00D0      	.LM46:
 171:../ds1302a/ds1302a.c **** 	CLRBIT(PORTD,T_RST);
 324               	r24,lo8(-66)
 325               		rcall ds1302_write_a_byte
 326 008c 9598      		ldi r17,lo8(8)
 172:../ds1302a/ds1302a.c **** 	CLRBIT(PORTD,T_CLK);
 327               	7:
 329 008e 9798      	.LM47:
 173:../ds1302a/ds1302a.c **** 	SETBIT(PORTD,T_RST);
 330               	 r24,Y+
 331               		rcall ds1302_write_a_byte
 174:../ds1302a/ds1302a.c **** 
 175:../ds1302a/ds1302a.c ****     ds1302_write_a_byte(0xbe); //0xbe:时钟多字节写命令 
 333               	48:
 334               		subi r17,lo8(-(-1))
 335 0092 8EEB      		brne .L27
 337 0096 18E0      	.LM49:
 338               		sbi 50-0x20,7
 176:../ds1302a/ds1302a.c ****     for (i=8;i>0;i--) //8Byte = 7Byte 时钟数据 + 1Byte 控制
 177:../ds1302a/ds1302a.c ****     {
 178:../ds1302a/ds1302a.c ****         ds1302_write_a_byte(*pSecDa);//写1Byte数据
 339               	n	68,0,182,.LM50-.LFBB7
 340               	.LM50:
 341 0098 8991      		cbi 50-0x20,5
 342 009a 00D0      	/* epilogue: frame size=0 */
 343               		pop r29
 344               		pop r28
 345 009c 1150      		pop r17
 346 009e 01F4      		ret
 179:../ds1302a/ds1302a.c ****         pSecDa++;
 180:../ds1302a/ds1302a.c ****     }
 181:../ds1302a/ds1302a.c **** 	SETBIT(PORTD,T_CLK);
 347               	gue end (size=4) */
 348               	/* function v_BurstW1302T size 24 (17) */
 182:../ds1302a/ds1302a.c **** 	CLRBIT(PORTD,T_RST);
 350               	tabs	"i:r(0,11)",64,0,0,17
 353               	.Lscope7:
 356 00a8 1F91      	.global	v_BurstR1302T
 358               	v_BurstR1302T:
 360               	.LM51:
 361               	.LFBB8:
 362               	/* prologue: frame size=0 */
 363               		push r17
 364               		push r28
 365               		push r29
 366               	/* prologue end (size=3) */
 367               		movw r28,r24
 369               	.LM52:
 183:../ds1302a/ds1302a.c **** }
 184:../ds1302a/ds1302a.c **** 
 185:../ds1302a/ds1302a.c **** /********************************************************************
 186:../ds1302a/ds1302a.c **** * 名称: v_BurstR1302T
 187:../ds1302a/ds1302a.c **** * 说明: 先写地址,后读命令/数据(时钟多字节方式)
 188:../ds1302a/ds1302a.c **** * 功能: 读取DS1302时钟数据
 189:../ds1302a/ds1302a.c **** * 调用: ds1302_write_a_byte() , ds1302_read_a_byte()
 190:../ds1302a/ds1302a.c **** * 输入: pSecDa: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年
 191:../ds1302a/ds1302a.c **** * 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
 192:../ds1302a/ds1302a.c **** * 返回值: ucDa :读取的数据
 193:../ds1302a/ds1302a.c **** ***********************************************************************/
 194:../ds1302a/ds1302a.c **** void v_BurstR1302T(unsigned char *pSecDa)
 195:../ds1302a/ds1302a.c **** {
 370               	bn	68,0,199,.LM53-.LFBB8
 371               	.LM53:
 372               		cbi 50-0x20,7
 374 00ac 1F93      	.LM54:
 375 00ae CF93      		sbi 50-0x20,5
 377               	.LM55:
 378 00b2 EC01      		ldi r24,lo8(-65)
 196:../ds1302a/ds1302a.c ****     unsigned char i;
 197:../ds1302a/ds1302a.c **** 	//DDRC=0xff;
 198:../ds1302a/ds1302a.c **** 	CLRBIT(PORTD,T_RST);
 379               	1302_write_a_byte
 380               		ldi r17,lo8(8)
 381 00b4 9598      	.L33:
 199:../ds1302a/ds1302a.c **** 	CLRBIT(PORTD,T_CLK);
 382               	tabn	68,0,204,.LM56-.LFBB8
 383               	.LM56:
 384 00b6 9798      		rcall ds1302_read_a_byte
 200:../ds1302a/ds1302a.c **** 	SETBIT(PORTD,T_RST);
 385               	 Y+,r24
 387 00b8 959A      	.LM57:
 201:../ds1302a/ds1302a.c ****     ds1302_write_a_byte(0xbf); // 0xbf:时钟多字节读命令 
 388               	bi r17,lo8(-(-1))
 389               		brne .L33
 391 00bc 00D0      	.LM58:
 392 00be 18E0      		sbi 50-0x20,7
 202:../ds1302a/ds1302a.c ****     for (i=8; i>0; i--)
 203:../ds1302a/ds1302a.c ****     {
 204:../ds1302a/ds1302a.c ****         *pSecDa = ds1302_read_a_byte(); // 读1Byte数据 
 394               	
 395               		cbi 50-0x20,5
 396 00c0 00D0      	/* epilogue: frame size=0 */
 397 00c2 8993      		pop r29
 398               		pop r28
 399               		pop r17
 400 00c4 1150      		ret
 401 00c6 01F4      	/* epilogue end (size=4) */
 205:../ds1302a/ds1302a.c ****         pSecDa++;
 206:../ds1302a/ds1302a.c ****     }
 207:../ds1302a/ds1302a.c **** 	//DDRC=0xff;
 208:../ds1302a/ds1302a.c **** 	SETBIT(PORTD,T_CLK);
 402               	tion v_BurstR1302T size 21 (14) */
 209:../ds1302a/ds1302a.c **** 	CLRBIT(PORTD,T_RST);
 405               	tabn	192,0,0,.LFBB8-.LFBB8
 407 00ca 9598      	.Lscope8:
 410 00ce CF91      	.global	v_BurstW1302R
 412 00d2 0895      	v_BurstW1302R:
 414               	.LM60:
 415               	.LFBB9:
 416               	/* prologue: frame size=0 */
 417               		push r17
 418               		push r28
 419               		push r29
 420               	/* prologue end (size=3) */
 421               		movw r28,r24
 423               	.LM61:
 424               		ldi r22,lo8(0)
 210:../ds1302a/ds1302a.c **** }
 211:../ds1302a/ds1302a.c **** 
 212:../ds1302a/ds1302a.c **** /********************************************************************
 213:../ds1302a/ds1302a.c **** * 名称: v_BurstW1302R
 214:../ds1302a/ds1302a.c **** * 说明: 先写地址,后写数据(寄存器多字节方式)
 215:../ds1302a/ds1302a.c **** * 功能: 往DS1302寄存器数写入数据(多字节方式)
 216:../ds1302a/ds1302a.c **** * 调用: ds1302_write_a_byte()
 217:../ds1302a/ds1302a.c **** * 输入: pReDa: 寄存器数据地址
 218:../ds1302a/ds1302a.c **** * 返回值: 无
 219:../ds1302a/ds1302a.c **** ***********************************************************************/
 220:../ds1302a/ds1302a.c **** void v_BurstW1302R(unsigned char *pReDa)
 221:../ds1302a/ds1302a.c **** {
 425               	rcall ds1302_write
 427               	.LM62:
 428               		cbi 50-0x20,5
 430 00d6 CF93      	.LM63:
 431 00d8 DF93      		cbi 50-0x20,7
 433 00da EC01      	.LM64:
 222:../ds1302a/ds1302a.c ****     unsigned char i;
 223:../ds1302a/ds1302a.c ****     ds1302_write(0x8e,0x00); // 控制命令,WP=0,写操作?
 434               	x20,5
 436 00dc 60E0      	.LM65:
 437 00de 8EE8      		ldi r24,lo8(-2)
 438 00e0 00D0      		rcall ds1302_write_a_byte
 224:../ds1302a/ds1302a.c **** 	CLRBIT(PORTD,T_RST);
 439               	r17,lo8(31)
 440               	.L39:
 225:../ds1302a/ds1302a.c **** 	CLRBIT(PORTD,T_CLK);
 442               	66:
 443               		ld r24,Y+
 444 00e4 9798      		rcall ds1302_write_a_byte
 226:../ds1302a/ds1302a.c **** 	SETBIT(PORTD,T_RST);
 445               	tabn	68,0,228,.LM67-.LFBB9
 446               	.LM67:
 447 00e6 959A      		subi r17,lo8(-(-1))
 227:../ds1302a/ds1302a.c ****     ds1302_write_a_byte(0xfe); //0xfe:寄存器多字节写命令 
 448               	ne .L39
 450 00e8 8EEF      	.LM68:
 451 00ea 00D0      		sbi 50-0x20,7
 453               	.LM69:
 228:../ds1302a/ds1302a.c ****     for (i=31;i>0;i--) //31Byte 寄存器数据 
 229:../ds1302a/ds1302a.c ****     {
 230:../ds1302a/ds1302a.c ****         ds1302_write_a_byte(*pReDa); //写1Byte数据
 454               	0-0x20,5
 455               	/* epilogue: frame size=0 */
 456 00ee 8991      		pop r29
 457 00f0 00D0      		pop r28
 458               		pop r17
 459               		ret
 460 00f2 1150      	/* epilogue end (size=4) */

⌨️ 快捷键说明

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