⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 da_max538.c

📁 PIC单片机控制12位高速串行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 + -