📄 main.c
字号:
/*Main.c*/
#include "global.c"
void SystemInit();
void KickDog();
void ADINIT();
void Que();
unsigned int t0=0,i=0,j=0,numled0=1500;
unsigned int RESULT_0=0,RESULT_8=0;
unsigned int AD0[20],AD_0,AD8[20],AD_8;
float AD_SIG0=0.0,AD_SIG8=0.0;
main()
{
SystemInit(); //系统初始化
ADINIT();
asm(" CLRC INTM "); //开总中断
T1CON=T1CON|0x0040; //启动定时器1
while(1)
{
asm(" NOP ");
asm(" NOP ");
for(i=0;i<20;i++)
{
RESULT_0=RESULT0>>6;
RESULT_8=RESULT1>>6;
AD0[i]=RESULT_0;
AD8[i]=RESULT_8;
}
Que(); //排队滤波
}
}
void SystemInit()
{
asm(" SETC INTM "); //关闭总中断
asm(" CLRC SXM "); //禁止符号位扩展
asm(" CLRC CNF "); //B0块映射为 on-chip DARAM
asm(" CLRC OVM "); // 累加器结果正常溢出
SCSR1=0x83FE; // 系统时钟CLKOUT=20*1=20M
// 打开ADC,EVA,EVB,CAN和SCI的时钟
WDCR=0x006F; // 禁止看门狗,看门狗时钟64分频
IMR=0x0002;
IFR=0x0FFFF;
KickDog(); // 初始化看门狗
}
void ADINIT()
{
GPTCONA=0x0100; //设置周期中断标志来启动模数转换
T1CNT=0x0000;
T1PR=4000; //周期0.025*4000=100us
T1CON=0x100C; //连续增的计数模式,内部时钟,定时器比较器保留
EVAIFRA=0xFFFF;
EVAIMRA=0x0080; //定时器1的中断屏蔽位使能
ADCTRL1=0x4000; //ADC模块复位
asm(" NOP "); //延时,提供写入ADCTRL1寄存器所需的时间延时
ADCTRL1=0x2050; // 仿真悬挂,ADC完成当前转换后停止,连续转换模式,级连模式
MAXCONV=0x0008;
CHSELSEQ1=0x80; //第0、8通道
ADCTRL2=0x4100; //复位使排序器指针指向CONV00、事件管理器A触发、屏蔽位允许
}
void Que()
{
unsigned int MaxAD0=0;
unsigned int MinAD0=AD0[0];
unsigned int MaxAD8=0;
unsigned int MinAD8=AD8[0];
unsigned int tempAD0=0;
unsigned int tempAD8=0;
for(j=0;j<20;j++)
{
if(AD0[j]>MaxAD0) MaxAD0=AD0[j];
else if(AD0[j]<MinAD0) MinAD0=AD0[j];
if(AD8[j]>MaxAD8) MaxAD8=AD8[j];
else if(AD8[j]<MinAD8) MinAD8=AD8[j];
}
for(j=0;j<20;j++)
{
tempAD0=tempAD0+AD0[j];
tempAD8=tempAD8+AD8[j];
}
AD_0=(tempAD0-MaxAD0-MinAD0)/18;
AD_8=(tempAD8-MaxAD8-MinAD8)/18;
AD_SIG0=AD_0*4.983/1023; //1023~3.3*(10+5.1)/10=4.983V,对应满量程
AD_SIG8=AD_8*4.983/1023; //电路中采用的是5.1k和10k的电阻分压
asm(" NOP "); //请将光标移到此处设置断点,并用debug->Animate监测数据
}
void c_int2()
{
if(PIVR!=0x27)
{ asm(" CLRC INTM ");
return;
}
numled0--;
if(numled0==0)
{ numled0=1500;
if((PBDATDIR & 0x0001)==0x0001)
PBDATDIR=PBDATDIR & 0xFFFE; //IOPB0=0;LED灭
else
PBDATDIR=PBDATDIR |0x0101; //IOPB0=1;LED亮
}
EVAIFRA=0x0080;
asm(" CLRC INTM ");
}
/*踢除看门狗 */
void KickDog()
{
WDKEY=0x5555;
WDKEY=0xAAAA;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -