软件 stvd+cosmic
芯片 STM8S105C6T6
程序:
/* MAIN.C file
*
* Copyright (c) 2002-2005 STMicroelectronics
*/
#include "stm8s105c_s.h"
#include "ioset.h"
@far @interrupt void TIM4_UPD_OVF_IRQHandler (void)
{
PA_ODR=PA_ODR^(1<<6);
TIM4_SR&=~(1<<0);//TIM4_SR1 = 0x00; // 清除更新标志
return;
}
main()
{
unsigned int time=0;
ioset_init();
CLK_PCKENR1|=1<<4; //OPEN TIME4 CLK
TIM4_IER = 0x00; // 禁止中断
TIM4_PSCR = 0x07; // 计数器时钟=主时钟/128=2MHZ/128
// 相当于计数器周期为64uS
TIM4_CNTR =255; // 设定计数器的初值
TIM4_ARR = 255; // 设定重装载时的寄存器值,255 是最大值
TIM4_EGR = 0x01; // 允许产生更新事件
// 定时周期=(ARR+1)*64=16320uS
TIM4_CR1 = 0x01; // b0 = 1,允许计数器工作
TIM4_SR&=0XFE;
TIM4_IER= 0x01; // 允许更新中断
//_asm("rim");// 允许CPU 全局中断
while(1)
{
time++;
if(time==100)
{
PA_ODR=PA_ODR^(1<<5);
}
if(time==200)
{
time=0;
//PA_ODR|=1<<6;
//PA_ODR&=~(1<<5);
}
DelayMS(20);
}
}
}
中断列表里也做了相应的设置,并添加了extern @far @interrupt void TIM4_UPD_OVF_IRQHandler (void);
问题是只要一开总中断(就是取消屏蔽_asm("rim")),编译不报错,放在主程序里的LED和中断里翻转的LED都没有动作,相当于主程序while循环都停掉了,
测试在不开总中断的情况下主程序LED能正常闪烁(把中断翻转的LED 放在主程序WHILE里也能工作,端口设置没问题)
请用过的朋友帮忙解答,非常感谢!
|