I2C總線(xiàn)的程序設計
因為MAX518的地址字節為58H,所以只有向其發(fā)送58H地址時(shí),才能選通它。命令字節可以為00H或01H 當為00H時(shí),選擇OUT0通逍輸出模擬量:當為01H時(shí),選擇OUT1通道輸出模擬量。
本程序中的命令字節為01H,即選擇D/A1通道輸出正弦波信號.待輸出的數據量根掂需耍在00H~FFH間變化。MSSP模塊產(chǎn)生啟動(dòng)條件后,地址字節、命令字節、待轉換的數據發(fā)送成功,且產(chǎn)生停止條件時(shí),SSIFG都會(huì )被置1。
因此在編寫(xiě)程序時(shí),可以通過(guò)查詢(xún)該標志位來(lái)判斷相應的步驟是否完成。若該步驟沒(méi)有完成,則繼續等待查詢(xún);若已完成,則清除SSIFG標志位,繼續進(jìn)行下一步操作。本設計的程序流程如圖1和圖2所示。
圖1 I2C的初始化程序流程 圖2 主程序流程及I2C發(fā)送數據子程序流程
實(shí)現代碼如下。
(1)首先定義數據組存放正弦表,通過(guò)在數組名前加const標識,把該數組存放到ROM中.
(2)初始化I2C模塊,設置SCL為輸入口、SDA為輸出口,通過(guò)設HSSP7ADD寄存器來(lái)確定I2C的工作頻率,最后使能I2C。
(3)該字函數通過(guò)5個(gè)do-while語(yǔ)句成I2C的啟動(dòng)、發(fā)送地址字節、發(fā)送命令字節、發(fā)送數據字節和產(chǎn)生停止條件的功能,最后通過(guò)對SSPIF清0,清楚發(fā)送標志。
(4)主函數3完成各個(gè)子函數的調用功能,在while循環(huán)中調用I2C總線(xiàn)輸出數據子函數。
評論