#include <reg51.h> //包含寄存器头文件
#include <stdio.h> //标准输入/输出头文件
sbit T_CLK = P2^7; /*实时时钟时钟线引脚 */
sbit T_IO = P1^4; /*实时时钟数据线引脚 */
sbit T_RST = P1^5; /*实时时钟复位线引脚 */
sbit ACC0 = ACC^0;
sbit ACC7 = ACC^7;
void RTInputByte(char d)
{
char i;
ACC = d;
for(i=8; i>0; i--)
{
T_IO = ACC0; /*相当于汇编中的 RRC */
T_CLK = 1;
T_CLK = 0;
ACC = ACC >> 1;
}
}
char RTOutputByte(void)
{
char i;
for(i=8; i>0; i--)
{
ACC = ACC >>1; /*相当于汇编中的 RRC */
ACC7 = T_IO;
T_CLK = 1;
T_CLK = 0;
}
return(ACC);
}
char R1302(char ucAddr)
{
char ucData;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(ucAddr); /* 地址,命令 */
ucData = RTOutputByte(); /* 读1Byte数据 */
T_CLK = 1;
T_RST = 0;
return(ucData);
}
void Get1302(char ucCurtime[])
{
int i;
char ucAddr =0x81;
for (i=0; i<7; i++)
{
ucCurtime[i] = R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
ucAddr += 2;
}
}
void main() //main 函数
{
char ucCurtime[8];
int ck;
SCON = 0x52; //串口方式1,允许接收
TMOD = 0x20; //定时器1 定时方式2
TH1 = 0xE8; //11.0592MHz 1200 波特率
TL1 = 0xE8;
TI = 1;
TR1 = 1;
while(1)
{
Get1302(ucCurtime);
for(ck=0;ck<7;ck++)
printf("%d\n",ucCurtime[ck]); //显示Hello World
}
}
我弄了一个读取DS1302时间并显示出来的C程序,在KEIL中运行后不停的显示—256,这是怎么回事,那位大侠帮忙看一下,解释一下,
|