PIC单片机IIC通信程序

来源:本站
导读:目前正在解读《PIC单片机IIC通信程序》的相关信息,《PIC单片机IIC通信程序》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《PIC单片机IIC通信程序》的详细说明。
简介:本文给大家分享了一个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通信程序》最后刷新时间 2024-03-14 00:57:46,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《PIC单片机IIC通信程序》该内容的真实性请自行鉴别。