【问题标题】:Ring counter avr assembler,环形计数器 avr 汇编器,
【发布时间】:2016-09-19 23:02:45
【问题描述】:

我必须做一个汇编程序。我应该让一个环形计数器像这样工作:-

功能,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

【问题讨论】:

标签: assembly avr atmel


【解决方案1】:

你的信息有点少,所以我必须找出你在做什么:)

据我所知,您使用的是 AtMega 微控制器

如果 'reset' 是关闭所有 LED 的功能

reset:
    ldi r20, 0xFF
    out PORTA, r20

然后这段代码告诉我,端口上的 0 会打开 LED。

lsl r20 

lsl 向左移动,插入一个零,这将打开 LED,这不是您想要的。

你必须打开最右边的位(不要问我怎么做,我对 Atmel 不熟悉)

我会尝试:

sec
rol r20

(这应该设置进位标志并且 rol 将其作为 1 移入 r20)

【讨论】:

    【解决方案2】:

    我不确定“环形计数器”,但我假设您想制作一个正在运行的 LED?如果是,那么也许这会有所帮助

    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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-27
      相关资源
      最近更新 更多