打印
[STM8]

STM8 能把人折磨死

[复制链接]
3356|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiangfeizi|  楼主 | 2010-10-12 15:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机 STM8S903SK
程序如下:

定时器6初始化程序:
void timer6_50us(void)//配置1ms中断的寄存器状态
{
TIM6_EGR=0X01;
TIM6_ARR=0X64;
TIM6_PSCR=0X00;
TIM6_CR1=0X84;
TIM6_SR=0X00;
TIM6_IER=0X01;
TIM6_CR1|=0X01;
}

中断服务程序:
#include"stm8s903k3.h"
typedef void @far (*interrupt_handler_t)(void);
extern void _stext();     /* startup routine */
extern flag_tt;

struct interrupt_vector {
unsigned char interrupt_instruction;
interrupt_handler_t interrupt_handler;
};
@far @interrupt void NonHandledInterrupt (void)
{
/* in order to detect unexpected events during development,
    it is recommended to set a breakpoint on the following instruction
*/
return;
}
@far @interrupt void TIM6_UPD_OVF_TRG_IRQHandler()
{  
  //TIM6_SR=0X00;
//flag1_tt=0x05;
  flag_tt=1;
  TIM6_SR=0X00;
    return;
}

struct interrupt_vector const _vectab[] = {
{0x82, (interrupt_handler_t)_stext}, /* reset */
{0x82, NonHandledInterrupt}, /* trap  */
{0x82, NonHandledInterrupt}, /* irq0  */
{0x82, NonHandledInterrupt}, /* irq1  */
{0x82, NonHandledInterrupt}, /* irq2  */
{0x82, NonHandledInterrupt}, /* irq3  */
{0x82, NonHandledInterrupt}, /* irq4  */
{0x82, NonHandledInterrupt}, /* irq5  */
{0x82, NonHandledInterrupt}, /* irq6  */
{0x82, NonHandledInterrupt}, /* irq7  */
{0x82, NonHandledInterrupt}, /* irq8  */
{0x82, NonHandledInterrupt}, /* irq9  */
{0x82, NonHandledInterrupt}, /* irq10 */
{0x82, NonHandledInterrupt}, /* irq11 */
{0x82, NonHandledInterrupt}, /* irq12 */
{0x82, NonHandledInterrupt}, /* irq13 */
{0x82, NonHandledInterrupt}, /* irq14 */
{0x82, NonHandledInterrupt}, /* irq15 */
{0x82, NonHandledInterrupt}, /* irq16 */
{0x82, NonHandledInterrupt}, /* irq17 */
{0x82, NonHandledInterrupt}, /* irq18 */
{0x82, NonHandledInterrupt}, /* irq19 */
{0x82, NonHandledInterrupt}, /* irq20 */
{0x82, NonHandledInterrupt}, /* irq21 */
{0x82, NonHandledInterrupt}, /* irq22 */
{0x82, TIM6_UPD_OVF_TRG_IRQHandler}, /* irq23 */
{0x82, NonHandledInterrupt}, /* irq24 */
{0x82, NonHandledInterrupt}, /* irq25 */
{0x82, NonHandledInterrupt}, /* irq26 */
{0x82, NonHandledInterrupt}, /* irq27 */
{0x82, NonHandledInterrupt}, /* irq28 */
{0x82, NonHandledInterrupt}, /* irq29 */
};

主程序:
main()
{
  _asm("sim");  
  clock_inti();
  io_inti();
_asm("rim");
timer6_50us();

   while(1)
   {
  if(flag_tt==1)
   {PC_ODR|=0x80;}
   else
   {PC_ODR&=0x00;}
  }

}

程序可以完全跑起来,可是中断程序的时间标志位 flag_tt,按道理在走完中断程序后应该置为位了。可是实际跑完后,该标志还是0,哪个大哥有碰到相同的问题,请指教一下吧!!!!!!!!!!!!!!
沙发
xiangfeizi|  楼主 | 2010-10-12 17:02 | 只看该作者
问题解决,是ST的技术支持温工帮忙解决的。原因是中断服务程序里的申明语句要加类型说明。将原来的extern flag_tt;更改为:extern unsigned char flag_tt; 就好了。  :'( 浪费好多时间啊!

使用特权

评论回复
板凳
CrazyST| | 2010-10-12 18:39 | 只看该作者
建议楼主把帖子中的STM8改成COMIC,是COMIC古怪,我贼不喜欢这个编译器。。:lol

使用特权

评论回复
地板
X-Hawk| | 2010-10-12 18:53 | 只看该作者
贼古怪的行为!
初看挺像少加volatile或者其他内存溢出的情况。

使用特权

评论回复
5
pkat| | 2010-10-12 22:56 | 只看该作者
是挺奇怪的,不过楼主还是解决了,调程序只能这样慢慢熬:lol

使用特权

评论回复
6
xiangfeizi|  楼主 | 2010-10-13 09:59 | 只看该作者
白发三千丈,缘愁似更长!

使用特权

评论回复
7
sunny_ugv| | 2010-10-13 11:31 | 只看该作者
搞出来就好,慢慢摸索

使用特权

评论回复
8
gxgclg| | 2010-10-13 19:46 | 只看该作者
当楼主把一个个问题解决时,就会领略到很多喜悦了:lol

使用特权

评论回复
9
xiangfeizi|  楼主 | 2010-10-13 21:15 | 只看该作者
8# gxgclg 一个

一个问题解决快乐不起来,解决一个问题又出了N个问题。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

62

帖子

0

粉丝