首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

模拟IIC通讯(没有用应答)

2012-09-14 
模拟IIC通信(没有用应答)#includereg52.h#include INTRINS.Htypedef unsigned char uint8typedef uns

模拟IIC通信(没有用应答)

#include<reg52.h>#include <INTRINS.H>typedef unsigned char uint8;typedef unsigned int  uint16;sbit SCL = P3^7;sbit SDA = P3^6;void delay(){_nop_();_nop_();_nop_();_nop_();//用_nop_()需要用INTRINS.H}void IIC_init(){  SDA=1;  SCL=1;}void IIC_start(){  SCL=0;  delay();  SDA=1;  delay();  SCL=1;  delay();  SDA=0;  delay();  SCL=0;  delay();}void IIC_stop(){  SCL=0;  delay();  SDA=0;  delay();  SCL=1;  delay();  SDA=1;  delay();}void IIC_send(uint8 byte){  uint8 mask,i,j;  mask=0x80;  for(i=0;i<8;i++)  {    SCL=0;delay();if((mask&&byte)==0)     SDA=0; else      SDA=1;delay();mask>>=1;SCL=1;delay();  }  SCL=0;  delay();  SDA=1;  delay();  SCL=1;  delay();  j=SDA;  SCL=0;  delay();}uint8 IIC_read(){  uint8 byte,i;  byte=0;  for(i=0;i<8;i++)  {     SCL=0;     delay(); SDA=1; delay(); SCL=1; delay(); if(SDA==1) {   byte|=0x01; } byte<<=1;  }  SCL=0;  delay();  SDA=1;  delay();  SCL=1;  delay();;  SCL=0;  delay();  return byte;}void write(uint8 addr,uint8 datebyte){    IIC_start();  IIC_send(0xa0);  IIC_send(addr);  IIC_send(datebyte);  IIC_stop();}uint8 read(uint8 addr){    uint8 datebyte;  IIC_start();  IIC_send(0xa0);  IIC_send(addr);  IIC_start();  IIC_send(0xa1);  datebyte=IIC_read();  IIC_stop();  return datebyte;}void UART_init(void){SCON = 0x50;TMOD = 0x20;TH1  = 0xFD;TL1  = 0xFD;TR1  = 1;//ES   = 1;//EA   = 1;}void UART_send_byte(uint8 dat){SBUF = dat;while(!TI);TI = 0;}main(){uint8 addr = 0x00, databyte = 0x11;uint8 c = 0;uint16 i;UART_init();IIC_init();while(1){write(addr, databyte);for(i = 0; i < 1000; i++){delay();}c = read(addr);UART_send_byte(c);addr++;   //地址往下加databyte++;if(addr == 0xff) {addr = 0;}if(databyte == 0xff) {databyte = 0;}for(i = 0; i < 1000; i++){delay();} }}


代码不理解的欢迎留言

热点排行