![](https://csdnimg.cn/release/download_crawler_static/4901470/bgc.jpg)
单片机学习指南 资料提供:上海齐济电子有限公司
.12.
//数据输出与 I
2
C 总线的数据线发生冲突(此操作与该
//实验板的特殊结构有关,不是通用的)
SSPEN=1; //SSP模块使能
}
2.C 语言编写的 I
2
C 总线工作方式传输数据子程序
需要发送的数据在寄存器 j 中。
//I
2
C 总线输出数据子程序
i2cout()
{
SEN=1; //产生 I
2
C 启动信号
for(n=0x02;--n;) continue;//给予一定的延时,保证启动
do {
RSEN=1; //产生 I
2
C 重启动信号
}while(SSPIF==0); //如果没能启动,则反复启动,直到启动为止
SSPIF=0; //SSPIF 标志清 0
SSPBUF=0X58; //I
2
C 总线发送地址字节
do {
;
}while(SSPIF==0); //等待地址发送完毕
SSPIF=0; //SSPIF 标志清 0
SSPBUF=0X01; //I
2
C 总线发送命令字节
do {
;
}while(SSPIF==0); //等待命令发送完毕
SSPIF=0; //SSPIF 标志清 0
SSPBUF=j; //I
2
C 总线发送数据字节
do {
;
}while(SSPIF==0); //等待数据发送完毕
SSPIF=0; //SSPIF 标志清 0
PEN=1; //产生停止条件
do {
;
}while(SSPIF==0); //等待停止条件产生
SSPIF=0; //SSPIF 标志清 0
}
2.2.4 程序清单
下面给一个例程。该程序利用 MAX518 进行 D/A 转换,且从 D/A0 引脚输出一个正弦
波形。可作为读者编制程序的参考。特别注意,在调试该程序时,把模板上的钮子开关 S8
拔向高电平,以免发生资源冲突。
#include <pic.h>
//本程序将通过 PIC16F877 的 I
2
C 方式驱动 D/A 转换器 MAX518,使其 D/A0 通道输出
//一个连续的正弦波形(注:本程序并没对正弦波的频率进行控制)
const char table[ ] = {0X80,0X86,0X8D, 0X93,0X99,0X9F,0XA5,0XAB,
0XB1,0XB7,0XBC,0XC2,0XC7,0XCC,0XD1,0XD6,0XDA,0XDF,0XE3,0XE7,
0XEA,0XEE,0XF1,0XF4,0XF6,0XF8,0XFA,0XFC,0XFD,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFE,0XFD,0XFB,0XF9,0XF7,0XF5,0XF2,0XEF,0XEC,
0XE9,0XE5,0XE1,0XDD,0XD8,0XD4,0XCF,0XCA,0XC5,0XBF,0XBA,0XB4,
0XAE,0XA8,0XA2,0X9C,0X96,0X90,0X89,0X83,0X80,0X79,0X72,0X6C,
0X66,0X60,0X5A,0X55,0X4E,0X48,0X43,0X3D,0X38,0X33,0X2E,0X29,
0X25,0X20,0X1C,0X18,0X15,0X11,0X0E,0X0B,0X09,0X07,0X05,0X03,0X02,