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

📄 da_2.c

📁 DAC0832D/A转换设计;三角波发生器程序设计
💻 C
字号:
/**********************************************
*   File: DA_2.C
*   Description: Tri-Angle  
*   Created Date:  2007-10-01
*   Last Modified: 2007-10-01
*   Author: Jeffrey - Schicksal@126.com
*   Notes: None
**********************************************/
#include "Atmel/AT89X51.h"
#include "INTRINS.H"

//*******定义DAC0832控制端口*****************//
#define CS1 P0_3
#define WR	P0_4
#define XFER P0_7
#define DOUT P1
//*******定义DAC0832控制端口*****************//

#define TH0_VALUE 0x06
#define TL0_VALUE 0x00

#define T 1024                    // 周期 ms

volatile unsigned char time_tick = 0;

// 函数声明
void InitDAC0832();
void SetDAC0832_1(unsigned char DAC);
void Start_DAC();
void TIMER_Start();
void TIMER_Init(void);

/**********************************************
*   Function: delay(unsigned int t)
*   Input Variables: t
*   Return Variables: None
*   Usage: Common Delay Routine, t as the delay time ticks
**********************************************/
void delay(unsigned int t)
{
	for(;t>0;t--);		// 延时循环
}

/**********************************************
*   Function: main()
*   Input Variables: None
*   Return Variables: None
*   Usage: Program Entry
*********************************************/
void main()
{
	unsigned char N;
	unsigned char R;
	unsigned char DIR = 1;
	unsigned char x = 0;
	InitDAC0832();	  					// 初始化AD7812
	TIMER_Init();						// 初始化定时器T0
	delay(50);    	  					// 启动时间约1.5us,延迟
	TIMER_Start();
	N = (T/2)/2;						// 计算N
	R = 256/N;							// 计算R
	
	while(1)
	{
		time_tick = 0;
		while(!time_tick);				// 等待2ms时钟中断
		
		if(DIR)
		{
			x+=R;
			if(x>256-R)
			{
				DIR = 1-DIR;
			}
		}
		else
		{
			x-=R;
			if(x<R)
			{
				DIR = 1-DIR;
			}
		}
		
		SetDAC0832_1(x);
		Start_DAC();
	}
}

/**********************************************
*   Function: InitDAC0832()
*   Input Variables: None
*   Return Variables: None
*   Usage: Init DAC0832
*********************************************/
void InitDAC0832()
{
	CS1 = 1;	  				// 置高Cs1
	WR = 0;						// WR有效
}

/**********************************************
*   Function: SetDAC0832_1( unsigned char DAC)
*   Input Variables: unsigned char DAC
*   Return Variables: None
*   Usage: Set DAC Register of DAC0832
*********************************************/
void SetDAC0832_1( unsigned char DAC)
{
	CS1 = 0;					// CS1有效;
	_nop_();					// nop
	DOUT = DAC;					// 写DAC寄存器
	_nop_();					// nop
	CS1 = 1;					// CS1无效
}

/**********************************************
*   Function: Start_DAC()
*   Input Variables: void
*   Return Variables: void
*   Usage:  Start a Conversion
*********************************************/
void Start_DAC()
{
	XFER = 0;						// XFER有效启动DA转换
	_nop_();						// _nop_
	XFER = 1;						// XFER恢复高电平
}

/**********************************************
*	Function: TIMER_Init
*	Input Variables: None
*    Return Variables: None
*    Usage: T0 Initialization
*********************************************/
void TIMER_Init(void)
{
	
	ET0 = 0;					// 关闭T0的中断
	TMOD = 0x00;				// T0工作在模式0
	TCON = 0x00;				// 暂时未启动T0
	TL0 = TL0_VALUE;
	TH0 = TH0_VALUE;			// 产生2ms中断 |24 MHz 晶振
	ET0 = 1;				  	// 打开T0的中断
	time_tick = 0;
}



/**********************************************
*	Function: timer0_interrupt
*	Input Variables: None
*    Return Variables: None
*    Usage: TIMER_Interrupt Service Routine 
*********************************************/
void timer0_interrupt(void) interrupt 5 using 1 
{		  
	EA = 0;										// 关全局中断
	TF0 = 0;									// 清中断标志

	time_tick++;									// 2ms
	
	TL0 = TL0_VALUE;							// T0初值装载
	TH0 = TH0_VALUE;							// 产生2ms中断 |24 MHz 晶振
    EA = 1;										// 开中断
}


/**********************************************
*   Function: TIMER_Start
*    Input Variables: None
*    Return Variables: None
*    Usage: Start T0 
*********************************************/
void TIMER_Start()
{
	TR0 = 1;				// 启动T0
}




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -