首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Atmega128装配工程

Atmega128装配工程
EN

Stack Overflow用户
提问于 2013-09-18 02:55:35
回答 1查看 836关注 0票数 0

我试着通过玩Atmega128板来学习一个小程序集。我试图使一套8 LED的单独打开/关闭时,他们的适当按钮被按下。

代码语言:javascript
复制
.INCLUDE "m128def.inc"
.CSEG
.ORG $0

initialize:
    ldi     r16, 1<<7 | 1<<6 | 1<<5 | 1<<4 | 1<<3 | 1<<2 | 1<<1 | 1<<0
    out     PORTB, r16          ; Pull up resistors
    ldi     r16, 1<<7 | 1<<6 | 1<<5 | 1<<4 | 1<<3 | 1<<2 | 1<<1 | 1<<0
    out     DDRD, r16           ; set all pins on PORTD to output

test:
    in      r16, PINB           ; input values of buttons
    swap    r16                 ; invert so button pressed makes value low
    out     PORTB, r16          ; output to led
end:
    rjmp    test

这行得通吗?我把发光二极管连接到PortD上,按钮连接到端口/点对点。这基本上是我想用C写的(我精通C,而不是汇编)。也许这会让事情变得更清楚一些。

代码语言:javascript
复制
DDRD  = 0xFF; // set to output
DDRB  = 0; // set to input
PORTB = 255; // enable pull-up resistors
while (1)  {
    PORTD = ~PINB;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-18 13:55:28

PINA和PORTA指的是相同的物理引脚。AVR有两个名称来区分输入和输出。

上面的代码有一半的引脚(0到3)被配置为输出,而引脚4到7是带脉冲的输入。

代码的下一部分并不是很清楚。您正在读取0到3作为输入,然后移动,以便写入引脚4至7,以及引脚1。这是不兼容的初始设置的引脚。电流仍然会流出一个输入引脚,但它的设计并不好。

你有按钮和leds连接在同一个引脚上吗?然后,您应该使用一个或另一个在一个别针,并设置DDR和拉适当。确定按钮是如何连接的。他们把输入拉低到地面还是高到Vcc?

我不认为在使用轮询代码的同时有一个引脚是输入和输出。如果您希望0到3的按钮和4到7的输出,那么您需要稍微修改代码。

代码语言:javascript
复制
.INCLUDE "m128def.inc" 
.CSEG 
.ORG $0

initialize:
    ldi r16, 1<<3 | 1<<2 | 1<<1 | 1<<0         ; pullup inputs
    out PORTA, r16 
    ldi r16, 1<<7 | 1<<6 | 1<<5 | 1<<4         ; 4 to 7 are output
    out DDRA, r16
test:
    in r16, PINA
    lsr r16 
    lsr r16
    lsr r16
    lsr r16
    ori r16, 1<<3 | 1<<2 | 1<<1 | 1<<0         ; pullup 0 to 3, and output to 4 to 7
    out PORTA, r16
end:
    rjmp test
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18863119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档