?? adcesi.c
字號(hào):
// 寄存器cesi用于測(cè)試每個(gè)A/D轉(zhuǎn)換的結(jié)果
#include "LF2407_c.h"
int ADRESULT[16]; // 定義一個(gè)數(shù)組用于保存AD轉(zhuǎn)換的結(jié)果
volatile unsigned int *j; // 定義一個(gè)指針變量j
int i=0X00,cesi,A=0;
long cmp1=6553, cmp2=3434,m;
int t;
int tp=2000;
//float dva,dvb,dvc,dia,dic,dio,dvo,dafactor,VA,VB,VC,IA,IB,IC,VO;
// 屏蔽中斷子程序
void inline disable()
{
asm(" setc INTM");
}
// 開總中斷子程序
void inline enable()
{
asm(" clrc INTM");
}
// 系統(tǒng)初始化子程序
void initial()
{
asm(" setc SXM"); // 符號(hào)位擴(kuò)展有效
asm(" clrc OVM"); // 累加器中結(jié)果正常溢出
asm(" clrc CNF"); // B0被配置為數(shù)據(jù)存儲(chǔ)空間
*SCSR1=0x81FE; // CLKIN=6M,CLKOUT=4*CLKIN=24M
*WDCR=0x0E8; // 不使能看門狗,因?yàn)镾CSR2中的WDOVERRIDE
// 即WD保護(hù)位復(fù)位后的缺省值為1,故可以用
// 軟件禁止看門狗
*IMR=0x0001; // 允許INT1中斷
*IFR=0x0FFFF; // 清除全部中斷標(biāo)志,"寫1清0"
}
// AD初始化子程序
void ADINIT()
{
*T4CNT=0X0000; // T4計(jì)數(shù)器清0
*T4CON=0X170C; // T4為連續(xù)增計(jì)數(shù)模式,128分頻,且選用內(nèi)部時(shí)鐘源
*T4PER=0X0750; // 設(shè)置T4的周期寄存器
*GPTCONB=0X400; // T4周期中斷標(biāo)志觸發(fā)AD轉(zhuǎn)換
*EVBIFRB=0X0FFFF; // 清除EVB中斷標(biāo)志,寫"1"清0
*ADCTRL1=0X10; // 采樣時(shí)間窗口預(yù)定標(biāo)位ACQ PS3-ACQ PS0為0,
// 轉(zhuǎn)換時(shí)間預(yù)定標(biāo)位CPS為0,AD為啟動(dòng)/停止模式,排
// 序器為級(jí)連工作方式,且禁止特殊的兩種工作模式
*ADCTRL2=0X8404; // 可以用EVB的一個(gè)事件信號(hào)觸發(fā)AD轉(zhuǎn)換,
// 且用中斷模式1
*MAXCONV=0X0F; // 16通道
*CHSELSEQ1=0X3210;
*CHSELSEQ2=0X7654;
*CHSELSEQ3=0X0BA98;
*CHSELSEQ4=0X0FEDC; // 轉(zhuǎn)換通道是0-15
}
// 啟動(dòng)AD轉(zhuǎn)換子程序(通過(guò)啟動(dòng)定時(shí)器4的方式間接啟動(dòng))
void ADSOC()
{
*T4CON=*T4CON|0X40; // 啟動(dòng)定時(shí)器4
}
// AD中斷服務(wù)子程序
{
asm(" clrc SXM"); // 抑制符號(hào)位擴(kuò)展
j=RESULT0; // 取得RESULT0的地址
for(i=0;i<=15;i++,j++)
{
ADRESULT[i]=*j>>6; // 把AD轉(zhuǎn)換的結(jié)果右移6位后存入規(guī)定的數(shù)組
cesi=ADRESULT[i]*A; // 檢驗(yàn)每個(gè)A/D轉(zhuǎn)換的結(jié)果
m=cmp2<<10;
t=(int)((m/cmp1*tp)>>10);
}
*ADCTRL2=*ADCTRL2|0X4200; // 復(fù)位SEQ1,且清除INT FLAG SEQ1標(biāo)志寫"1"清0
enable();// 開總中斷,因?yàn)橐贿M(jìn)入中斷總中斷就自動(dòng)關(guān)閉了
}
main()
{
disable( ); // 禁止總中斷
initial( ); // 系統(tǒng)初始化
ADINIT( ); // AD初始化子程序
enable( ); // 開總中斷
ADSOC( ); // 啟動(dòng)AD轉(zhuǎn)換
while(1)
{
if(i==0x10) break; // 如果已發(fā)生中斷,則停止等待(發(fā)生中斷后,i=0x10)
} // 等待中斷發(fā)生
//*T4CON=*T4CON&0X0FFBF;// 停止定時(shí)器4,即間接停止A/D轉(zhuǎn)換
}
// 若是其它中斷則直接返回子程序
void interrupt nothing()
{
return;
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -