[国产单片机] 读取单片机DS1302时间并显示

[复制链接]
1572|2
 楼主| crf7036 发表于 2013-11-21 21:49 | 显示全部楼层 |阅读模式
#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,这是怎么回事,那位大侠帮忙看一下,解释一下,
ayb_ice 发表于 2013-11-22 10:47 | 显示全部楼层
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);
}

不要使用ACC,更何况跨越这么长的语句
 楼主| crf7036 发表于 2013-11-22 16:31 | 显示全部楼层
那要怎么改呀,不用用什么比较合适,求教,我是新手,多谢多谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

41

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部