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

📄 ds1302a.lst

📁 基于avr单片机上的ds1302实时时钟源程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 461 00f4 01F4      	/* function v_BurstW1302R size 24 (17) */
 231:../ds1302a/ds1302a.c ****         pReDa++;
 232:../ds1302a/ds1302a.c ****     }
 233:../ds1302a/ds1302a.c **** 	SETBIT(PORTD,T_CLK);
 462               	_BurstW1302R, .-v_BurstW1302R
 234:../ds1302a/ds1302a.c **** 	CLRBIT(PORTD,T_RST);
 465               	tabn	224,0,0,.Lscope9-.LFBB9
 466               	.Lscope9:
 469 00fa DF91      	.global	v_BurstR1302R
 471 00fe 1F91      	v_BurstR1302R:
 473               	.LM70:
 474               	.LFBB10:
 475               	/* prologue: frame size=0 */
 476               		push r17
 477               		push r28
 478               		push r29
 479               	/* prologue end (size=3) */
 480               		movw r28,r24
 482               	.LM71:
 483               		cbi 50-0x20,5
 235:../ds1302a/ds1302a.c **** }
 236:../ds1302a/ds1302a.c **** 
 237:../ds1302a/ds1302a.c **** 
 238:../ds1302a/ds1302a.c **** /********************************************************************
 239:../ds1302a/ds1302a.c **** * 名称: v_BurstR1302R
 240:../ds1302a/ds1302a.c **** * 说明: 先写地址,后读命令/数据(寄存器多字节方式)
 241:../ds1302a/ds1302a.c **** * 功能: 读取DS1302寄存器数据
 242:../ds1302a/ds1302a.c **** * 调用: ds1302_write_a_byte() , ds1302_read_a_byte()
 243:../ds1302a/ds1302a.c **** * 输入: pReDa: 寄存器数据地址
 244:../ds1302a/ds1302a.c **** * 返回值: 无
 245:../ds1302a/ds1302a.c **** ***********************************************************************/
 246:../ds1302a/ds1302a.c **** void v_BurstR1302R(unsigned char *pReDa)
 247:../ds1302a/ds1302a.c **** {
 485               	7
 487               	.LM73:
 488               		sbi 50-0x20,5
 490 0104 CF93      	.LM74:
 491 0106 DF93      		ldi r24,lo8(-1)
 492               		rcall ds1302_write_a_byte
 493 0108 EC01      		ldi r17,lo8(31)
 248:../ds1302a/ds1302a.c ****     unsigned char i;
 249:../ds1302a/ds1302a.c **** 	//DDRC=0xff;
 250:../ds1302a/ds1302a.c **** 	CLRBIT(PORTD,T_RST);
 494               	tabn	68,0,256,.LM75-.LFBB10
 495               	.LM75:
 496 010a 9598      		rcall ds1302_read_a_byte
 251:../ds1302a/ds1302a.c **** 	CLRBIT(PORTD,T_CLK);
 497               	 Y+,r24
 499 010c 9798      	.LM76:
 252:../ds1302a/ds1302a.c **** 	SETBIT(PORTD,T_RST);
 500               	bi r17,lo8(-(-1))
 501               		brne .L45
 253:../ds1302a/ds1302a.c ****     ds1302_write_a_byte(0xff); // 0xff:寄存器多字节读命令 
 503               	77:
 504               		sbi 50-0x20,7
 506 0112 00D0      	.LM78:
 507 0114 1FE1      		cbi 50-0x20,5
 508               	/* epilogue: frame size=0 */
 254:../ds1302a/ds1302a.c ****     for (i=31; i>0; i--) //31Byte 寄存器数据 
 255:../ds1302a/ds1302a.c ****     {
 256:../ds1302a/ds1302a.c ****         *pReDa = ds1302_read_a_byte(); //读1Byte数据 
 509               	29
 510               		pop r28
 511 0116 00D0      		pop r17
 512 0118 8993      		ret
 513               	/* epilogue end (size=4) */
 514               	/* function v_BurstR1302R size 21 (14) */
 257:../ds1302a/ds1302a.c ****         pReDa++;
 258:../ds1302a/ds1302a.c ****     }
 259:../ds1302a/ds1302a.c **** 	//DDRC=0xff;
 260:../ds1302a/ds1302a.c **** 	SETBIT(PORTD,T_CLK);
 517               	192,0,0,.LFBB10-.LFBB10
 519 011e 979A      	.Lscope10:
 261:../ds1302a/ds1302a.c **** 	CLRBIT(PORTD,T_RST);
 520               	tabs	"check_ds1302:F(0,11)",36,0,0,check_ds1302
 521               	.global	check_ds1302
 523               	check_ds1302:
 525 0124 CF91      	.LM79:
 526 0126 1F91      	.LFBB11:
 527 0128 0895      	/* prologue: frame size=0 */
 528               	/* prologue end (size=0) */
 530               	.LM80:
 531               		ldi r22,lo8(-128)
 532               		ldi r24,lo8(-114)
 533               		rcall ds1302_write
 535               	.LM81:
 536               		ldi r24,lo8(-114)
 537               		rcall ds1302_read
 538               		ldi r18,lo8(0)
 262:../ds1302a/ds1302a.c **** }
 263:../ds1302a/ds1302a.c **** 
 264:../ds1302a/ds1302a.c **** uchar check_ds1302(void) 
 265:../ds1302a/ds1302a.c **** { 
 539               	i r24,lo8(-128)
 540               		brne .L51
 542               	.LM82:
 543               		ldi r18,lo8(1)
 266:../ds1302a/ds1302a.c **** ds1302_write(0x8e,0x80); 
 544               	r19,hi8(1)
 545               	.L51:
 547 012c 8EE8      	.LM83:
 548 012e 00D0      		movw r24,r18
 267:../ds1302a/ds1302a.c **** if(ds1302_read(0x8e)==0x80) return 1; 
 549               	ilogue: frame size=0 */
 550               		ret
 551 0130 8EE8      	/* epilogue end (size=1) */
 552 0132 00D0      	/* function check_ds1302 size 13 (12) */
 554 0136 30E0      	.Lscope11:
 556 013a 01F4      	.global	ds1302_write_time
 558               	ds1302_write_time:
 560 013e 30E0      	.LM84:
 561               	.LFBB12:
 268:../ds1302a/ds1302a.c **** return 0; 
 269:../ds1302a/ds1302a.c **** } 
 562               	frame size=0 */
 563               	/* prologue end (size=0) */
 565               	.LM85:
 566 0142 0895      		ldi r22,lo8(0)
 567               		ldi r24,lo8(-114)
 568               		rcall ds1302_write
 570               	.LM86:
 571               		ldi r22,lo8(-128)
 572               		ldi r24,lo8(-128)
 573               		rcall ds1302_write
 270:../ds1302a/ds1302a.c **** 
 271:../ds1302a/ds1302a.c **** 
 272:../ds1302a/ds1302a.c **** void ds1302_read_time(void) 
 273:../ds1302a/ds1302a.c **** { uchar a,b,c,d;int i;
 274:../ds1302a/ds1302a.c **** year=ds1302_read(0x8c); //年 
 275:../ds1302a/ds1302a.c **** month=ds1302_read(0x88);//月 
 276:../ds1302a/ds1302a.c **** day=ds1302_read(0x86); //日 
 277:../ds1302a/ds1302a.c **** week=ds1302_read(0x8a); //周 
 278:../ds1302a/ds1302a.c **** hour=ds1302_read(0x84); //时 
 279:../ds1302a/ds1302a.c **** minute=ds1302_read(0x82); //分 
 280:../ds1302a/ds1302a.c **** second=ds1302_read(0x80); //秒 
 281:../ds1302a/ds1302a.c ****             // 第一排LED全灭
 282:../ds1302a/ds1302a.c ****                  // 第二排LED全亮
 283:../ds1302a/ds1302a.c ****           //write728x(0x02,0xa4);
 284:../ds1302a/ds1302a.c **** 		  //write728x(0x03,0xb0);
 285:../ds1302a/ds1302a.c ****                         //PORTB=0xff;
 286:../ds1302a/ds1302a.c ****                         a=(second & 0x0f);
 287:../ds1302a/ds1302a.c ****                         //send_byte(disp_table[a]);
 288:../ds1302a/ds1302a.c **** 						write728x(0x00,disp_table[a]); 
 289:../ds1302a/ds1302a.c ****                         //PORTB=0xfe;  
 290:../ds1302a/ds1302a.c **** 						 for(i=0;i<100;i++)         //拉低 500us
 291:../ds1302a/ds1302a.c ****                          {
 292:../ds1302a/ds1302a.c ****                          _delay_us(50);    
 293:../ds1302a/ds1302a.c ****                          }
 294:../ds1302a/ds1302a.c **** 						
 295:../ds1302a/ds1302a.c **** 						//PORTB=0xff;
 296:../ds1302a/ds1302a.c **** 					    b=(second >> 4);
 297:../ds1302a/ds1302a.c **** 						write728x(0x01,disp_table[b]);
 298:../ds1302a/ds1302a.c ****                        // send_byte(disp_table[b]); 
 299:../ds1302a/ds1302a.c ****                         //PORTB=0xfd;
 300:../ds1302a/ds1302a.c **** 					
 301:../ds1302a/ds1302a.c **** 						 for(i=0;i<100;i++)         //拉低 500us
 302:../ds1302a/ds1302a.c **** 						{
 303:../ds1302a/ds1302a.c **** 							_delay_us(50);    
 304:../ds1302a/ds1302a.c **** 						}
 305:../ds1302a/ds1302a.c **** 
 306:../ds1302a/ds1302a.c **** 	 
 307:../ds1302a/ds1302a.c **** 						//PORTB=0xff;
 308:../ds1302a/ds1302a.c **** 					    b=(minute & 0x0f);
 309:../ds1302a/ds1302a.c **** 						write728x(0x01,disp_table[b]);
 310:../ds1302a/ds1302a.c ****                         //send_byte(disp_table[b]); 
 311:../ds1302a/ds1302a.c ****                         //PORTB=0xfb;
 312:../ds1302a/ds1302a.c **** 					
 313:../ds1302a/ds1302a.c **** 						 for(i=0;i<100;i++)         //拉低 500us
 314:../ds1302a/ds1302a.c **** 						{
 315:../ds1302a/ds1302a.c **** 							_delay_us(50);    
 316:../ds1302a/ds1302a.c **** 						}
 317:../ds1302a/ds1302a.c **** 
 318:../ds1302a/ds1302a.c ****                        // PORTB=0xff;
 319:../ds1302a/ds1302a.c **** 					    b=(minute >> 4);
 320:../ds1302a/ds1302a.c **** 						write728x(0x01,disp_table[b]);
 321:../ds1302a/ds1302a.c ****                        // send_byte(disp_table[b]); 
 322:../ds1302a/ds1302a.c ****                        // PORTB=0xf7;
 323:../ds1302a/ds1302a.c **** 					
 324:../ds1302a/ds1302a.c **** 						 for(i=0;i<100;i++)         //拉低 500us
 325:../ds1302a/ds1302a.c **** 						{
 326:../ds1302a/ds1302a.c **** 							_delay_us(50);    
 327:../ds1302a/ds1302a.c **** 						}
 328:../ds1302a/ds1302a.c **** 
 329:../ds1302a/ds1302a.c **** 						//PORTC|=(1<<4); 
 330:../ds1302a/ds1302a.c **** 
 331:../ds1302a/ds1302a.c **** } 
 332:../ds1302a/ds1302a.c **** 
 333:../ds1302a/ds1302a.c **** 
 334:../ds1302a/ds1302a.c **** void ds1302_write_time(void) 
 335:../ds1302a/ds1302a.c **** { 
 575               	22,lo8(-87)
 576               		ldi r24,lo8(-112)
 577               		rcall ds1302_write
 579               	.LM88:
 336:../ds1302a/ds1302a.c **** ds1302_write(0x8e,0x00); //关闭写保护 
 580               	r22,lo8(8)
 581               		ldi r24,lo8(-116)
 582 0144 60E0      		rcall ds1302_write
 584 0148 00D0      	.LM89:
 337:../ds1302a/ds1302a.c **** ds1302_write(0x80,0x80); //暂停 
 585               	r22,lo8(5)
 586               		ldi r24,lo8(-120)
 587 014a 60E8      		rcall ds1302_write
 589 014e 00D0      	.LM90:
 338:../ds1302a/ds1302a.c **** ds1302_write(0x90,0xa9); //涓流充电 
 590               	r22,lo8(3)
 591               		ldi r24,lo8(-122)
 592 0150 69EA      		rcall ds1302_write
 594 0154 00D0      	.LM91:
 339:../ds1302a/ds1302a.c **** ds1302_write(0x8c,0x08); //年 
 595               	r22,lo8(6)
 596               		ldi r24,lo8(-118)
 597 0156 68E0      		rcall ds1302_write
 599 015a 00D0      	.LM92:
 340:../ds1302a/ds1302a.c **** ds1302_write(0x88,0x05); //月 
 600               	r22,lo8(16)
 601               		ldi r24,lo8(-124)
 602 015c 65E0      		rcall ds1302_write
 604 0160 00D0      	.LM93:
 341:../ds1302a/ds1302a.c **** ds1302_write(0x86,0x03); //日 
 605               	r22,lo8(64)
 606               		ldi r24,lo8(-126)
 607 0162 63E0      		rcall ds1302_write
 609 0166 00D0      	.LM94:
 342:../ds1302a/ds1302a.c **** ds1302_write(0x8a,0x06); //周 
 610               	r22,lo8(37)
 611               		ldi r24,lo8(-128)
 612 0168 66E0      		rcall ds1302_write
 614 016c 00D0      	.LM95:
 343:../ds1302a/ds1302a.c **** ds1302_write(0x84,0x10); //时 
 615               	r22,lo8(-128)
 616               		ldi r24,lo8(-114)
 617 016e 60E1      		rcall ds1302_write
 618 0170 84E8      	/* epilogue: frame size=0 */
 619 0172 00D0      		ret
 344:../ds1302a/ds1302a.c **** ds1302_write(0x82,0x40); //分 
 620               	ilogue end (size=1) */
 621               	/* function ds1302_write_time size 34 (33) */
 623 0176 82E8      	.Lscope12:
 345:../ds1302a/ds1302a.c **** ds1302_write(0x80,0x25); //秒 
 625               	bs	"send_byte:P(0,11)",64,0,0,25
 626               	.global	send_byte
 628 017c 80E8      	send_byte:
 346:../ds1302a/ds1302a.c **** ds1302_write(0x8e,0x80); //打开写保护 
 630               	:
 631               	.LFBB13:
 632 0180 60E8      	/* prologue: frame size=0 */
 633 0182 8EE8      	/* prologue end (size=0) */
 634 0184 00D0      		mov r25,r24
 636 0186 0895      	.LM97:
 637               		cbi 56-0x20,0
 639               	.LM98:
 640               		sbi 56-0x20,0
 641               	.L56:
 643               	.LM99:
 644               		sbic 54-0x20,2
 645               		rjmp .L56
 347:../ds1302a/ds1302a.c **** } 
 348:../ds1302a/ds1302a.c **** 
 349:../ds1302a/ds1302a.c **** // ***********************************************************
 350:../ds1302a/ds1302a.c **** // * 写入BC728X, 第一个参数为目标寄存器地址, 第二个参数为要写入的数据 *
 351:../ds1302a/ds1302a.c **** // ***********************************************************
 352:../ds1302a/ds1302a.c **** void write728x(unsigned char reg_add, unsigned char write_data)
 353:../ds1302a/ds1302a.c **** {
 354:../ds1302a/ds1302a.c ****    send_byte(reg_add);         // 发送寄存器地址

⌨️ 快捷键说明

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