21ic电子技术开发论坛 单片机与嵌入式系统 侃单片机论坛 读取单片机DS1302时间并显示
发新帖我要提问
返回列表
打印
[国产单片机]

读取单片机DS1302时间并显示

[复制链接]
994|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

粉丝
关闭 热门推荐
快速回复 在线客服 返回列表 返回顶部