PCM开发板模块实验指导--IIC主从实验
模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762
25---IIC主读写固定寄存器地址实验:
硬件需求:PC机,PCM模块一个,microUSB线;
软件需求:PCM编译软件,电脑端串口调试助手;
供电方式:USB线接PC机供电;
连接电路:图29
图29 IIC主读写固定寄存器地址实验电路图
PCM开发板模块共有2个IIC接口,其中IIC0固定工作在主模式,IIC1固定工作在从
模式,我们把SCL0,SDA0作为主机接口,SCL1,SDA1作为从机接口。
本实验直接使用模块的主从设备进行通讯,直接把SCL0连接SCL1,SDA0连接
SDA1,SCL为时钟线,SDA为数据线;
实验过程:IIC主把D100寄存器的值写入到IIC从的D200寄存器中,延时0.5秒,IIC
主又读取IIC从的D200寄存器中的值到D101寄存器中,然后把D100的值加1,一直这样
循环下去。每次循环,主写入的值应该等于主读的值。
注意指令iicread后面至少要加50ms的延时,不然有可能读出的数据为0.
实验程序如下:
1 intpro int1 //主写中断
2 iicslaverwrite di0 d0 //IIC从更新发送缓存,i0是地址(主写的时候,I0已经保存了
//要写的地址),D0是字节数
3 endint
4 main
5 iic 1 100000 //初始化主IIC,1表示16位寄存器地址,速度100KHz
6 intinit s1 int1 //开启主写中断
//初始化IIC从,本机从地址52(注意是7位地址),I0保存主机要读写的寄存器地
//址,D0是读写字节长度,主读S0置位,主写S1置位
7 iicslaver 52 i0 d0 s0 s1
8 mov 1 d100 //d100=1
9 while 1 //无限循环
10 prints "master write,data is %d\r\n" d100 //输出D100寄存器值
11 iicwrite 52 200 d100 4 //主写,从地址52,从机寄存器地址200,要写的数
//据为D100,长度4字节
12 delay 500 //延时0.5S
13 iicread 52 200 d101 4 //主读,从地址52,从机寄存器地址200,读取的数
//据保存到寄存器D101,长度4字节
14 delay 500 //延时0.5S
15 prints "master read,data is %d\r\n" d101 //输出D101寄存器值
16 inc d100 //D100加1
17 endwhile
18 endmain
程序中第1-3行为IIC主写中断程序,在中断程序中使用iicslaverwrite指令更新IIC1的
发送缓存;
第4-18行为主程序;
第5行,IIC主初始化(IIC0)为16位寄存器地址模式,速度100KHz;
第6行,开启IIC主写中断程序,主写中断后执行int1程序;
第7行,IIC从初始化(IIC1),从地址为52,I0保存主机要读写的寄存器地址,D0
是读写字节长度,主读S0置位,主写S1置位;
第8行,寄存器D100保存1;
第9-17为while无限循环体;
第10行,输出寄存器D100的值;
第11行,主写指令,写入从地址52,从机寄存器地址为200,要写的数据为D100的
值(为1),写字节长度为4字节;
第12行,延时0.5S;
第13行,主读,从地址为52,读取从机寄存器地址为200,读取的数据保存到寄存
器D101,长度4字节;
第14行,延时0.5S;
第15行,输出寄存器D101的值,即读取到的值输出显示;
第16行,寄存器D100的值加1,继续循环,每循环一次D100寄存器加1;
下图30为串口助手输出信息,可以看出,主机写入从机的值,然后再读从机的值,
2个值是相同的,表明写入值是正确的。
图30 IIC主读写固定寄存器地址实验数据输出
26---IIC主读任意寄存器地址实验:
硬件需求:PC机,PCM模块一个,microUSB线;
软件需求:PCM编译软件,电脑端串口调试助手;
供电方式:USB线接PC机供电;
连接电路:IIC主读写固定寄存器地址实验中的图29
在前面的实验25中IIC主读写固定寄存器地址实验中,IIC主读写都是固定的寄存器
地址(实验中是D200),所以IIC从可以在写中断程序中更新发送缓存。
本实验讲解IIC主如何读取从机任意寄存器地址,因为在主机读之前,从机不知道主
机要读取哪个寄存器,所以无法更新发送缓存。
本实验利用主机读时,从机会产生主读中断,我们在中断程序中更新发送缓存,当
主机下次读取的时候,就是读取本次更新的内容。注意2次读取之间的间隔时间至少要
50ms。本实验使用1S延时。
实验中主机依次读取D200--D208寄存器中的值,间隔时间1S,从机在读取中断中
更新发送缓存,主机在下次读取的时候就是读取的这次更新的值。所以主机第一次读取
的值是随机值。
实验程序如下:
1 intpro int0 //主读中断
2 mov 4 d0 //D0=4
3 iicslaverwrite di0 d0 //IIC从更新发送缓存,i0是地址(主写的时候,I0已经保存了
//要写的地址),D0=4是字节数
4 endint
5 main
6 iic 1 100000 //初始化主IIC,1表示16位寄存器地址,速度100KHz
7 intinit s0 int0 //开启主读中断
//初始化IIC从,本机从地址52(注意是7位地址),I0保存主机要读写的寄存器地
//址,D0 是读写字节长度,主读S0置位,主写S1置位
8 iicslaver 52 i0 d0 s0 s1
//D200-D208中依次保存1-9的值,供主机读取实验
9 mov 1 d200
10 mov 2 d201
11 mov 3 d202
12 mov 4 d203
13 mov 5 d204
14 mov 6 d205
15 mov 7 d206
16 mov 8 d207
17 mov 9 d208
18 mov 200 d99 //d99=200
19 mov 4 d98 //d98=4
20 while 1 //无限循环
//主读,从地址52,从机寄存器地址D99=200,读取的数据保存到寄存器D100,长
//度d98=4 //字节
21 iicread 52 d99 d100 d98
22 delay 1000 //延时1S
23 prints "master read,data is %d\r\n" d100 //输出D100寄存器值
24 inc d99 //D99加1
25 if d99 > 208 //地址大于208
26 mov 200 d99 //从地址200开始读取
27 endif
28 endwhile
29 endmain
程序中第1-4行为IIC主读中断程序,在中断程序中使用iicslaverwrite指令更新IIC从
(IIC1)的发送缓存;
第5-29行为主程序;
第6行,IIC主初始化(IIC0)为16位寄存器地址模式,速度100KHz;
第7行,开启IIC主读中断程序,主读中断后执行int0中断程序;
第8行,IIC从初始化(IIC1),从地址为52,I0保存主机要读写的寄存器地址,D0
是读写字节长度,主读S0置位,主写S1置位;
第9-17行,寄存器D200-D208中依次保存1-9的值,供主机读取实验;
第18,19行,寄存器D99保存200,D98保存4;
第20-28为while无限循环体;
第21行,主读指令,从地址52,从机寄存器地址为D99值为200,读出的数据保存
到寄存器D100起始的地址中,读字节长度为D98的值4字节;
第22,23行,延时1S后输出D100寄存器的值,即读取的值;
第24-27行,寄存器D99加1,并判断值,如果大于208,就保存200,程序继续循
环;
下图31为串口助手输出信息,可以看出,主机读从机寄存器D200-D208的值分别是
1-9,表明读取的值是正确的。
图31 IIC主读任意寄存器地址实验数据输出
PCM开发板模块实验指导--IIC主从实验相关推荐
- PCM开发板模块实验指导--有刷直流马达速度位置控制实验
模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762 44---有刷直流马达速度位置控制实验: ...
- PCM开发板模块实验指导--有刷直流马达速度控制实验
模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762 43---有刷直流马达速度控制实验: ...
- PCM开发板模块实验指导--触摸屏控制步进电机位置实验
模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762 65---触摸屏控制步进电机位置实验: ...
- PCM开发板模块实验指导--触摸屏控制步进电机速度实验
模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762 64---触摸屏控制步进电机速度实验: ...
- PCM开发板模块实验指导--SPI读写PSRAM64实验
模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762 32---SPI读写PSRAM64实验实验: ...
- PCM开发板模块实验指导--有刷直流马达正反转实验
模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762 42---有刷直流马达正反转实验: ...
- linux管道通信题目,操作系统实训(Linux)——习题解答、例题解析、实验指导-王红-实验实验7软中断及管道通信课案.ppt...
操作系统实训(Linux)--习题解答.例题解析.实验指导-王红-实验实验7软中断及管道通信课案.ppt 实验7 软中断及管道通信 一.实验目的(1)掌握linux系统软中断通信的实现方法.(2)掌握 ...
- python编程图书批发商店的某本书的零售价是26.5_根据实验指导书,完成实验3的所有任务,使用 实验三(实验报告).docx 完成报告并提交。_学小易找答案...
[多选题]期末结账后没有余额的账户是( ). [单选题]企业本期生产产品直接耗用原材料 3000 元,生产车间管理方面耗用原材料 2000 元,正确的会计分录是( TopSage ) [多选题]下列属 ...
- python编程图书批发商店的某本书的零售价是26.5_根据实验指导书,完成实验6的所有任务,使用 实验六(实验报告).docx 完成报告并提交。_学小易找答案...
[简答题]完成课本P116,二简答题第5题,判断最大最小值,提交源代码 [简答题]从键盘输入 n(0 [其它]其采用实验1的报告模版,参考优秀实验报告的撰写格式,认真撰写实验报告. 作业提交必须以wo ...
最新文章
- xcode 编译静态库所要注意
- html表格点击为编辑框,el-table表格内双击或单击单元格编辑输入框、日期等
- React开发(101):样式处理
- Kibana Guide ( Kibana 向导 )
- ubuntu下打开.chm文件的方法(比如交换机参考手册)
- 使用iMazing将PDF文件导入至iOS设备
- sqlServer2012安装包下载
- 电脑端思维导图软件推荐
- 投稿英文国际会议论文经验总结
- 存储服务器和磁盘阵列有什么区别
- centos oracle libaio哪下载,在CentOS4.5上安装Oracle10g出现的libaio-0.3.96; found Not found问题求救...
- Asus Prime B360M-A+i5-8400+RX 570 黑苹果efi引导文件
- 11月最值得关注的26个热点
- 操作系统————应用题
- HbuilderX 小程序转快应用
- iOS 更改webView文字颜色丶文字大小丶背景色的方法
- Vertx学习一:这玩意是到底是个啥
- 烎!GopherChina 2020 讲师全阵容发布,集结国内外Go语言最强力量
- Mac电脑程序无响应怎么办?教你强制退出无响应程序
- windows11删除微软账户,使用本地账户登录