试验目的:通过连续记录输入信号的两个上升沿,用该程序可以计算出输入信号的频率;同时,利用脉冲累加器可以记录输入脉冲数。
#include /* common defines and macros */
#include /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dp256b"
int count=0;
float f;
double f1=2000000,first=0,second=0,n,N;
void main(void)
{
DisableInterrupts; //禁止全局中断
TSCR2=0X82; //计时器系统控制寄存器 0X80计时器溢出中断使能 0x02计数
器预分频为四分频
PACTL=0X20; //脉冲累加器A 控制寄存器 0X20脉冲累加器溢出中断允许位 TIOS=0XFE; //IC/OC 选择寄存器 0xfe 设定pt0输入捕捉口
TCTL4=0X01; //控制寄存器 0X01输入捕捉边沿设为仅捕捉上升沿
ICSYS=0X0A; //输入系统控制寄存器 标志设置方式控制位 0x80为1表示在所
有其他的输入捕捉情况下,PTn 引脚发生的有效外部事件将置
位中断标志,0x02 IC及PAC 保持寄存器。锁存方式由控制位
LATQ 设定,当位LATQ=1时,向寄存器MCCTL($26)中
的ICLAT 位写1,将导致捕捉寄存器和脉冲累加器将其中
数值转移到各自的保持寄存器。
PBCTL_PBEN=0X00;
ICPAR=0X01; //脉冲累加器B 控制寄存器 0x00 脉冲累加器B 禁止 //输入脉冲累加器控制寄存器 0x01 PA0EN=1 表示对应的8位
//脉冲累加器通道0使能
TIE=0X01; //计时器中断使能寄存器 0x01 输入捕捉/输出比较0中断使能 TSCR1=0X80; //计时器系统控制寄存器1 0x80 表示定时器使能,正常工作 EnableInterrupts; //使能全局中断
for(;;)
{; }
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt void CH0IC(void)
{
/****************************删掉***************************************
first= TC0H; // IC 保持寄存器 这些寄存器用于为相应的捕捉寄存器提供锁存功能 second=TC0; // IC/OC寄存器 每个IC 或OC 通道都设置有一个16位的寄存器,
对//于IC 通道,当通道的边沿探测器检测到由EDGnA ,EDGnB 指定的
//条件时,//将自由定时器的值捕捉到寄存器TC
n=count*65535+second-first;
f=f1/n;
*************************************************************************/ N=PA0H; //脉冲累加器保持寄存器 用于为Pan 提供锁存功能
TFLG1=0X01; //0x01 IC/OC通道中断请求标志 为1表示IC/OC通道已经出现动作
count=0;
}
interrupt void TOI(void) {
count++;
TFLG2_TOF=1; } //定时器溢出标志 当16位自由定时器从FFFF 回滚到0000时,该位置位,将80写入到TFLAG2将自动清除该位。
试验目的:通过连续记录输入信号的两个上升沿,用该程序可以计算出输入信号的频率;同时,利用脉冲累加器可以记录输入脉冲数。
#include /* common defines and macros */
#include /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dp256b"
int count=0;
float f;
double f1=2000000,first=0,second=0,n,N;
void main(void)
{
DisableInterrupts; //禁止全局中断
TSCR2=0X82; //计时器系统控制寄存器 0X80计时器溢出中断使能 0x02计数
器预分频为四分频
PACTL=0X20; //脉冲累加器A 控制寄存器 0X20脉冲累加器溢出中断允许位 TIOS=0XFE; //IC/OC 选择寄存器 0xfe 设定pt0输入捕捉口
TCTL4=0X01; //控制寄存器 0X01输入捕捉边沿设为仅捕捉上升沿
ICSYS=0X0A; //输入系统控制寄存器 标志设置方式控制位 0x80为1表示在所
有其他的输入捕捉情况下,PTn 引脚发生的有效外部事件将置
位中断标志,0x02 IC及PAC 保持寄存器。锁存方式由控制位
LATQ 设定,当位LATQ=1时,向寄存器MCCTL($26)中
的ICLAT 位写1,将导致捕捉寄存器和脉冲累加器将其中
数值转移到各自的保持寄存器。
PBCTL_PBEN=0X00;
ICPAR=0X01; //脉冲累加器B 控制寄存器 0x00 脉冲累加器B 禁止 //输入脉冲累加器控制寄存器 0x01 PA0EN=1 表示对应的8位
//脉冲累加器通道0使能
TIE=0X01; //计时器中断使能寄存器 0x01 输入捕捉/输出比较0中断使能 TSCR1=0X80; //计时器系统控制寄存器1 0x80 表示定时器使能,正常工作 EnableInterrupts; //使能全局中断
for(;;)
{; }
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt void CH0IC(void)
{
/****************************删掉***************************************
first= TC0H; // IC 保持寄存器 这些寄存器用于为相应的捕捉寄存器提供锁存功能 second=TC0; // IC/OC寄存器 每个IC 或OC 通道都设置有一个16位的寄存器,
对//于IC 通道,当通道的边沿探测器检测到由EDGnA ,EDGnB 指定的
//条件时,//将自由定时器的值捕捉到寄存器TC
n=count*65535+second-first;
f=f1/n;
*************************************************************************/ N=PA0H; //脉冲累加器保持寄存器 用于为Pan 提供锁存功能
TFLG1=0X01; //0x01 IC/OC通道中断请求标志 为1表示IC/OC通道已经出现动作
count=0;
}
interrupt void TOI(void) {
count++;
TFLG2_TOF=1; } //定时器溢出标志 当16位自由定时器从FFFF 回滚到0000时,该位置位,将80写入到TFLAG2将自动清除该位。