你好:这个是共阳LED,想通过定时器来实现流水灯效果,不知道哪里出错了?
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
interrupt NonHandledInterrupt
NonHandledInterrupt.l
iret
motorola
|