菜鸟一枚:stm8,定时中断问题

2019-03-23 18:36发布

这个程序,我想用定时中断来实现流水灯,不知道哪里错误了,没有达到那种效果。



intel
;初始化PB,推挽输出,用于数码管段驱动;
  mov PB_DDR,#0ffh
        mov PB_CR1,#0ffh
        mov PB_CR2,#0


;初始化定时器timer2

  mov TIM2_EGR,#1; 允许产生更新事件
        mov TIM2_PSCR,#2  ; 计数器时钟=主时钟/128=2MHZ/2,相当于计数器周期为uS
  mov TIM2_ARRH,#13h ;设定重装载时的寄存器值的高8位
        mov TIM2_ARRL,#88h ; 设定重装载时的寄存器值的低8位
        mov TIM2_CNTRH,#13h ; 设定计数器的初值的高8位
        mov TIM2_CNTRL,#88h ; 设定计数器的初值的低8位
  mov TIM2_CR1,#01          ; 设置控制器,启动定时器,b0 = 1,允许计数器工作,b1     = 0,允许更新
  mov TIM2_IER,#01 ; 允许更新中断
        Rim             ; 允许CPU全局中断

        rcf                                                         ;对标志位清0
  ld a,#0ffh
next1:                                                        ;循环标号
                        rlc a                                                ;A左移
next2:
                        ld PB_ODR,a                        ;把a数据送PB_ODR
            BTJF bit,#0,next1                        
                        jra next2                                ;跳转到next2
         
TIMER2_ISR.L: ;定时器2中断入口
  mov  TIM2_SR1,#0; 清除更新标志
        inc counter;1S累积计数器加1
        ld a,counter;
        cp a,#100;判断是否到达1S
        jrne reture;没有到达返回
  mov counter,#0;到达1S,清累积计数器
        bset bit,#0;设置标志位,用于主程序判断
reture:;返回
  iret



此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。