首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

频率捕捉的问题

频率捕捉的问题

uint read_flash1,ad_cos,tc;

T2SC1=0x44;              //上升沿触发
interrupt 8 void time2_isr(void){
unsigned int ad_dianliu,ad_t;
T2SC1_CH1IE=0;         
ad_t=T2CH1;                
ad_dianliu=read_flash1;        
if(ad_t>ad_dianliu)                  //T2CH1大于上次记录数时
read_flash1=ad_t-ad_dianliu;         //T2CH1-上次数值得到本次记录数
else
read_flash1=0xffff-ad_dianliu+ad_t; //T2CH1小于上次记录值时,说明T2CH1溢出重新计数

ad_cos=(read_flash1+tc)/2;         //两次采样值平均
tc=ad_cos;
T2SC1_CH1F=0;
T2SC1_CH1IE=1;
}

我这个程序哪里错了,捕捉的数值AD_COS乱跳..我用的是HC908JL8的,采用内部时钟2M.捕捉的实际频率120HZ左右.

[此贴子已经被作者于2007-4-3 15:39:11编辑过]

1. 在中断中不必进行T2SC1_CH1IE=0和T2SC1_CH1IE=1的操作,所有中断已自动屏蔽。你这样反而会引起误触发或屏蔽了正常的中断;
2. 清CHI1F的操作应该先读TCS1然后紧接着写0给CH1F位。
海纳百川  有容乃大
返回列表