2832|2

15

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

PCF8563传数据给单片机出错.... [复制链接]

目前单片机向8563送数据正确,但是单片机读取8563的数据有错误,先是FF,改了程序后又变成00了.........不知道是哪里有问题...恳请大家帮忙分析一下....O(∩_∩)O谢谢
此帖出自51单片机论坛

最新回复

  详情 回复 发表于 2012-9-6 15:09

点评

# include # include # define uchar unsigned char #define XTAL 12000000 // CUP 晶振频率 #define baudrate 2400 // 通信波特率 sbit SDA=P1^7; sbit SCL=P1^6; sbit text=P0^1; uchar mi  详情 回复 发表于 2012-9-6 15:52
点赞 关注
 

回复
举报

207

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
此帖出自51单片机论坛
 
个人签名http://shop69542095.taobao.com/供应芯片
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 楼主 xxx564335 的帖子

# include
# include
# define uchar unsigned char
#define XTAL 12000000     // CUP 晶振频率
#define baudrate 2400    // 通信波特率

sbit SDA=P1^7;
sbit SCL=P1^6;
sbit text=P0^1;

uchar min;
uchar hour;
uchar time_data;
uchar x;
uchar z;
uchar buff[3];
uchar b;

bit ack;

void     _Nop(uchar   i)               /*定义空指令*/
{
uchar   j;
for(j=0;j }


void I2C_Start(void)
{
   SDA=1;
   _Nop(1);
   SCL=1;                                                                                               
   _Nop(5);
   SDA=0;
   _Nop(5);
   SCL=0;
   _Nop(2);
}

void I2C_Stop(void)
{
  SDA=0;
  _Nop(1);
  SCL=1;
  _Nop(5);
  SDA=1;
  _Nop(4);
}

void SendByte(uchar y)
{
  uchar BitCnt;
  for(BitCnt=0;BitCnt <8;BitCnt++)
   {
       uchar j;
    if((y<         SDA=1;
         else  SDA=0;
        _Nop(1);
         SCL=1;
         _Nop(5);
         SCL=0;
   }
  _Nop(2);
  SDA=1;
  _Nop(2);
  SCL=1;
  _Nop(3);
  if(SDA==1)ack=0;
  else ack=1;
  SCL=0;
  _Nop(2);
}

uchar RcvByte()
{
  uchar retc;
  uchar BitCnt;
  retc=0;
  SDA=1;
  for(BitCnt=0;BitCnt<8;BitCnt++)
     {
           _Nop(1);
           SCL=0;
           _Nop(4);
           SCL=1;
           _Nop(2);
           retc=retc<<1;
           if(SDA==1)retc=retc+1;
           _Nop(2);
         }
SCL=0;
_Nop(2);
return(retc);
}                  

void Ack_I2C(uchar a)
{
  if(a==0)SDA=0;
         else SDA=1;
  _Nop(3);
  SCL=1;
  _Nop(5);
  SCL=0;
  _Nop(2);
}  

void ISendByte(uchar sla,uchar suba,uchar c)
{
  I2C_Start();
  SendByte(sla);
  _Nop(1);
  SendByte(suba);
  _Nop(1);
  SendByte(c);
  _Nop(1);
  I2C_Stop();
}

uchar IRcvByte(uchar sla,uchar suba,uchar y)
{

  I2C_Start();
  SendByte(sla);
  _Nop(10);
  SendByte(suba);
  _Nop(10);
  I2C_Stop();
  I2C_Start();
  SendByte(sla+1);
  _Nop(10);
  
  for(b=0;b    {
   buff=RcvByte();
   if (b!=y-1) Ack_I2C(0);
  //z=RcvByte();
  Ack_I2C(1);
  I2C_Stop();
}
}          

/****************************串口初始化****************************/
void init(void)
{
        EA=1; // "中断总允许"
        ES=1;

        TMOD=0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率

        TH1=(unsigned char)(256 - (XTAL / (32L * 12L * baudrate)));
    TL1=(unsigned char)(256 - (XTAL / (32L * 12L * baudrate)));

        SCON=0x50; // 设定串行口工作方式(UART为模式1,8位数据,允许接收)
        PCON=0x00; // 波特率不倍增

        TR1=1; // 启动定时器1                                  

}



void main()
{
text=0;
init();
ISendByte(0xa2,0x00,0x00);
ISendByte(0xa2,0x03,0x00);
//IsendByte(0xa2,0x04,0x06);
  while(1)
{
    min=IRcvByte(0xa2,0x03,0x03);
        //hour=IRvByte(0xa2,0x04);
    text=0;
        SBUF=buff;
        while(!TI);// 等特数据传送
        TI=0;      // 清除数据传送标志
               
}
       

}
此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表