|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
/*************************/
/* 系统上电初始化 */
/*************************/
void system_init(void)
{
EA = 0; // CPU关中断
TMOD = 0x11; //定时器0方式1,定时器1方式1
TH0 = (65536-200)/256;
TL0 = (65536-200)%256;
TR0 = 1;
ET0 = 1;
EA = 1;
}
/****************************************************/
/* 定时器0中断服务程序 ,使用第1组寄存器 ,AD采集一个周期 20ms/100=200us */
/****************************************************/
void time0_Routine(void) interrupt 1 using 1
{
TF0=0;
TH0 = (65536-200)/256;
TL0 = (65536-200)%256;
x = AD(1); //AD转换
AD_result[AD_number]=(u_int)(x*500/1024); //扩大100,转换成模拟量
if(AD_number>100) //采集64次
{
result = AD_change(); //如果64次采集完成,进行均方根计算
yunsuan(); //将结果放入显示缓存中
AD_number = 0; //清采集次数累加器
}
else AD_number++; //集次数累加器加1
}计算出来的不对,应该是时间问题,请各位帮忙。我试验在中断中计数5000(5000*200us=1s)时间相差很,多把200改小改到160左右才行,不知道什么原因,就算中断占用时间也不可能占用这么多啊,不是说最多占用8个周期,但现在差的太多了,(我把中断中的程序放到主程序中,在中断中设置个标志位方法,一样不行) |
|