max518.c

来自「51单片机示例程序」· C语言 代码 · 共 91 行

C
91
字号
/*******************************************************************
                                                                              	
                   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 + =
减小字号Ctrl + -
显示快捷键?