📄 da_max538.c
字号:
// 晶体管图示议——串行DA
//作者:Bertha
//时间:2008。8。26
//如下语句强烈建议所有的程序中都保留//
#include <p24FJ64GA006.h>
unsigned char RESERED[100]; //预留区,供ICD2调试使用
_CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF & COE_OFF & FWDTEN_OFF ) //程序配置位
_CONFIG2( FNOSC_PRI & FCKSM_CSDCMD & OSCIOFNC_ON & POSCMOD_HS )
#define DI_max538 PORTBbits.RB8
#define CLK_max538 PORTBbits.RB9
#define CS_max538 PORTBbits.RB10
//------------------------------------------------------------------------------
//函数功能:I/O端口初始化
//入口参数:无
//出口参数:无
//------------------------------------------------------------------------------
void IOInit()
{
AD1PCFG= 0xFF00;//关闭PortB端口高八位引脚的模拟功能
TRISB=0x00FF;//设置PORTB的高八位为输出,低八位为输入
}
//------------------------------------------------------------------------------
// 函数功能: 送1位数据"1"
//入口参数:无
//出口参数:无
//--------------------------------------------------------------------------------------------------
void SEND_1(void)
{
DI_max538=1;
CLK_max538=1;
Nop();
CLK_max538=0;
Nop();
}
//--------------------------------------------------------------------------------------------------
// 函数功能: 送1位数据"0"
//入口参数:无
//出口参数:无
//--------------------------------------------------------------------------------------------------
void SEND_0(void)
{
DI_max538=0;
CLK_max538=1;
Nop();
CLK_max538=0;
Nop();
}
//--------------------------------------------------------------------------------------------------
// 函数功能: 送1BYTE数据
// 入口参数: 待发送的数据data
//出口参数:无
//--------------------------------------------------------------------------------------------------
void SEND_BYTE(unsigned char data)
{
unsigned char i;
for (i=0;i<8;i++)
{
if (data>=0x80) SEND_1();
else SEND_0();
data=data<<1;
}
}
//--------------------------------------------------------------------------------------------------
// 函数功能: 送4bit数据
// 入口参数: 待发送的数据data
//出口参数:无
//--------------------------------------------------------------------------------------------------
void SEND_4bit(unsigned char data)
{
unsigned char i;
data=data<<4;
for (i=0;i<4;i++)
{
if (data>=0x80) SEND_1();
else SEND_0();
data=data<<1;
}
}
//--------------------------------------------------------------------------------------------------
// 函数功能: 送12位数据给MAX538
// 入口参数: data_H,data_L 共12位数据,data_H为DA数据高4位 ,data_L为DA数据低8位
//--------------------------------------------------------------------------------------------------
void SEND_data(unsigned char data_H,unsigned char data_L)
{
CS_max538=0;
SEND_4bit(data_H);
SEND_BYTE(data_L);
CS_max538=1;
}
//******************************************************************************
//函数功能:main函数
//------------------------------------------------------------------------------
int main()
{
unsigned char dd_L,dd_H;
unsigned int count,flag;
IOInit();//端口初始化
dd_L=0;//变量初始化
dd_H=0;
while(1)
{
SEND_data(dd_H,dd_L);
if(dd_L==0xFF)
{
dd_L=0;
if(dd_H==0xF)
dd_H=0;
else dd_H=dd_H+1;
}
else dd_L=dd_L+51;
}
}
// end of main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -