// PIC16F877 I2C主模式接收数据例程
// 每按一次B1就从从机接收一个字节并显示在数码管上
#include <pic.h>
__CONFIG (HS & LVPDIS & WDTDIS);
#define B1 RC0 // 按键B1状态由RC0端口输入
#define XTAL_FREQ 4 // 外接晶振主频,单位为MHz
const char NumFont[10]={0x3F,0x06,0x5B,0x4F,0x66,
0x6D,0x7D,0X07,0x7F,0x6F}; // 共阴极数码管字形码
void DelayMS(unsigned int ms) //定义延时函数
{
unsigned int j=0;
for(ms;ms>0;ms--)
for(j=27*XTAL_FREQ;j>0;j--) // 1MHz时约是27,其它主频请酌情修改
{
}
}
void main( void )
{
unsigned char i=1;
TRISB=0; // B口控制数码管
PORTB=0; // 情况数码管显示内容
TRISC0=1; // RC0用于读取按钮B1的状态
SSPEN=0; // 关闭MSSP模块,初始化完毕后再打开
TRISC3=1; // 把SCL设为输入引脚
TRISC4=1; // 把SDA设为输入引脚
WCOL=0; // 写冲突检测位清零,若发送数据不正确请检查此位
SSPM3=1; //SSPM=1000,I2C主模式
SSPM2=0;
SSPM1=0;
SSPM0=0;
// I2C波特率=Fosc/(4*(SSPADD+1))
// SSPADD=[(Fosc/(BandRate*4)]-1
SSPADD = 0x9; // 当主频为4Mhz时波特率为100kbps
CKE=0; // 使用I2C协议规范电平
SMP=1; // 关闭斜率控制
SSPIF=0; //若使用SSPIF作为信号发送状态位则需要清空此位
SSPEN=1; // 使能MSSP模块
while (1)
{
if(B1==0) // 若按键B1有变化
{
DelayMS(100); // 消除机械按键前沿抖动
if(B1==0) // 再判断为0说明是一次正常按键
{
SEN=1; // 发送起始位
while(SEN); // SEN=1说明未发送完毕
// 循环退出说明SEN=0,即发送完毕
SSPBUF = 0b10010001; // 从机地址为0b1001000,最低位1表示读操作
while(RW); //RW=1说明数据发送进行中
// 循环退出说明RW=0,即发送完毕
if(ACKSTAT) // ACKSTAT为1说明未收到从机应答
while(1); // 死循环,便于调试,实际项目中应做错误处理
RCEN=1; // 启动一次读操作
while(RCEN); //RCEN=1说明数据发送进行中
// 循环退出说明RCEN=0,即发送完毕
i = SSPBUF; // 获得读到的数据
ACKDT=1; //1表示读取操作结束,0表示还要继续读取
ACKEN=1; // 发送应答信号
while(ACKEN); // ACKEN=1说明未发送完毕
// 循环退出说明ACKEN=0,即发送完毕
PEN=1; // 发送停止位
while(PEN); // PEN=1说明未发送完毕
// 循环退出说明PEN=0,即发送完毕
PORTB=NumFont[i];
DelayMS(100); // 过滤机械按键的后沿抖动
}
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
I2C.zip_-i2c c 接收程序
共34个文件
c:3个
obj:2个
lst:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
1 下载量 24 浏览量
2022-09-19
20:56:38
上传
评论
收藏 119KB ZIP 举报
温馨提示
I2C的主模式数据接收程序设计,包含DSN线路图
资源详情
资源评论
资源推荐
收起资源包目录
I2C.zip (34个子文件)
S162
S162.mcs 853B
S162.hxl 933B
mainaa.C 962B
main.p1 12KB
S162.mcw 27KB
sch
Last Loaded MstrSend.DBK 128KB
Last Loaded MstrRcv.DBK 128KB
MstrRcv.DSN 128KB
main.lst 20KB
S162.sym 4KB
main.rlf 23KB
S162.hex 738B
S162.mcp 643B
main.obj 2KB
S162.map 8KB
SlaveSend
SlaveSend.hxl 841B
SlaveSend.sym 4KB
SlaveSend.cof 3KB
SlaveSend.tagsrc 29B
main.p1 12KB
SlaveSend.map 9KB
main.lst 20KB
main.rlf 23KB
main.obj 2KB
SlaveSend.mcs 2KB
SlaveSend.mcp 643B
SlaveSend.hex 612B
main.sdb 10KB
SlaveSend.mcw 27KB
SlaveSend.mptags 948B
main.C 2KB
main.sdb 10KB
S162.cof 3KB
main.C 2KB
共 34 条
- 1
Kinonoyomeo
- 粉丝: 77
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0