金牌会员
- 积分
- 2524
- 威望
- 1344
- 贡献
- 750
- 兑换币
- 24
- 注册时间
- 2011-8-4
- 在线时间
- 215 小时
|
请问各位大侠 下面的程序到底是怎么执行的 有中断的优先级吗?哪个优先级更高呀!
程序是这样的
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#pragma LINK_INFO DERIVATIVE "mc9s12xdg128"
int count=0;
float f;
double f1=2000000,first=0,second=0,n,N;
void main(void)
{
DisableInterrupts;//关闭中断
TSCR2=0x82;//定时器控制寄存器2 定时器溢出中断允许 禁止复位 计数器自由计数 4分频
PACTL=0x20;//16位脉冲累加器A控制寄存器 脉冲累加器模式寄存器置1(PAMOD) PAEN=1时候
//两个八位的脉冲累加寄存器组成16 PAMOD寄存器设置的是这个16累加器的工作模式
TIOS=0xfe;//通道选择寄存器 除了0通道设置为输入捕捉 其他通道全部使能为输出比较
TCTL4=0x01;//通道0仅在上升沿捕捉
ICSYS=0x0a;//控制系统控制寄存器 通道不结合 BUFEN=1 输入捕捉和脉冲累加寄存器有效
//TFMOD=1 如果是队列模式
PBCTL_PBEN=0x00;//16位脉冲累加器B控制寄存器 16位脉冲累加寄存器禁止使用
ICPAR=0x01;//脉冲累加器控制寄存器 只有在PBEN清零的时候
//8位脉冲累加器PAc1和PAC2才有作用 如果PAEB被置位则脉冲累加器不起作用
TIE=0x01;//定时器中断允许寄存器 相应位被置1则允许相应通道产生硬件中断
//此处设置0通道为1允许硬件中断
TSCR1=0x80;//定时器控制寄存器1 TEN=1 定时器正常工作
EnableInterrupts;
for(;;)
{;} //无限循环 停下来
}
#pragma CODE_SEG_NEAR_SEG NON_BANKED
interrupt void CH0IC(void) //检测两个高电平之间的时间 记录算出频率
{
first=TC0H;//IC保持寄存器 这些寄存器用于为相应的捕捉寄存器
//TC0-TC3提供锁存功能
second=TC0;//每个通道都有一个这样的16位寄存器 这个为0通道的寄存器
//对于 IC(输入捕捉)通道,
//当通道的边沿探测器检测到由 EDGnA、EDGnB指定的条件时,
//将自由定时器(说明里面存的是有效信号过来是的时间)的
//值捕捉到寄存器 TCn,随后程序可以读取和处理
n=count*65535+second-first;
f=f1/n;
N=PA0H;//脉冲累加器保持寄存器
TFLG1=0x01;
count=0;
}
interrupt void TOI(void)
{
count++;
TFLG2_TOF=1;
}
各位大侠帮帮满 刚接触单片机 |
|