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

📄 hjmcu.lss

📁 很实用的单片机例程
💻 LSS
📖 第 1 页 / 共 3 页
字号:
	Delayus(10);
	PORTC &= ~(1 << PC1);	 //拉低时钟端	
	PORTC &= ~(1 << PC5); //拉低片选端		
	
	return data; 
}

//向DS1302的指定地址写一个字节数据
void DS1302_WriteData(unsigned char addr,unsigned data)  
{
	PORTC &= ~(1 << PC5); //拉低片选端
	PORTC &= ~(1 << PC1);//拉低时钟端
	Delayus(10);
	PORTC |= (1 << PC5);//拉高片选端
	Delayus(10);
	DS1302_WriteByte(addr);//写入操作命令(地址)
	Delayus(10);
	PORTC &= ~(1 << PC1);//拉低时钟端
	Delayus(10);
	DS1302_WriteByte(data);//写入数据
	PORTC &= ~(1 << PC1);	 //拉低时钟端

	Delayus(10);
	PORTC &= ~(1 << PC5); //拉低片选端	
}

//对DS1302设置时间											 
void DS1302_SetTime(unsigned char *time)  
{
	unsigned char i;
	unsigned char addr = 0x80;//写入地址从秒寄存器开始
	
	DS1302_WriteData(WR_PROTECT | WR,UPROTECT);//控制命令,WP位为0,允许写操作
	Delayms(5);
	for(i = 0;i < 7;i++)
	{
		DS1302_WriteData(addr | WR,time[i]);// 秒 分 时 日 月 星期 年   
		addr += 2;
		Delayms(1);
	}
	DS1302_WriteData(WR_PROTECT | WR,PROTECT);//控制命令,WP位为1,不允许写操作    
}

//从DS1302读取时间
void DS1302_GetTime(void)   
{
	unsigned char i;
	/*
	//
	unsigned char addr;
	PORTA &= ~(1 << PA1);
	for(i = 0;i < 7;i++)
	{
		tim[i] = DS1302_ReadData(addr | RD);
		addr += 2;
	}
	*/
	
	////////////////////
	PORTC &= ~(1 << PC5);
	Delayus(10);
	PORTC |= (1 << PC5);
	Delayus(10);
	DS1302_WriteByte(0xbf);
	for(i = 0;i < 8;i++)
	{
		Get_Time[i] = DS1302_ReadByte();
	}
	PORTC &= ~(1 << PC5);
	///////////////////////////////////

	PORTC &= ~(1 << PC1);	
}

//DS1302是否工作检测
unsigned char DS1302_Check(void)           
{
	DS1302_WriteData(WR_PROTECT | WR,UPROTECT);
	DS1302_WriteData(RAMBASE | WR,0x31);
	
	if(DS1302_ReadData(RAMBASE | WR) == 0x31)
	{
		return TURE;
	}
	else
	{
		return FALSE;
	}	
}

//DS1302初始化
void DS1302_Init(void)     
{
	DS1302_WriteData(WR_PROTECT | WR,UPROTECT);   //写入写允许命令
    DS1302_WriteData(SECOND | WR,CLK_START);      //启动振荡器,DS1302开始工作
	DS1302_WriteData( WR_PROTECT | WR,PROTECT);     //控制命令,WP位为1,不允许写操作			 
}


//us级别的延时函数
void Delayus(unsigned int lus)
{
	while(lus--)
	{
		_delay_loop_2(3);      //_delay_loop_2(1)是延时4个时钟周期,参数为3则延时12
		           //个时钟周期,本实验用12M晶体,则12个时钟周期为12/12=1us
    }
}

//ms级别的延时函数
void Delayms(unsigned int lms)
{
 13c:	cf 93       	push	r28
 13e:	df 93       	push	r29
	while(lms--)
	{
		Delayus(1000);        //延时1ms
 140:	ec 01       	movw	r28, r24
 142:	21 97       	sbiw	r28, 0x01	; 1
 144:	8f ef       	ldi	r24, 0xFF	; 255
 146:	cf 3f       	cpi	r28, 0xFF	; 255
 148:	d8 07       	cpc	r29, r24
 14a:	49 f0       	breq	.+18     	; 0x15e <Delayms+0x22>
 14c:	88 ee       	ldi	r24, 0xE8	; 232
 14e:	93 e0       	ldi	r25, 0x03	; 3
 150:	0e 94 91 00 	call	0x122 <Delayus>
 154:	21 97       	sbiw	r28, 0x01	; 1
 156:	8f ef       	ldi	r24, 0xFF	; 255
 158:	cf 3f       	cpi	r28, 0xFF	; 255
 15a:	d8 07       	cpc	r29, r24
 15c:	b9 f7       	brne	.-18     	; 0x14c <Delayms+0x10>
 15e:	df 91       	pop	r29
 160:	cf 91       	pop	r28
 162:	08 95       	ret

00000164 <DS1302_ReadByte>:
 164:	1f 93       	push	r17
 166:	cf 93       	push	r28
 168:	c0 e0       	ldi	r28, 0x00	; 0
 16a:	a8 98       	cbi	0x15, 0	; 21
 16c:	a0 98       	cbi	0x14, 0	; 20
 16e:	17 e0       	ldi	r17, 0x07	; 7
 170:	c6 95       	lsr	r28
 172:	a9 9a       	sbi	0x15, 1	; 21
 174:	8a e0       	ldi	r24, 0x0A	; 10
 176:	90 e0       	ldi	r25, 0x00	; 0
 178:	0e 94 91 00 	call	0x122 <Delayus>
 17c:	a9 98       	cbi	0x15, 1	; 21
 17e:	8a e0       	ldi	r24, 0x0A	; 10
 180:	90 e0       	ldi	r25, 0x00	; 0
 182:	0e 94 91 00 	call	0x122 <Delayus>
 186:	98 99       	sbic	0x13, 0	; 19
 188:	c0 68       	ori	r28, 0x80	; 128
 18a:	11 50       	subi	r17, 0x01	; 1
 18c:	17 ff       	sbrs	r17, 7
 18e:	f0 cf       	rjmp	.-32     	; 0x170 <DS1302_ReadByte+0xc>
 190:	a0 9a       	sbi	0x14, 0	; 20
 192:	8c 2f       	mov	r24, r28
 194:	99 27       	eor	r25, r25
 196:	cf 91       	pop	r28
 198:	1f 91       	pop	r17
 19a:	08 95       	ret

0000019c <DS1302_WriteByte>:
 19c:	1f 93       	push	r17
 19e:	cf 93       	push	r28
 1a0:	c8 2f       	mov	r28, r24
 1a2:	17 e0       	ldi	r17, 0x07	; 7
 1a4:	a9 98       	cbi	0x15, 1	; 21
 1a6:	c0 ff       	sbrs	r28, 0
 1a8:	02 c0       	rjmp	.+4      	; 0x1ae <DS1302_WriteByte+0x12>
 1aa:	a8 9a       	sbi	0x15, 0	; 21
 1ac:	01 c0       	rjmp	.+2      	; 0x1b0 <DS1302_WriteByte+0x14>
 1ae:	a8 98       	cbi	0x15, 0	; 21
 1b0:	8a e0       	ldi	r24, 0x0A	; 10
 1b2:	90 e0       	ldi	r25, 0x00	; 0
 1b4:	0e 94 91 00 	call	0x122 <Delayus>
 1b8:	a9 9a       	sbi	0x15, 1	; 21
 1ba:	c6 95       	lsr	r28
 1bc:	11 50       	subi	r17, 0x01	; 1
 1be:	17 ff       	sbrs	r17, 7
 1c0:	f1 cf       	rjmp	.-30     	; 0x1a4 <DS1302_WriteByte+0x8>
 1c2:	cf 91       	pop	r28
 1c4:	1f 91       	pop	r17
 1c6:	08 95       	ret

000001c8 <DS1302_GetTime>:
 1c8:	0f 93       	push	r16
 1ca:	1f 93       	push	r17
 1cc:	cf 93       	push	r28
 1ce:	ad 98       	cbi	0x15, 5	; 21
 1d0:	8a e0       	ldi	r24, 0x0A	; 10
 1d2:	90 e0       	ldi	r25, 0x00	; 0
 1d4:	0e 94 91 00 	call	0x122 <Delayus>
 1d8:	ad 9a       	sbi	0x15, 5	; 21
 1da:	8a e0       	ldi	r24, 0x0A	; 10
 1dc:	90 e0       	ldi	r25, 0x00	; 0
 1de:	0e 94 91 00 	call	0x122 <Delayus>
 1e2:	8f eb       	ldi	r24, 0xBF	; 191
 1e4:	0e 94 ce 00 	call	0x19c <DS1302_WriteByte>
 1e8:	0c ea       	ldi	r16, 0xAC	; 172
 1ea:	10 e0       	ldi	r17, 0x00	; 0
 1ec:	c7 e0       	ldi	r28, 0x07	; 7
 1ee:	0e 94 b2 00 	call	0x164 <DS1302_ReadByte>
 1f2:	f8 01       	movw	r30, r16
 1f4:	81 93       	st	Z+, r24
 1f6:	8f 01       	movw	r16, r30
 1f8:	c1 50       	subi	r28, 0x01	; 1
 1fa:	c7 ff       	sbrs	r28, 7
 1fc:	f8 cf       	rjmp	.-16     	; 0x1ee <DS1302_GetTime+0x26>
 1fe:	ad 98       	cbi	0x15, 5	; 21
 200:	a9 98       	cbi	0x15, 1	; 21
 202:	cf 91       	pop	r28
 204:	1f 91       	pop	r17
 206:	0f 91       	pop	r16
 208:	08 95       	ret

0000020a <DS1302_ReadData>:
 20a:	0f 93       	push	r16
 20c:	1f 93       	push	r17
 20e:	8c 01       	movw	r16, r24
 210:	ad 98       	cbi	0x15, 5	; 21
 212:	a9 98       	cbi	0x15, 1	; 21
 214:	8a e0       	ldi	r24, 0x0A	; 10
 216:	90 e0       	ldi	r25, 0x00	; 0
 218:	0e 94 91 00 	call	0x122 <Delayus>
 21c:	ad 9a       	sbi	0x15, 5	; 21
 21e:	8a e0       	ldi	r24, 0x0A	; 10
 220:	90 e0       	ldi	r25, 0x00	; 0
 222:	0e 94 91 00 	call	0x122 <Delayus>
 226:	80 2f       	mov	r24, r16
 228:	0e 94 ce 00 	call	0x19c <DS1302_WriteByte>
 22c:	8a e0       	ldi	r24, 0x0A	; 10
 22e:	90 e0       	ldi	r25, 0x00	; 0
 230:	0e 94 91 00 	call	0x122 <Delayus>
 234:	0e 94 b2 00 	call	0x164 <DS1302_ReadByte>
 238:	18 2f       	mov	r17, r24
 23a:	8a e0       	ldi	r24, 0x0A	; 10
 23c:	90 e0       	ldi	r25, 0x00	; 0
 23e:	0e 94 91 00 	call	0x122 <Delayus>
 242:	a9 98       	cbi	0x15, 1	; 21
 244:	ad 98       	cbi	0x15, 5	; 21
 246:	81 2f       	mov	r24, r17
 248:	99 27       	eor	r25, r25
 24a:	1f 91       	pop	r17
 24c:	0f 91       	pop	r16
 24e:	08 95       	ret

00000250 <DS1302_WriteData>:
 250:	ff 92       	push	r15
 252:	0f 93       	push	r16
 254:	1f 93       	push	r17
 256:	f8 2e       	mov	r15, r24
 258:	8b 01       	movw	r16, r22
 25a:	ad 98       	cbi	0x15, 5	; 21
 25c:	a9 98       	cbi	0x15, 1	; 21
 25e:	8a e0       	ldi	r24, 0x0A	; 10
 260:	90 e0       	ldi	r25, 0x00	; 0
 262:	0e 94 91 00 	call	0x122 <Delayus>
 266:	ad 9a       	sbi	0x15, 5	; 21
 268:	8a e0       	ldi	r24, 0x0A	; 10
 26a:	90 e0       	ldi	r25, 0x00	; 0
 26c:	0e 94 91 00 	call	0x122 <Delayus>
 270:	8f 2d       	mov	r24, r15
 272:	0e 94 ce 00 	call	0x19c <DS1302_WriteByte>
 276:	8a e0       	ldi	r24, 0x0A	; 10
 278:	90 e0       	ldi	r25, 0x00	; 0
 27a:	0e 94 91 00 	call	0x122 <Delayus>
 27e:	a9 98       	cbi	0x15, 1	; 21
 280:	8a e0       	ldi	r24, 0x0A	; 10
 282:	90 e0       	ldi	r25, 0x00	; 0
 284:	0e 94 91 00 	call	0x122 <Delayus>
 288:	80 2f       	mov	r24, r16
 28a:	0e 94 ce 00 	call	0x19c <DS1302_WriteByte>
 28e:	a9 98       	cbi	0x15, 1	; 21
 290:	8a e0       	ldi	r24, 0x0A	; 10
 292:	90 e0       	ldi	r25, 0x00	; 0
 294:	0e 94 91 00 	call	0x122 <Delayus>
 298:	ad 98       	cbi	0x15, 5	; 21
 29a:	1f 91       	pop	r17
 29c:	0f 91       	pop	r16
 29e:	ff 90       	pop	r15
 2a0:	08 95       	ret

000002a2 <DS1302_SetTime>:
 2a2:	ff 92       	push	r15
 2a4:	0f 93       	push	r16
 2a6:	1f 93       	push	r17
 2a8:	cf 93       	push	r28
 2aa:	df 93       	push	r29
 2ac:	8c 01       	movw	r16, r24
 2ae:	80 e8       	ldi	r24, 0x80	; 128
 2b0:	f8 2e       	mov	r15, r24
 2b2:	60 e0       	ldi	r22, 0x00	; 0
 2b4:	70 e0       	ldi	r23, 0x00	; 0
 2b6:	8e e8       	ldi	r24, 0x8E	; 142
 2b8:	0e 94 28 01 	call	0x250 <DS1302_WriteData>
 2bc:	85 e0       	ldi	r24, 0x05	; 5
 2be:	90 e0       	ldi	r25, 0x00	; 0
 2c0:	0e 94 9e 00 	call	0x13c <Delayms>
 2c4:	e8 01       	movw	r28, r16
 2c6:	06 e0       	ldi	r16, 0x06	; 6
 2c8:	89 91       	ld	r24, Y+
 2ca:	99 27       	eor	r25, r25
 2cc:	bc 01       	movw	r22, r24
 2ce:	8f 2d       	mov	r24, r15
 2d0:	0e 94 28 01 	call	0x250 <DS1302_WriteData>

⌨️ 快捷键说明

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