📄 dac.c
字号:
/************************************************************************************
* Copyright (c) 2004,西安铭朗电子科技有限责任公司
* All rights reserved.
*
* 文件名称: DAC.C
* 文件标识: none
* 适用器件: C8051F020
*
* 摘 要: 本文件是DAC程序;使用外部22.1184MHz晶振.
*
* 当前版本:1.0
* 作 者:卢 阳
* 完成日期:2004年11月14日
*
* 历史版本:0.9
* 原作者 : 李林利
* 完成日期:2004年1月1日
*************************************************************************************/
/************************************************************************************/
// 引用外部头文件
#include "main.h"
/************************************************************************************/
/***********************************************************************************
* 函数名称:sine;
*
* 函数功能描述:计算正弦波;
*
* 输入参数:none;
*
* 返回数据:none;
*
* 注意: none;
************************************************************************************/
void sine(void)
{
unsigned int data y;
unsigned int data i;
for(i=0;i<256;i++)
{
y=sin(3.1415*2*i/256)*2048+2048;
if (y>4095)
y=4095;
TABLE[i]=y;
}
}
/***********************************************************************************
* 函数名称:saw;
*
* 函数功能描述:计算锯齿波;
*
* 输入参数:none;
*
* 返回数据:none;
*
* 注意: none;
************************************************************************************/
void saw(void)
{
unsigned int data y;
unsigned int data i;
for(i=0;i<256;i++)
{
y=16*i;
if (y>4095)
y=4095;
TABLE[i]=y;
}
}
/***********************************************************************************
* 函数名称:triangle;
*
* 函数功能描述:计算三角波;
*
* 输入参数:none;
*
* 返回数据:none;
*
* 注意: none;
************************************************************************************/
void triangle(void)
{
unsigned long data y;
unsigned int data i;
for(i=0;i<256;i++)
{
if(i<128)
{
y=32*i;
}
else if(i==128)
{
y=4095;
}
else
{
y=4096-(i-128)*32;
}
TABLE[i]=y;
}
}
/***********************************************************************************
* 函数名称:square;
*
* 函数功能描述:计算方波;
*
* 输入参数:none;
*
* 返回数据:none;
*
* 注意: none;
************************************************************************************/
void square(void)
{
unsigned int data y;
unsigned int data i;
for(i=0;i<256;i++)
{
if(i<128)
y=0x0000;
else
y=0x0fff;
TABLE[i]=y;
}
}
/***********************************************************************************
* 函数名称:none;
*
* 函数功能描述:输出为0;
*
* 输入参数:none;
*
* 返回数据:none;
*
* 注意: none;
************************************************************************************/
void none(void)
{
unsigned int data i;
for(i=0;i<256;i++)
{
TABLE[i]=0;
}
}
/***********************************************************************************
* 函数名称:Timer2_ISR;
*
* 函数功能描述:定时器2中断响应;
*
* 输入参数:none;
*
* 返回数据:none;
*
* 注意: none;
************************************************************************************/
void Timer2_ISR (void) interrupt 5 using 3
{
unsigned int xdata temp;
T2CON &= ~0x80; // 清除T2溢出标志
temp = TABLE[sf0];
temp &= 0x00ff;
DAC0L = temp;
temp = TABLE[sf0];
temp >>= 8;
DAC0H = temp;
sf0 ++;
if(sf0==255)
{
sf0 = 0;
}
}
/***********************************************************************************
* 函数名称:Timer3_ISR;
*
* 函数功能描述:定时器3中断响应;
*
* 输入参数:none;
*
* 返回数据:none;
*
* 注意: none;
************************************************************************************/
void Timer3_ISR (void) interrupt 14 using 3
{
unsigned int xdata temp;
TMR3CN &= ~0x80; // 清除T3溢出标志
temp = TABLE[sf1];
temp &= 0x00ff;
DAC1L = temp;
temp = TABLE[sf1];
temp >>= 8;
DAC1H = temp;
sf1 ++;
if(sf1==255)
{
sf1 =0;
}
}
/***********************************************************************************
* 函数名称:Timer2_Init;
*
* 函数功能描述:定时器2初始化;
*
* 输入参数:载入数值;
*
* 返回数据:none;
*
* 注意: none;
************************************************************************************/
void Timer2_Init (unsigned int counts)
{
int temp;
T2CON = 0; // STOP timer; set to auto-reload mode
CKCON |= 0x20; // T2M = '1'; Timer2 counts SYSCLKs
temp= counts;
temp&=0x00ff;
RCAP2L =temp;
temp= counts;
temp =(temp>>8)&0x00ff;
RCAP2H =temp;
TH2 = RCAP2H;
TL2 = RCAP2L;
ET2= 1; // 打开定时器Timer2中断
T2CON |= 0x04; // 开始启动Timer2
}
/***********************************************************************************
* 函数名称:Timer3_Init;
*
* 函数功能描述:定时器3初始化;
*
* 输入参数:载入数值;
*
* 返回数据:none;
*
* 注意: none;
************************************************************************************/
void Timer3_Init (unsigned int counts)
{
int temp;
TMR3CN = 0X02; // Timer3 counts SYSCLKs
temp = counts;
temp &= 0x00ff;
TMR3RLL= temp;
temp = counts;
temp = (temp>>8)&0x00ff;
TMR3RLH= temp;
TMR3H = TMR3RLH;
TMR3L = TMR3RLL;
EIE2 |= 0x01; // 允许定时器Timer3中断
TMR3CN|= 0x04; // 开始启动Timer3
}
/***********************************************************************************
* 函数名称:DAC0_Init;
*
* 函数功能描述:DAC0初始化;
*
* 输入参数:none;
*
* 返回数据:none;
*
* 注意: none;
************************************************************************************/
void DAC0_Init(void)
{
REF0CN = 0x03; // 使用内部VREF发生器
DAC0CN = 0x98; // 打开DAC0,右对齐模式
// 使用Timer2作为更新调度程序
}
/***********************************************************************************
* 函数名称:DAC1_Init;
*
* 函数功能描述:DAC1初始化;
*
* 输入参数:none;
*
* 返回数据:none;
*
* 注意: none;
************************************************************************************/
void DAC1_Init(void)
{
REF0CN = 0x03; // 使用内部VREF发生器
DAC1CN = 0x88; // 打开DAC1,左对齐模式
// 使用Timer3作为更新调度程序
}
/************************************************************************************
* 文件结束
************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -