我正在尝试对msp430进行编程,以更改变量以更改LED闪烁的速度。这是我的第一次尝试。按下按钮后如何执行子程序“ changeVelocity”?
bic.b #00001000b, &P2DIR ; P2.3 as input
bis.b #1,&P1DIR ; P1.0 as output
bis.b #00001000b, &P2REN ; select internal resistor
bis.b #00001000b, &P2OUT ; make it pull-up
main:
xor.b #1,&P1OUT ; Toggle P1.0
call #ExtraDelay
bit.b #00001000b, &P2IN ;poll 2.3 (trying to detect the button)
jz changeVelocity ;this is how I'm trying but do not work as expected.
jmp main
答案 0 :(得分:-1)
您必须通过设置P2IE来启用中断,并通过P2REN来启用上拉/上拉。应相应选择P2OUT(上拉为1,下拉为0)
然后您应该使用中断向量中的固定地址注册中断处理程序:
ORG PORT2_VECTOR
DW your_interrupt_handler
您可以在其中设置一个延迟值。
请记住要添加某种反颠簸程序来滤除毛刺。并不是真正需要中断,您也可以合并端口输入(在执行操作时),但是您需要用某种计数器来代替延迟环路,该计数器决定何时打开/关闭LED并在每个周期使您的CPU休眠并设置一个计时器将她唤醒(这将帮助您进行精确的延迟并正确安排/执行任务)。 像
Mainloop
nop
bis #LPM0,SR ; sleep
nop
<<<yourcode here>>>
jmp Mainloop
TimerA0_ISR_Handler
bic #LPM0,0(SP) ; wake up
reti
尝试读取该端口的服务器倍数,并仅在按钮保持稳定至少20ms时向该按钮发出信号。