当前位置:首页 > MCU > CT107D > 正文内容

CT107D DAC 电压模拟输出

chanra1n4年前 (2020-10-16)CT107D3462
/*
  程序说明: IIC总线驱动程序
  软件环境: Keil uVision 4.10 
  硬件环境: CT107单片机综合实训平台 8051,12MHz
  日    期: 2011-8-9
*/

#include "reg52.h"
#include "intrins.h"

#define DELAY_TIME 5

#define SlaveAddrW 0xA0
#define SlaveAddrR 0xA1

//总线引脚定义
sbit SDA = P2^1;  /* 数据线 */
sbit SCL = P2^0;  /* 时钟线 */

void IIC_Delay(unsigned char i)
{
    do{_nop_();}
    while(i--);        
}
//总线启动条件
void IIC_Start(void)
{
    SDA = 1;
    SCL = 1;
    IIC_Delay(DELAY_TIME);
    SDA = 0;
    IIC_Delay(DELAY_TIME);
    SCL = 0;	
}

//总线停止条件
void IIC_Stop(void)
{
    SDA = 0;
    SCL = 1;
    IIC_Delay(DELAY_TIME);
    SDA = 1;
    IIC_Delay(DELAY_TIME);
}

//发送应答
void IIC_SendAck(bit ackbit)
{
    SCL = 0;
    SDA = ackbit;  					// 0:应答,1:非应答
    IIC_Delay(DELAY_TIME);
    SCL = 1;
    IIC_Delay(DELAY_TIME);
    SCL = 0; 
    SDA = 1;
    IIC_Delay(DELAY_TIME);
}

//等待应答
bit IIC_WaitAck(void)
{
    bit ackbit;
	
    SCL  = 1;
    IIC_Delay(DELAY_TIME);
    ackbit = SDA;
    SCL = 0;
    IIC_Delay(DELAY_TIME);
    return ackbit;
}

//通过I2C总线发送数据
void IIC_SendByte(unsigned char byt)
{
    unsigned char i;

    for(i=0; i<8; i++)
    {
        SCL  = 0;
        IIC_Delay(DELAY_TIME);
        if(byt & 0x80) SDA  = 1;
        else SDA  = 0;
        IIC_Delay(DELAY_TIME);
        SCL = 1;
        byt <<= 1;
        IIC_Delay(DELAY_TIME);
    }
    SCL  = 0;  
}

//从I2C总线上接收数据
unsigned char IIC_RecByte(void)
{
    unsigned char i, da;
    for(i=0; i<8; i++)
    {   
    	SCL = 1;
	IIC_Delay(DELAY_TIME);
	da <<= 1;
	if(SDA) da |= 1;
	SCL = 0;
	IIC_Delay(DELAY_TIME);
    }
    return da;    
}
void adc_set(unsigned char dat)
{
	IIC_Start(); 
	IIC_SendByte(0x90); // 地址+写
	IIC_WaitAck();
	IIC_SendByte(0x40);// DAC输出模式
	IIC_WaitAck();
	
	IIC_SendByte(dat);  ;//DAC写入数据
	IIC_WaitAck();
	IIC_Stop();
}


扫描二维码推送至手机访问。

版权声明:本文由我的FPGA发布,如需转载请注明出处。

本文链接:http://myfpga.cn/index.php/post/153.html

分享给朋友:

“CT107D DAC 电压模拟输出” 的相关文章

CT107D-MM编程方法

CT107D-MM编程方法

#include <reg52.h> #include <absacc.h> void main() { XBYTE[0x8000]=0x00; }这是最简单的一个案例,我们使用MM编程方法需要使用的是XBYTE这个关键词,值得注意的...

CT107D DS1302

CT107D DS1302

使用官方的ds1302.h和ds1302.c,下方有核心代码讲解main.c#include<reg52.h> #include<intrins.h> #include<ds1302.h> typedef unsigned char&nb...

CT107D DS18B20

CT107D DS18B20

先贴上核心代码unsigned char get_temp(void) { unsigned char TH,TL; init_ds18b20(); Write_DS18B20(0xCC); Write_DS18B20(0x44); De...

CT107D 频率计  蓝桥杯频率测量 可以测量0-65khz方波

CT107D 频率计 蓝桥杯频率测量 可以测量0-65khz方波

基于STC的官方示例文件完成编写,推荐STC单片机,性能稳定 使用时请使用杜邦线连接P3_2引脚和555发生的SIGNAL引脚#include "reg51.h" #include "intrins.h" typedef&nb...