?? dac.c
字號:
/************************************************************************************
* Copyright (c) 2004,西安銘朗電子科技有限責任公司
* All rights reserved.
*
* 文件名稱: DAC.C
* 文件標識: none
* 適用器件: C8051F020
*
* 摘 要: 本文件是DAC子程序;使用外部22.1184MHz晶振.
*
* 當前版本:1.1
* 作 者:劉大偉
* 完成日期:2007年3月2日
*
* 歷史版本:1.0
* 作 者:盧 陽
* 完成日期:2004年11月14日
*
* 歷史版本:0.9
* 原作者 : 李林利
* 完成日期:2004年1月1日
*************************************************************************************/
/************************************************************************************/
// 引用外部頭文件
#include "main.h"
/************************************************************************************/
unsigned int Dis_dt,Counts;
bit Dis_Flag;
/***********************************************************************************
* 函數名稱: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];
Dis_Flag=1;
Dis_dt=temp;
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 + -