📄 hjmcu.lss
字号:
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 + -