📄 max518.c
字号:
/*******************************************************************
MAX518信号发生器实验
网址:http://www.kaifaban.com
功能:在OUT0,OUT1端输出相位相反的锯齿波
********************************************************************/
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SCL=P3^4;//串行时钟线
sbit SDA=P3^5;//串行数据线
//I2C延时程序
void I2cDelay(){
_nop_();_nop_();_nop_();_nop_();_nop_();
}
//I2C起始条件
void I2cStart(){
SDA=1;
_nop_();
SCL=1;
I2cDelay();
SDA=0;
I2cDelay();
SCL=0;//钳住I2C总线,准备发送或接收数据
_nop_();
}
//I2C停止条件
void I2cStop(){
SDA=0;
_nop_();
SCL=1;
I2cDelay();
SDA=1;
I2cDelay();
}
//等待应答
bit WaitAck(){
uchar Time=255;
SDA=1;
_nop_();
SCL=1;
I2cDelay();
while(SDA){
Time--;
if(Time==0){
I2cStop();
return (0);
}
}
SCL=0;
_nop_();
return (1);
}
//I2C写一字节数据
void I2cWriteByte(uchar Data){
uchar i;
for(i=0;i<8;i++){
SCL=0;
I2cDelay();
SDA=(bit)(Data&0x80);
Data<<=1;
I2cDelay();
SCL=1;
I2cDelay();
}
SCL=0;
}
//I2C写数据到MAX518
void I2cWrite(uchar Command,uchar Data){
I2cStart();//启动总线
I2cWriteByte(0x58);//发送器件地址
WaitAck();
I2cWriteByte(Command);//发送命令字节
WaitAck();
I2cWriteByte(Data);//发送数据
WaitAck();
I2cStop();
}
//主函数
main(){
uchar i=0;
while(1){
I2cWrite(0x00,i);
I2cWrite(0x01,0xFF-i);
i++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -