智能车制作
标题:
MC9s12xs128mal PIT中断进不了
[打印本页]
作者:
kevinwon1819
时间:
2014-8-21 20:06
标题:
MC9s12xs128mal PIT中断进不了
我在网上看过很多程序都运行不了,难道是128跟128mal寄存器有差别?
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#define uint unsigned int
#define uchar unsigned char
void pit_init(void)
{
PITCFLMT=0; //关闭PIT
PITCE_PCE0=1; //打开定时器通道0
PITMUX_PMUX0=0; //定时通道0使用微计数器0
PITMTLD0=(80-1); //设置微计数器0的加载寄存器N
PITLD0=(50000-1); //设置16位计数器0的加载寄存器M
//定时周期=(N+1)*(M+1)/BusClk=(0x4f+1)*(0xc34f+1)/(16M/2)=0.5s
PITINTE |= (1<<0); //使能定时通道0的中断
PITCFLMT=0x80; //使能PIT
}
/*主函数*/
void main(void)
{
DDRB=0xff;
PORTB=0xfe;
pit_init();
EnableInterrupts;
for(;;)
{
_FEED_COP(); /* feeds the dog */
}
}
void interrupt 66 PIT0(void)
{
PITCFLMT=0; //只用一个通道时,关闭PIT,稳定,清超时标志位
PORTB=~PORTB; //反转电平
// PITTF=(1<<0); //清超时标志位
PITCFLMT=0x80; //使能PIT
}
作者:
kevinwon1819
时间:
2014-8-21 20:30
用的是128mal,程序是128的,怀疑是中断号问题,不知道怀疑正不正确。用查询PITTF值判断时间到没到是可以运行的。
void main(void)
{
DDRB=0xff;
PORTB=0xff;
pit_init();
for(;;)
{
//查询法
if(PITTF&0x01) //检查是否超时
{
PORTB=~PORTB; //PB口反转电平
PITTF=(1<<0); //清超时标志位
}
//循环,不必再初始化加载寄存器
_FEED_COP(); /* feeds the dog */
}
}
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2