?? da.c
字號:
/***************************************************************
功能:實現(xiàn)DAC模擬信號輸出,由T4定時控制DAC0輸出DTMF信號
作者:ZDP
時間:2005-11-30
版本:V1.0
***************************************************************/
#include <c8051f020.h> // SFR declarations
//-----------------------------------------------------------------------------
// Global CONSTANTS
//-----------------------------------------------------------------------------
#define SYSCLK 22118400 // SYSCLK frequency in Hz
//-----------------------------------------------------------------------------
// 函數(shù)定義
//-----------------------------------------------------------------------------
sbit DAC0=P1^1;
sbit DAC1=P1^2;
sbit DACS=P1^3;
sbit EMC1=P1^7;
sbit EMC2=P1^6;
sbit EMC3=P1^5;
sbit EMC4=P1^4;
unsigned char Work_fre=1;
unsigned char status=1;
void main (void);
void SYSCLK_Init (void);
void PORT_Init (void);
unsigned long count=0;
unsigned long time_count=0;
//-----------------------------------------------------------------------------
// 全局變量
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// 主函數(shù)
//-----------------------------------------------------------------------------
void ADC0_Init (void)
{
ADC0CN = 0x80; // 軟件啟動轉(zhuǎn)換
// REF0CN = 0x07; // 啟用內(nèi)部基準(zhǔn)源
AMX0SL = 0 ; // 選擇采樣輸入源
ADC0CF = (SYSCLK/2500000) << 3; // ADC conversion clock = 2.5MHz
// ADC0CF |= 0x01; // PGA gain = 2
// EIE2 |= 0x02; // 啟用 ADC 中斷
}
void TIM0_Init(void)
{
CKCON=0x00;
TMOD=0x01;
TH0 = 0X00;
TL0 = 0X00;
}
void main (void) {
unsigned int i=0;
WDTCN = 0xde; // 關(guān)閉WDT
WDTCN = 0xad;
SYSCLK_Init ();
IE=0X81; //開總中斷和INT0中斷
PORT_Init ();
ADC0_Init();
TIM0_Init();
REF0CN = 0x03; // 啟用內(nèi)部的電壓基準(zhǔn)源
DAC0CN = 0x80; // 啟用 DAC0
DAC1CN = 0x80;
DAC0L=0X00;
DAC0H=0X0f;
DAC1L=0X00;
DAC1H=0X0f;
IT0=1;
IE = 0x97;
TR0=1;
DACS=1;
while (1)
{
DAC0=1;
DAC1=0;
for(i=0;i<1000;i++)
{
};
DAC0=0;
DAC1=0;
DAC0=0;
DAC1=1;
for(i=0;i<1000;i++)
{
};
DAC0=0;
DAC1=0;
/* while(AD0BUSY ==0)
{
AD0BUSY=1;
count++;
} */
}
}
//-----------------------------------------------------------------------------
// SYSCLK_Init
//-----------------------------------------------------------------------------
void SYSCLK_Init (void)
{
int i; // delay counter
OSCXCN = 0x67; // start external oscillator with
// 22.1184MHz crystal
for (i=0; i < 256; i++) ; // Wait for osc. to start up
while (!(OSCXCN & 0x80)) ; // Wait for crystal osc. to settle
OSCICN = 0x88; // select external oscillator as SYSCLK
// source and enable missing clock
// detector
}
//-----------------------------------------------------------------------------
// PORT_Init
//-----------------------------------------------------------------------------
void PORT_Init (void)
{
XBR0 = 0x04;
XBR1 = 0x0E;
XBR2 = 0x40;
}
void timer0_ISR(void) interrupt 1
//運行屏幕自動更新以及按鍵延時中斷
{
if(time_count==28) //當(dāng)屏幕處在運行屏幕狀態(tài),則啟動更新計數(shù)器計數(shù)
{
time_count=0;
}
TH0=0X00;
TL0=0X00;
TF0=0; //中斷標(biāo)志復(fù)位
time_count++;
}
void Int0_ISR(void) interrupt 0
{
status=0;
if(Work_fre==1&&status==0)
{
EMC2=0;
EMC1=1;
EMC3=0;
EMC4=1;
Work_fre=2;
status=1;
}
if(Work_fre==2&&status==0)
{
EMC4=0;
EMC3=1;
EMC1=0;
EMC2=1;
Work_fre=1;
status=1;
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -