- UID
- 838086
|
在MC9S12XS128中,当ad模块和PIT中断同时出现时候变异可以通过,但是下载后出现ILLEGAL_BP错误全部程序如下:
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#include <MC9S12XS128.h>
#define Ir_Pin PTH_PTH0
#define speed 25
int count,i,j;
void PLL_init(void);
void ad_init(void);
void delayms(int ms);
void Ir_Get_Low(void);
void Ir_Get_High(void);
void IO(void);
void main(void)
{
PLL_init();
IO();
ad_init(); // 将此句注释或将下面一句注释掉,程序都可以运行
EnableInterrupts; //将此句注释或将上面一句注释掉,程序都可以运行
//当然注释掉,想要功能就不能实现了
while(1)
{
}
for(;;);
}
void PLL_init(void) //时钟初始化
{
//40M bus_clock
CLKSEL=0X00;
PLLCTL_PLLON=1;
SYNR =0xc0 | 0x04;
REFDV=0x80 | 0x01;
POSTDIV=0x00;
_asm(nop);
_asm(nop);
while(!(CRGFLG_LOCK==1));
CLKSEL_PLLSEL =1;
}
void ad_init(void) //AD初始化
{
ATD0CTL1=0X00;
ATD0CTL2=0X42;
ATD0CTL3=0Xc3; //0Xe4为12 0xc3为8 6_3转换序列长度1100 12通道
ATD0CTL4=0xF3;
ATD0CTL5=0x30;
ATD0DIEN=0x00;
}
void Ir_Get_Low()
{
count=0;
PITCFLMT_PITE=0; //关闭PIT
PITCE_PCE0=1;//使能通道0
//微定时器的装载寄存器
PITMTLD0= 40-1;//8位定时器初值设定。40分频,在40MHzBusClock下,为0.01MHz,即1us
//定时器的装载寄存器,
PITLD0 = 20 - 1 ;//16位定时器初值设定//定时20000*0.001ms = 20ms
PITMUX_PMUX0=0;//0:相应16位定时器与微时基0连接
PITINTE_PINTE0=1;//PIT相应通道溢出中断使能
PITCFLMT_PITE=1; //使能PIT ..
while(Ir_Pin==0);
PITCFLMT_PITE=0; //关闭PIT
}
//==============================================================
void Ir_Get_High(void)
{
count=0;
PITCFLMT_PITE=0; //关闭PIT
PITCE_PCE0=1;//使能通道0
//微定时器的装载寄存器
PITMTLD0= 40-1;//8位定时器初值设定。40分频,在40MHzBusClock下,为0.01MHz,即1us
//定时器的装载寄存器,
PITLD0 = 20 - 1 ;//16位定时器初值设定//定时20*0.001ms = 20us
PITMUX_PMUX0=0;//0:相应16位定时器与微时基0连接
PITINTE_PINTE0=1;//PIT相应通道溢出中断使能
PITCFLMT_PITE=1; //使能PIT ..
while(Ir_Pin==1);
PITCFLMT_PITE=0; //关闭PIT
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED //指示该程序在不分页区
void interrupt 66 PIT0(void)
{
count++;
PITTF_PTF0=0;//清中断标志位
}
void IO(void)
{
DDRH_DDRH0=0;
}
void delayms(int ms) //普通延时环节 调用1次大约1ms
{
int ii,jj;
if (ms<1) ms=1;
for(ii=0;ii<ms;ii++)
for(jj=0;jj<3338;jj++);
}
//定时器模块 |
|