I2C总线的程序设计
因为MAX518的地址字节为58H,所以只有向其发送58H地址时,才能选通它。命令字节可以为00H或01H 当为00H时,选择OUT0通逍输出模拟量:当为01H时,选择OUT1通道输出模拟量。
本程序中的命令字节为01H,即选择D/A1通道输出正弦波信号.待输出的数据量根掂需耍在00H~FFH间变化。MSSP模块产生启动条件后,地址字节、命令字节、待转换的数据发送成功,且产生停止条件时,SSIFG都会被置1。
因此在编写程序时,可以通过查询该标志位来判断相应的步骤是否完成。若该步骤没有完成,则继续等待查询;若已完成,则清除SSIFG标志位,继续进行下一步操作。本设计的程序流程如图1和图2所示。
图1 I2C的初始化程序流程 图2 主程序流程及I2C发送数据子程序流程
实现代码如下。
(1)首先定义数据组存放正弦表,通过在数组名前加const标识,把该数组存放到ROM中.
(2)初始化I2C模块,设置SCL为输入口、SDA为输出口,通过设HSSP7ADD寄存器来确定I2C的工作频率,最后使能I2C。
(3)该字函数通过5个do-while语句成I2C的启动、发送地址字节、发送命令字节、发送数据字节和产生停止条件的功能,最后通过对SSPIF清0,清楚发送标志。
(4)主函数3完成各个子函数的调用功能,在while循环中调用I2C总线输出数据子函数。
评论