MCU_I_squared_C_bus_communication.rar

  • zhuoyue0407
    了解作者
  • C/C++
    开发工具
  • 19KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 4
    下载次数
  • 2009-08-20 10:33
    上传日期
单片机实现I平方C总线通信,对学习单片机通信很有好处的哦。
MCU_I_squared_C_bus_communication.rar
  • 单片机实现I平方C总线通信
  • PROC
  • I2CPRO.PLG
    4.6KB
  • I2C.H
    697B
  • I2CPRO_UV2.BAK
    1.8KB
  • I2C.OBJ
    8.2KB
  • I2CPRO.LNP
    41B
  • I2CPRO.OPT
    1.3KB
  • I2CPRO
    7.1KB
  • I2CPRO_OPT.BAK
    1.3KB
  • I2CPRO.M51
    12KB
  • I2CPRO.UV2
    1.8KB
  • I2C.C
    3.3KB
  • I2C.LST
    8.5KB
  • 电路原理图
  • I2C.SCH
    6.6KB
内容介绍
/*****************************************/ /* Copyright (c) 2005, 通信工程学院 */ /* All rights reserved. */ /* 作 者:戴 佳 */ /*****************************************/ #include "I2C.h" /* 延时约5微秒,对于12M时钟 */ void delay5us() { uint i; for (i=0;i<5;i++) _nop_(); } /* 起始条件子函数 */ void start(void) { SDA = 1; // 启动I2C总线 SCL = 1; delay5us(); SDA = 0; delay5us(); SCL = 0; } /* 停止条件子函数 */ void stop(void) { SDA = 0; // 停止I2C总线数据传送 SCL = 1; delay5us(); SDA = 1; delay5us(); SCL = 0; } /* 发送应答子函数 */ void ack(void) { SDA = 0; // 发送应答位 SCL = 1; delay5us(); SDA = 1; SCL = 0; } /* 发送非应答子函数 */ void n_ack(void) { SDA = 1; // 发送非应答位 SCL = 1; delay5us(); SDA = 0; SCL = 0; } /* 应答位检查子函数 */ void checkack(void) { SDA = 1; // 应答位检查(将p1.0设置成输入,必须先向端口写1) SCL = 1; nackFlag = 0; if(SDA == 1) // 若SDA=1表明非应答,置位非应答标志F0 nackFlag = 1; SCL = 0; } /* 发送一个字节数据子函数 */ void sendbyte(uchar idata *ch) { uchar idata n = 8; uchar idata temp; temp = *ch; while(n--) { if((temp&0x80) == 0x80) // 若要发送的数据最高位为1则发送位1 { SDA = 1; // 传送位1 SCL = 1; delay5us(); SDA = 0; SCL = 0; } else { SDA = 0; // 否则传送位0 SCL = 1; delay5us(); SCL = 0; } temp = temp<<1; // 数据左移一位 } } /* 接收一字节子程序 */ void recbyte(uchar idata *ch) { uchar idata n=8; // 从SDA线上读取一位数据字节,共8位 uchar idata temp = 0; while(n--) { SDA = 1; SCL = 1; temp = temp<<1; // 左移一位 if(SDA == 1) temp = temp|0x01; // 若接收到的位为1,则数据的最后一位置1 else temp = temp&0xfe; // 否则数据的最后一位置0 SCL=0; } *ch = temp; } /* 发送n字节数据子程序 */ void sendnbyte(uchar idata *sla, uchar n) { uchar idata *p; start(); // 发送启动信号 sendbyte(sla); // 发送从器件地址字节 checkack(); // 检查应答位 if(F0 == 1) { NACK = 1; return; // 若非应答表明器件错误或已坏,置错误标志位NACK } p = sbuf; while(n--) { sendbyte(p); checkack(); // 检查应答位 if (nackFlag == 1) { NACK=1; return; // 若非应答表明器件错误或已坏,置错误标志位NACK } p++; } stop(); // 全部发完则停止 } /* 接收n字节数据子程序 */ void recnbyte(uchar idata *sla, uchar n) { uchar idata *p; start(); // 发送启动信号 sendbyte(sla); // 发送从器件地址字节 checkack(); // 检查应答位 if(nackFlag == 1) { NACK = 1; return; } p = rbuf; // 接收字节存放在rbuf中 while(n--) { recbyte (p); ack(); // 收到一个字节后发送一个应答位 p++; } n_ack(); // 收到最后一个字节后发送一个非应答位 stop(); } /* 主函数,模拟实现I2C总线的数据收发 */ void main(void) { uchar i,numbyte; numbyte = 8; /* 需发送的8字节数据 */ for (i=0;i<numbyte;i++) sbuf[i] = i+0x11; SLAdd = 0x58; // 从器件地址 sendnbyte(&SLAdd,numbyte); // 向从器件发送存放在sbuf中的8字节数据 for (i=0;i<10000;i++) delay5us(); recnbyte(&SLAdd,numbyte); // 由从器件接收8字节数据,存放在rbuf中 }
评论
    相关推荐
    • 数据库课程设计
      一个数据库课程设计,access管理工具实现,用的是窗体!
    • 数据库课程设计
      数据库课程设计十分完整有需要的请下载啊谢谢
    • 数据库课程设计
      广东工业大学数据库课程设计,可视化界面连接数据库,delphi7
    • 数据库课程设计
      数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述
    • 数据库课程设计
      数据库课程设计》由周爱武、汪海威、肖云编著,遵循数据库课程设计的具体要求,独立于具体的数据库教材,从实际应用系统的需求着手,引导读者逐步完成数据库设计全过程,重点讲解数据库系统的需求分析、概念设计、...
    • 数据库课程设计
      数据库课程设计人事管理系统 数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计...
    • 数据库课程设计
      数据库课程设计,基于visual basic自助银行管理系统,界面很清爽,实用。同学都说好,所以就上传了!!!
    • 数据库课程设计
      数据库课程设计 里面有详细的文档资料 包含数据库一切的图 以及生成的数据库表文件 期末得分为优秀
    • 数据库课程设计
      可以作为数据库课程设计,也可以作为Java的课程设计,内容全面。本资源转载的,非本人原创。用于交流学习,特此申明!
    • 数据库课程设计
      数据库课程设计蓝天大学学生管理系统 2.商店信息管理系统 3.实验室机房收费管理系统 4.图书馆资料检索系统 5.企业库存管理系统 6.仓库管理系统 7.工程项目管理系统 8.教材管理系统 9.企业人事管理系统 10.企业财务...