#include <pic.h>//头文件
#include <float.h>
__CONFIG(FOSC_XT&WDTE_OFF&PWRTE_OFF&BOREN_ON&LVP_OFF);//单片机配置通用
#define IIC_SDA RD2
#define IIC_SCL RD1
void delay_us(unsigned char a)
{
for(;a>1;a--)
{_nop();}
}
void delay1s(void)
{
unsigned int a,b,c;
for(a=0;a<100;a++)
for(b=0;b<100;b++)
for(c=0;c<100;c++);
}
void portinit()//系统参数初始化
{
TRISA=0XFB;//输入口,模拟采样口。RA4为逆变检测端口
TRISB=0X00;//输出口 全部输出
TRISC=0X80;//输出口 RC6(PF模块识别)、RC5为输入(维护识别键) 0110 0000 //0x60
OPTION_REG=0X07;//选择寄存器,预分频比为1:256,分频器分配给TMR0;
INTCON=0x00;//TMR0溢出中断使能
TXSTA=0X24;//发送状态控制寄存器
RCSTA=0X90;//接受状态控制寄存器
BRGH=1;
SPBRG=0x19;
PIE1=0x00;
TXIE=0;//发送中断禁止
RCIE=1;//接受中断使能
// TMR0=0X05; //4M,1:256分频,定时64ms
PEIE=1; //外部中断使能中断
GIE=1; //总中断
PORTB=0X00;
PORTA=0X00;
PORTC=0X00;
}
void SDA_OUT()
{
TRISDbits.TRISD2=0;
}
void SDA_IN()
{
TRISDbits.TRISD2=1;
}
//产生IIC起始信号
void IIC_Start(void)
{
SDA_OUT(); //sda线输出
IIC_SDA=1;
IIC_SCL=1;
delay_us(4);
IIC_SDA=0;//START:when CLK is high,DATA change form high to low
delay_us(4);
IIC_SCL=0;//钳住I2C总线,准备发送或接收数据
}
//产生IIC停止信号
void IIC_Stop(void)
{
SDA_OUT();//sda线输出
IIC_SCL=0;
IIC_SDA=0;//STOP:when CLK is high DATA change form low to high
delay_us(4);
IIC_SCL=1;
IIC_SDA=1;//发送I2C总线结束信号
delay_us(4);
}
//等待应答信号到来
//返回值:1,接收应答失败
// 0,接收应答成功
unsigned char IIC_Wait_Ack(void)
{
unsigned char ucErrTime=0;
SDA_IN(); //SDA设置为输入
IIC_SDA=1;delay_us(1);
IIC_SCL=1;delay_us(1);
while(RA0)
{
ucErrTime++;
if(ucErrTime>250)
{
IIC_Stop();
return 1;
}
}
IIC_SCL=0;//时钟输出0
return 0;
}
//产生ACK应答
void IIC_Ack(void)
{
IIC_SCL=0;
SDA_OUT();
IIC_SDA=0;
delay_us(2);
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
}
//不产生ACK应答
void IIC_NAck(void)
{
IIC_SCL=0;
SDA_OUT();
IIC_SDA=1;
delay_us(2);
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
}
//IIC发送一个字节
//返回从机有无应答
//1,有应答
//0,无应答
void IIC_Send_Byte(unsigned char txd)
{
unsigned char t;
SDA_OUT();
IIC_SCL=0;//拉低时钟开始数据传输
for(t=0;t<8;t++)
{
//IIC_SDA=(txd&0x80)>>7;
if((txd&0x80)>>7)
IIC_SDA=1;
else
IIC_SDA=0;
txd<<=1;
delay_us(2); //对TEA5767这三个延时都是必须的
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
delay_us(2);
}
}
//读1个字节,ack=1时,发送ACK,ack=0,发送nACK
unsigned char IIC_Read_Byte(unsigned char ack)
{
unsigned int i,receive=0;
SDA_IN();//SDA设置为输入
for(i=0;i<8;i++ )
{
IIC_SCL=0;
delay_us(2);
IIC_SCL=1;
receive<<=1;
if(RA0)
receive++;
delay_us(1);
}
if (!ack)
IIC_NAck();//发送nACK
else
IIC_Ack(); //发送ACK
return receive;
}
//--------------------------------------------------------------------------------
//串口发送程序
//--------------------------------------------------------------------------------
void putchar(unsigned char data)//串口发送字节程序
{
TXREG=data;
while(!TRMT);//等待数据发送完
}
//-----------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------
void main()
{
unsigned char i,i1,a,b;
unsigned char temp,temp1,temp2,temp3;
i=1;
i1=1;
portinit();//系统初始化
while(1)
{
// IIC_Start();
// IIC_Send_Byte(0xbE);
// IIC_Wait_Ack();
// IIC_Send_Byte(0x11);
// IIC_Wait_Ack();
// IIC_Stop();
/*
datatemp[0]=0xbe;
datatemp[1]=0xf6;
datatemp[2]=0x20;
CRCdata=crc_high_first(datatemp,3);
IIC_Start();
IIC_Send_Byte(0xbE);
IIC_Wait_Ack();
IIC_Send_Byte(0xf6);
IIC_Wait_Ack();
IIC_Send_Byte(0x20);
IIC_Wait_Ack();
//IIC_Send_Byte(0x68);
//IIC_Wait_Ack();
IIC_Send_Byte(CRCdata);
IIC_Wait_Ack();
IIC_Stop();*/
IIC_Start();
IIC_Send_Byte(0xbe);
IIC_Wait_Ack();
IIC_Send_Byte(0x20);
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte(0xbf);
IIC_Wait_Ack();
temp=IIC_Read_Byte(1);
temp1=IIC_Read_Byte(1);
temp2=IIC_Read_Byte(1);
temp3=IIC_Read_Byte(1);
IIC_Stop();//2úéúò???í£?1ì??t
putchar(temp);
putchar(temp1);
putchar(temp2);
putchar(temp3);
delay1s();
}
}
void interrupt T0(void)
{
if (T0IF==1)//中断溢出标志位为1,中断发生
{
T0IF=0;
}
}
main-1.zip_IO口模拟IIC_IO口通信_addition6mc_foodp7w
版权申诉
132 浏览量
2022-09-23
20:15:04
上传
评论
收藏 2KB ZIP 举报
![avatar](https://profile-avatar.csdnimg.cn/dc78d2406d17417ca42db3bd43b9c72a_weixin_42652674.jpg!1)
御道御小黑
- 粉丝: 62
- 资源: 1万+
最新资源
- 使用ASP.NET Core和Entity Framework Core来构建一个基本的进销存系统.rar
- 深度学习经典数据集+FER2013面部表情识别+附带使用方法的python代码
- Python中,要实现连接多个相机并识别多个二维码.rar
- 使用FFT算法对一个信号进行分析.rar
- 171cms游戏应用下载系统源码.zip
- 基于jsp+servlet+mysql蛋糕甜品店购物网站源码+数据库(期末大作业).zip
- Java项目:在线蛋糕商城系统(java+jsp+mysql)源码+数据库+期末大作业.zip
- ZapyaClient10_7-1.apk
- 织梦cms站长导航网站源码.zip
- 基于SSM+MySQL的网络投票调查问卷系统源码+数据库(java期末大作业).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)