#include "regs240x.h"
void SystemInit();
void ADINIT();
void interrupt c_int1();
void KickDog();
int point=0,I=0,a=0,ux[8];
main()
{
SystemInit();
ADINIT();
asm(" CLRC INTM "); //开所有中断
T2CON=0X144C; //T2使能
while(1)
{if(I==8)
break;}
T2CON=0X0FFBF;
while(1)
{
//KickDog;
}//end while
}
void SystemInit()
{
asm(" SETC INTM ");
asm(" CLRC SXM ");
asm(" CLRC CNF ");
asm(" CLRC OVM ");
KickDog();
SCSR1=0X81FE; //4倍频20*4=80M
WDCR=0X0E8; //不使能看门狗,因为SCSR2中的WDOVERRIDE即WD保护
// 位复位后的缺省值为1,故可用软件禁止看门狗
IMR=0X0001; //打开INT1中断
IFR=0XFFFF; //清除全部中断标志,写1清零
}
void ADINIT()
{
EVAIMRB=EVAIMRB|0X0001;// 定时器2周期中断使能
EVAIFRB=EVAIFRB&0X0001;// 清除中断标志
GPTCONA=0x0000;
GPTCONA=0X0400; //通用定时器2周期中断启动AD
T2PR=12499; // 定时器2周期值
T2CNT=0;
T2CON=0X170C; //增模式, TPS系数80M/128
ADCTRL1=0X10;
ADCTRL2=0X0500;
MAXCONV=0;
CHSELSEQ1=(4<<12)|(6<<8)|(2<<4)|(2);
CHSELSEQ2=0;
CHSELSEQ3=0;
CHSELSEQ4=0;
}
void interrupt c_int1()//A/D 中断低优先级在这里,
{
int UA,temp;
temp=PIVR;
if(temp==0x04)
{
UA=RESULT0>>6;
ux[point++]=UA;
if(point>7)
{ point=0;
I=8;
}
ADCTRL2=0X4200; //复位A/D转换序列指针
//清除设备中断标志
asm(" CLRC INTM "); //打开所有中断
}
}
void interrupt PHANTOM()
{
asm(" CLRC INTM ");
return;
}
void KickDog() //喂狗
{
WDKEY=0X5555;
WDKEY=0XAAAA;
}
此帖出自
小平头技术问答
一周热门 更多>