我必须做一个汇编程序。我应该让一个戒指计数器像这样工作:
功能,8个LED:
(0000 000X, 0000 00X0, 0000 0X00, 0000 X000, 000X 0000, 00X0 0000, 0X00 0000, X000 0000)我做了一个程序,但它的工作原理如下:
(0000 000x, 0000 00xx, 0000 0xxx, 0000 xxxx, 000x xxxx, 00xx xxxx,0xxx xxxx,xxxx xxxx)有没有人能帮我一个接一个地做LED灯?
我的代码
.include "m2560def.inc"
ldi r20, HIGH(RAMEND) ; R20 = high part of RAMEND address
out SPH,R2 ; SPH = high part of RAMEND address
ldi R20, low(RAMEND) ; R20 = low part of RAMEND address
out SPL,R20 ; SPL = low part of RAMEND address
ldi r20, 0xFF
out DDRA, r20
ldi r20, 0b10000001
out PORTA, r20
loop_1: ; Begin a loop
rcall Delay
lsl r20
out PORTA,r20
cpi r20,0x00 ;
breq reset
jmp loop_1
Delay:
inc r16
cpi r16,0xFF
brne del_1
ret go back to loop
del_1:
inc r21
cpi r21,0xFF
brne del_1
jmp Delay
reset:
ldi r20, 0xFF
out PORTA, r20
ret发布于 2016-09-20 16:45:53
你的信息有点稀少,所以我必须找出你在做什么:)
据我所知,你使用的是AtMega微控制器
如果'reset‘是关闭所有LED的功能
reset:
ldi r20, 0xFF
out PORTA, r20然后此代码告诉我,端口上的0点亮LED。
lsl r20 lsl向左移动,插入一个零,这将打开LED,这不是您想要的。
你必须打开最右边的部分(不要问我怎么打开的,我对Atmel并不熟悉)
我会尝试:
sec
rol r20(这应该设置进位标志,并且rol将其作为1移位到r20中)
发布于 2016-11-04 17:32:59
我不确定“环计数器”,但我想你想做一个运行的发光二极管?如果是,那么这可能会有所帮助
ldi r20,0xff
out PORTA,r20 ;output initialization
ldi r23,1 ;unused registers
loop : ;main loop
out PORTA,i
rcall delay ; you can use your delay function, i assume its correct
rol r23 ; rotate the value
cpi r23,0 ; this is "reset" when the led reach the 8th
brne loop ;back to loop
ldi r23,1 ; reset the value
rjmp loop ;back to loop使用rol将更改i的值
初始化:1 (0b0000 0001)
第一个角色:(0b0000 0010)
。。
。。
第7卷:(0b1000 0000)
第8卷:(0b0000 0000) <<-在此处执行重置
https://stackoverflow.com/questions/39583346
复制相似问题