PIC单片机IIC通信程序

发布者:纸扇轻摇最新更新时间:2016-01-06 来源: eefocus关键字:PIC单片机  IIC  通信程序 手机看文章 扫描二维码
随时随地手机看文章
#include

#define uchar unsigned char
#define uint unsigned int
__CONFIG(0X3B31);
const uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar a1,a2,a3,a4;
void delay(uint x)
{
   uint a,b;
   for(a=x;a>0;a--)
      for(b=110;b>0;b--);
}

void port_init()
{
   TRISD=0;
   TRISB=0;
   TRISC=0xff;
   PORTD=0;
   PORTB=0;
}

void IIC_init()
{
    SSPSTAT=0x80;
    SSPCON=0x38;//CKP高电平空闲,因为I2C必须加上拉电阻,所以设定高电平空闲
    SSPCON2=0;//开始设为0,在读写的过程中相应改变其中的寄存器
    SSPADD=0x09;//设置波特率,时钟=Fosc/[4*(SSPAD+1)
}

void write(uchar add,uchar wdate)

    SSPIF=0;
    SEN=1;    //启动信号
    while(SSPIF==0);  //1的时候是真  0的时候是假  !SSPIF为非真,为假退出语句
    SSPIF=0;        //软件清零  不会自动清零
    SSPBUF=0XA0;    //发送设备地址
    while(SSPIF==0);  //判断是否发送完毕
    SSPIF=0;
    SSPBUF=add;     //发送存储地址 add随自己设置
    while(SSPIF==0);  //监测数据是否发完
    SSPIF=0;
      
    SSPBUF=wdate;    //写入数据
    while(SSPIF==0);   //每发送一个数据都要检测是否成功
    SSPIF=0;
 
    PEN=1;         //发送停止信号
    while(SSPIF==0);//如果收到停止信号同样会置位
    SSPIF=0;
    delay(10);
}
  
  
uchar read(uchar add)
{
    uchar rdate;
    SSPIF=0;
    SEN=1;
    while(SSPIF==0);
    SSPIF=0;
    SSPBUF=0xA0;//传输设备地址
    while(SSPIF==0);
    SSPIF=0;
    SSPBUF=add;//add为读地数据地址,灵活设置
    while(SSPIF==0);
    SSPIF=0;
 
   RSEN=1;
   while(SSPIF==0);
   SSPIF=0;
   SSPBUF=0xA1;//A仍然为外接设备地址,1表示输入,开始从外接设备读取数据
   while(SSPIF==0);
   SSPIF=0;
 
   RCEN=1;
   while(SSPIF==0);
   rdate=SSPBUF;
   while(SSPIF==0);
   SSPIF=0;
 
 
   ACKDT=1;//写入应答信号
   ACKEN=1;//发送应答信号
   while(SSPIF==0);
   SSPIF=0; 
 
   PEN=1;
   while(SSPIF==0);
   SSPIF=0;
   return(rdate);
}
 
void display(uchar num1,uchar num2,uchar num3,uchar num4)
{
     PORTB=0XF7;
     PORTD=table[num1];

     delay(2);
     PORTB=0XFB;
     PORTD=table[num2];
 
 
     delay(2);
     PORTB=0XFD;
     PORTD=table[num3];
 
     delay(2);
     PORTB=0XFE;
     PORTD=table[num4];

     delay(2);
}

void main()
{
    port_init();
    IIC_init();
    delay(100);
    write(0,123);//8位为存储器,如果写入的值大于255就溢出了
    uchar read(uchar add);
    while(1)
     {
        uchar lednum;
        lednum=read(0);
        a1=lednum/1000;
        a2=lednum00/100;
        a3=lednum0/10;
        a4=lednum;
        display(a1,a2,a3,a4);
     }
}

关键字:PIC单片机  IIC  通信程序 引用地址:PIC单片机IIC通信程序

上一篇:PIC单片机入门之闪灯程序
下一篇:USART串口发送接收数据

推荐阅读最新更新时间:2024-03-16 14:42

基于51单片机实现模拟IIC总线时序
最近用到测量光线的模块BH1750FVI时需要用到IIC总线操作, 于是就又费功夫学习了下, 基本上算是了解了, 所以呢, 就用51的IO口, 模拟出了总线时序, 并能正确操纵需要用IIC总线访问地一系列模块. 本来想写篇文章简单介绍下我对IIC总线的理解的, 但, 发现没工夫, 所以, 放在以后有时候再来弄吧. 今天我还是只给出一个范例程序, 它能在我的51单片机机系统上工作得很好. iic.h 列出了所有IIC总线的操作函数. 下面给出源代码: //iic.h - 实现相关的头文件 //女孩不哭 2013-01-18 #ifndef __IIC_H__ #define __IIC_H__ void iic_start(
[单片机]
NO.10 1.3寸OLED显示屏IIC通信(12864驱动芯片)
  对于单片机来说,有一个良好的人机交互界面是很重要的。那么我们常用的单片机显示设备有什么呢?OLED屏是一个不错选择。      OLED能显示我们的相对应的信息,使得我们的电子设计顿时高大上许多。   OLED是啥呢?OLED跟LED差不多,简单点说,就是一个个小小的LED组合起来,控制每一个小小的LED灯像素的亮灭来进行显示,这样就可以显示任意字符了。   对于OLED来说,单位面积内像素点的个数直接决定了我们显示屏的分辨率。像我在某宝购买的OLED显示屏,是1.3寸内有128*64个像素点。   显然我们是不可能搞这么多的GPIO口来控制这个OLED的,那么我们该如何控制呢?   前人早就为我们想好的解决措施,人家造了专
[单片机]
NO.10 1.3寸OLED显示屏<font color='red'>IIC</font><font color='red'>通信</font>(12864驱动芯片)
单片机串口通信之(多处理通信的接收程序
;多处理器通信的写法分析 ;学习多处理通信的接收程序 ADDR EQU 27H STOP EQU 00H ; ORG 0000H RESTE: MOV R0,#00H L0: DJNZ R0,L0 ; START: LCALL INIT_SIO ;跳转到中断初始化程序中去 CLR RI ;中断请求位清零 SETB SM2 ;多机通信位置1 ,开始接收地址值 WAIT: JNB RI,WAIT MOV A,SBUF CLR RI CJNE A,#ADDR,WAIT ;查看接收到的地址是否于自己相同,不行同则据需等待 CLR SM2 ;多机通信位置0,开始接收数据值 DWAIT: JNB RI,DWAIT
[单片机]
PIC单片机控制DS18B20数字温度传感器原理及实现
#include pic.h #define uchar unsigned char #define uint unsigned int #define DQ RC1 #define DQ_HIGH() TRISC1=1 #define DQ_LOW() TRISC1=0;DQ=0 __CONFIG(0x3B31); const uchar table ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f}; const uchar table1 ={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd, 0x87,
[单片机]
西门子S7-200系列PLC与PC通信程序流程图及工作过程
在上述通信方式下,由于只用两根线进行数据传送,所以不能够利用硬件握手信号作为检测手段。因而在PC机与PLC通信中发生误码时,将不能通过硬件判断是否发生误码,或者当 PC与 PLC工作速率不一样时,就会发生冲突。这些通信错误将导致PLC控制程序不能正常工作,所以必须使用软件进行握手,以保证通信的可靠性。 由于通信是在PC机以及PLC之间协调进行的,所以PC机以及PLC中的通信程序也必须相互协调,即当一方发送数据时另一方必须处于接收数据的状态。如图7-18、图7-19所示分别是PC、PLC的通信程序流程。 图7-18 PC机通信程序流程图 图7-19 S7-PLC通信程序流程图 通信程序的工作过程:PC每发送一个字节前首先
[嵌入式]
西门子S7-200系列PLC与PC<font color='red'>通信</font><font color='red'>程序</font>流程图及工作过程
如何正确的使用PIC单片机内部的IIC通信
#include #define uchar unsigned char #define uint unsigned int #define add 0xaa __CONFIG(0x3B31); const uchar ee_data[]={1,2,3,4,5,6}; uchar read_data[6]; const uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delay(uint x); void init(); void didi(uchar num); vo
[单片机]
如何正确的使用<font color='red'>PIC单片机</font>内部的<font color='red'>IIC</font><font color='red'>通信</font>
安森美半导体在IIC展出高能效方案
    安森美半导体(ON Semiconductor)将参加于2010年3月4-5日在深圳会展中心举行的第十五届国际集成电路展览会(IIC-China 2010),全面展示覆盖汽车、LED照明电源以及便携等应用的不同高能效电源解决方案,积极助力客户研发和创造出绿色的电子产品。     安森美半导体的展位号是2F11和2J25号,将展出针对LED照明、汽车、计算机、LCD电视、便携无线等重点市场应用的高性能、高能效产品及方案,如替代晶体振荡器的PureEdgeTM时钟模块,先进的汽车解决方案,用于下一代手机和便携产品的高集成度半导体元件,LCD电视主板解决方案,不同电源应用的更节能方案,以及包括恒流稳压器(CCR)和功率因数校
[焦点新闻]
飞兆半导体在IIC China 2007展会上宣示高能效解决方案的重要性
全球领先用以优化系统功率的功率模拟和功率分立元件供应商飞兆半导体公司(Fairchild Semiconductor) 将于国际集成电路研讨会暨展览会 (IIC-China) 上,展示其全面的信号和功率路径产品系列,可如何实现高功效和高性能的设计方案。飞兆半导体将于3月5-6日举行的 IIC 深圳 (展台编号:2E01) 和3月13-14日举行的IIC上海 (展台编号 4G01) 展出如下的高能效解决方案: §业界最广泛的集成电机驱动模块 (100W至20kW),可让设计人员实现变频电机驱动应用所需的最高功效、紧凑性和低EMI水平; §最全面的功率产品系列,适用于SMPS设计 (4W-1500W),能够满足低待机功耗法规,并且
[焦点新闻]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved