📄 max532.c
字号:
//-----------------------函数声明--------------------------------------------------------
#include "reg51.h"
#include "intrins.h"
//-----------------------管脚声明--------------------------------------------------------
sbit CS_max532=P1^0;
sbit CLK_max532=P1^1;
sbit DI_max532=P1^2;
sbit DO_max532=P1^3;
sbit LDAC=P1^4; //异步加载DAC输入,作为同步信号
//--------------------------------------------------------------------------------------------------
// 函数名称: delay
// 入口参数: N
// 函数功能:延时子程序,实现(16*N+24)us的延时
// 系统采用11.0592MHz的时钟时,延时满足要求,其它情况需要改动
//--------------------------------------------------------------------------------------------------
void delay(unsigned int N)
{
int i;
for(i=0;i<N;i++);
}
//--------------------------------------------------------------------------------------------------
// 函数名称: SEND_1
// 函数功能: 送1位数据"1"
//--------------------------------------------------------------------------------------------------
void SEND_1(void)
{
DI_max532=1;
CLK_max532=1;
_nop_();
CLK_max532=0;
_nop_();
}
//--------------------------------------------------------------------------------------------------
// 函数名称: SEND_0
// 函数功能: 送1位数据"0"
//--------------------------------------------------------------------------------------------------
void SEND_0(void)
{
DI_max532=0;
CLK_max532=1;
_nop_();
CLK_max532=0;
_nop_();
}
//--------------------------------------------------------------------------------------------------
// 函数名称: SEND_BYTE
// 入口参数: dd,待发送的数据
// 函数功能: 送1BYTE数据
//--------------------------------------------------------------------------------------------------
void SEND_BYTE(unsigned char dd)
{
unsigned char i;
for (i=0;i<8;i++)
{
if (dd>=0x80) SEND_1();
else SEND_0();
dd=dd<<1;
}
}
//--------------------------------------------------------------------------------------------------
// 函数名称: SEND_4bit
// 入口参数: dd,待发送的数据
// 函数功能: 送1BYTE数据
//--------------------------------------------------------------------------------------------------
void SEND_4bit(unsigned char dd)
{
unsigned char i;
dd=dd<<4;
for (i=0;i<4;i++)
{
if (dd>=0x80) SEND_1();
else SEND_0();
dd=dd<<1;
}
}
//--------------------------------------------------------------------------------------------------
// 函数名称: B_only
// 入口参数: Bdata_H,Bdata_L 12位数据
// 函数功能: B通道单独转换,A通道输出任意数
//--------------------------------------------------------------------------------------------------
void B_only(unsigned char Bdata_H,unsigned char Bdata_L) //B通道数据发送
{
//Bdata_H为DA通道B数据高4位
//Bdata_L为DA通道B数据低8位
LDAC=1;
SEND_4bit(Bdata_H);
SEND_BYTE(Bdata_L);
LDAC=0;
}
//--------------------------------------------------------------------------------------------------
// 函数名称: A_only
// 入口参数: Adata_H,Adata_L 12位数据
// 函数功能: B通道输出零,A通道单独转换
//--------------------------------------------------------------------------------------------------
void A_only(unsigned char Adata_H,unsigned char Adata_L) //B通道数据发送
{
//Adata_H为DA通道B数据高4位
//Adata_L为DA通道B数据低8位
LDAC=1;
SEND_4bit(0);
SEND_BYTE(0); //高12位写零
SEND_4bit(Adata_H);
SEND_BYTE(Adata_L);
LDAC=0;
}
//--------------------------------------------------------------------------------------------------
// 函数名称: A_only
// 入口参数: Bdata_H,Bdata_L 12位数据
// Adata_H,Adata_L 12位数据
// 函数功能: A\B通道同时转换
//--------------------------------------------------------------------------------------------------
void AB_both(unsigned char Bdata_H,unsigned char Bdata_L,
unsigned char Adata_H,unsigned char Adata_L) //B通道数据发送
{
//Bdata_H为DA通道B数据高4位
//Bdata_L为DA通道B数据低8位
//Adata_H为DA通道B数据高4位
//Adata_L为DA通道B数据低8位
LDAC=1;
SEND_4bit(Bdata_H);
SEND_BYTE(Bdata_L); //写高12位
SEND_4bit(Adata_H);
SEND_BYTE(Adata_L); //写低12位
LDAC=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -