导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→发表看法:[whf68]C51编程:请问谁有24c04的程序.p



No.17070
作者:whf68
邮件:whf68cn_cn@sina.com
ID:5117
登陆:8次
文章数:29篇
最后登陆IP:222.72.9.229
最后登陆:2005/1/29 16:21:26
注册:2001/11/16 9:12:00
财富:135
发帖时间:2003/1/10 16:34:00
发贴者IP:218.79.62.190
标题:whf68:C51编程:请问谁有24c04的程序.p2.1(sDA)P2.0(SCL).用P1口来显示出来.???请大侠帮忙:_))
摘要:No.17070C51编程:请问谁有24c04的程序.p2.1(sDA)P2.0(SCL).用P1口来显示出来.???请大侠帮忙:_)) 
//单主器件I2C总线模拟子程序//

#include <at89x51.h>
#include <intrins.h>

#define uchar unsigned char
sbit VSDA=P2^1;        //将p1.0口模拟数据口
sbit VSCL=P2^0;        //将p1.1口模拟时钟口

uchar idata SLA;       //从器件地址
uchar idata SLAW;      //从器件写地址
uchar idata SLAR;      //从器件读地址
uchar idata NUMBYT;    //数据传送字节
uchar idata MTD[10]={0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77};    //数据发送缓冲

uchar idata MRD[10];    //数据接收缓冲区
bit   bdata NACK;      //器件坏或错误标志位

//启动I2C总线子程序//
void STA(void)
{
  VSDA=1;              //启动I2C总线
  VSCL=1;
  _nop_();             //延时4.7us,根据晶振频率调整空操作个数,这里以fosc=12MHz,
下同
  _nop_();
  _nop_();
  _nop_();
  VSDA=0;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  VSCL=0;
 }


//停止I2C总线数据传送子程序//
void STOP(void)
{
  VSDA=0;              //停止I2C总线数据传送
  VSCL=1;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  VSDA=1;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  VSCL=0;
}


//发送应答位子程序//
void MACK(void)
{VSDA=0;               //发送应答位
  VSCL=1;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  VSDA=1;
  VSCL=0;
}


//发送非应答位子程序//
void MNACK(void)
{
  VSDA=1;              //发送非应答位
  VSCL=1;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  VSDA=0;
  VSCL=0;
}


//应答位检查子程序//
void CACK(void)
{
  VSDA=1;              //应答位检查(将p1.0设置成输入,必须先向端口写1)
  VSCL=1;
  F0=0;
  if (VSDA==1) F0=1;   //若VSDA=1表明非应答,置位非应答标志F0
  VSCL=0;
}


//发送一个字节数据子程序,程序入口p为发送缓冲区地址//
void WRBYT(p)
uchar idata *p;
{
  uchar idata n=8;     //向VSDA上发送一位数据字节,共八位
  uchar idata temp;
  temp=*p;
  while (n--) {
                if  ((temp&0x80)==0x80)    //若要发送的数据最高位为1则发送位1
                {  VSDA=1;      //传送位1
                   VSCL=1;
                    _nop_();
                    _nop_();
                   _nop_();
                   _nop_();
                    VSDA=0;
                     VSCL=0;
                 }
       else    {
                   VSDA=0;      //否则传送位0
                   VSCL=1;
                    _nop_();
                    _nop_();
                   _nop_();
         ......

>>返回讨论的主题



  发表回复
用户名   *您没有注册?
密码   *
验证码   * .
标题   *
心情
随便说说    我回答你    最新发现    得意的笑   
气死我了    真是没劲    坚决同意    表示反对   
大家过来    好奇怪哟    懒得理它    大家小心   
文件上传
内容


字体:      字体大小:    颜色:
粗体 斜体 下划线 居中 超级连接 Email连接 图片 Flash图片 Shockwave文件 realplay视频文件 Media Player视频文件 QuickTime视频文件 引用 飞行字 移动字 发光字 阴影字 查看更多的心情图标 背景音乐
点击加入表情
                         
选项
有回复时用短消息通知您?

   




老古网执行:16毫秒 最大:7276毫秒 查询6次