就是编译通过之后,点“Debug”,进入调试环境,在调试环境下点击"Run"。 PS:通过BDM仿真的。
另外,之前是用定时器溢出中断出现的问题。但是我昨天又试了下用模数递减计数器,却完全没有问题!
有没有喂看门狗?
喂了。看门狗肯定没问题,其它程序都跑得很正常。
关键是我Debug的情况下跑得很正常,但是脱离仿真环境,正常上电启动就不正常,实在太奇怪了
我检查了程序,并没有用到什么特殊的寄存器。注:SMALL模式
/*************************************************
PLL初始化
*************************************************/
void PLL_init(void)
{
CLKSEL_PLLSEL=0; // 选用外部晶振作为系统时钟
PLLCTL_PLLON=0; // 锁相环电路禁止
SYNR=19; // 设置倍频系数,Fpllclk=2*4M*(19+1)/(1+1)=80M,所以总线频率为40M
REFDV=1;
PLLCTL_PLLON=1; // 锁相环电路使能
while(!CRGFLG_LOCK);
CLKSEL_PLLSEL=1; // 选用锁相环电路作为系统时钟
}
/*************************************************
CPU硬件部分初始化
*************************************************/
void periph_init(void)
{
DDRB_DDRB0 = 0; // Port B[0..3] input (SW3 1-4)
DDRB_DDRB1 = 0;
DDRB_DDRB2 = 0;
DDRB_DDRB3 = 0;
DDRB_DDRB4 = 1; // Port B[4..7] output (LED1-LED4)
DDRB_DDRB5 = 1;
DDRB_DDRB6 = 1;
DDRB_DDRB7 = 1;
LED1 = OFF; // 将LED全部关闭
LED2 = OFF;
LED3 = OFF;
LED4 = OFF;
DDRP_DDRP0 = 0; // Port BP_0 and BP_1 equals input
DDRP_DDRP1 = 0; // SW1 and SW2
PUCR_PUPBE = 1; // Turn on the pullups for SW3 (1-4)
DDRJ_DDRJ7=0; // PJ7定义为输入
PPSJ_PPSJ7=0; // 下降沿触发中断
PIEJ_PIEJ7=1; // PJ7中断使能
}
/*************************************************
定时器初始化程序
*************************************************/
void Timer_init(void)
{
TSCR1_TEN=0; // 禁止定时器
TSCR1_TFFCA=1; // 快速清除标志位
TSCR2_TOI=1; // TOF置1时申请硬件中断
TSCR2_PR=3; // 预分频系数为8
//TSCR2_PR1=1;
//TSCR2_PR0=1;
TCNT=0x1000; // 设置定时计数器初值
TSCR1_TEN=1; // 使能定时器
}
/*************************************************
定时器溢出中断程序
*************************************************/
#pragma CODE_SEG NON_BANKED
interrupt void TimerOverflow_ISR(void)
{
DisableInterrupts;
TFLG2_TOF=1; // 写1清标志位
TCNT=0x1000; // 重新载入定时计数器初值
LED4=~LED4;
EnableInterrupts;
}
#pragma CODE_SEG DEFAULT
void main(void)
{
uint intTempData;
uchar charTempData;
PLL_init();
periph_init();
Timer_init();
EnableInterrupts; // 全局中断使能
for(;;)
{
}
}
[此贴子已经被作者于2008-9-10 11:33:56编辑过]
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |