?? wdac3.c
字號:
//參考程序 F:文件名:WDAC3.c 此程序通過DAC的輸出方波,DAC輸出更新發生在定時器T3溢時.
#include <c8051f020.h> /*SFR定義*/
sfr16 TMR3RL = 0x92; /*定時器T3重載值*/
sfr16 TMR3 = 0x94; /*定時器T3計數器*/
sfr16 DAC0 = 0xd2; /*DAC0數據*/
#define SYSCLK 2000000 /*系統時鐘頻率*/
void PORT_Init (void);
void Timer3_Init (int counts);
void Timer3_ISR (void);
void DAC_Init(void);
void main (void) {
unsigned int i;
WDTCN = 0xde; /*關看門狗*/
WDTCN = 0xad;
PORT_Init (); /*初始化I/O口*/
Timer3_Init (SYSCLK / 12 /5 ); /*初始化定時器T3*/
DAC_Init(); /*D/A初始化*/
EA = 1; /*使能總中斷標志*/
while (1)
{
DAC0L=0xf0; /*設置待轉換的值為0FF0H*/
DAC0H=0x0f;
for(i=0;i<=100;i++);
DAC0L=0x0; /*設置待轉換的值為0000H*/
DAC0H=0x0;
for(i=0;i<=200;i++);
}
}
void PORT_Init (void)
{
XBR2 = 0x40; /*時能交叉開關和弱上拉*/
P74OUT |= 0x0ff; /*使能P1.6 (LED)作為推完輸出*/
}
void DAC_Init(void)
{
REF0CN =0x03; /*內部偏壓發生器和電壓基準緩沖器工作,基準從VREF引腳輸出*/
DAC0CN |=0x88; /*DAC0允許,DAC輸出更新發生在定時器T3溢時*/
}
void Timer3_Init (int counts)
{
TMR3CN = 0x00; /*停止定時器3,清定時器中斷標志,用SYSCLK/12作為時基*/
TMR3RL = -counts; /*裝載重裝載值*/
TMR3 = 0xffff; /*設置重載值*/
EIE2 |= 0x01; /*使能定時器T3中斷*/
TMR3CN |= 0x04; /*使能定時器T3*/
}
void Timer3_ISR (void) interrupt 14
{
TMR3CN &= ~(0x80); /*清定時器T3中斷標志*/
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -