本帖最后由 1434636181 于 2012-8-26 19:24 编辑
#include <hidef.h> /* common defines and macros */
#include <mc9s12dp256.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dp256b"
unsigned char ic4,dic4,ic40; void ic_init (void) //输入捕捉初始化函数
{
TSCR1=0x90; //主定时器使能
TSCR2=0x07; //分频因子为128
ICSYS=0x02; //IC缓冲使能
TIOS=0x00; //通道设置为输入捕捉
TCTL4=0x02; //采用下降沿触发
TIE=0x01; //通道0开中断
} void delayms(int ms)
{
int ii,jj;
if (ms<1) ms=1;
for(ii=0;ii<ms;ii++)
for(jj=0;jj<1335;jj++);
}
void main(void)
{
EnableInterrupts;
ic_init();
DDRA=0xff; //设置PORTA的方向寄存器,为输出
PORTA=0x00; //PORTA的输出初始化为低电平
DDRB=0xff; //PORTB设置为LED灯的控制信号
PORTB=0xff;
delayms(2000); //LED灯全亮
for(;;)
{
PORTA=0x00; //循环中设置为高电平
delayms(100);
PORTA=0xff; //循环中设置为低电平,产生一个方波
delayms(100);
}
}
#pragma CODE_SEG NON_BANKED
void interrupt 8 ic0_int(void) //中断服务程序
{
TFLG1_C0F=1; //中断标志清除
ic4=TC0; //通过读TC0寄存器来相应中断,
dic4=ic4-ic40;
ic40=ic4; //得到脉冲宽度不需要考虑溢出
PORTB=0x55; //用LED灯来指示已经进入了中断
} 其中红色部分不明白,它怎么就计算出脉冲宽度呢???? |