📄 da_2.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 + -