首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ADC输入的代码不起作用

ADC输入的代码不起作用
EN

Stack Overflow用户
提问于 2016-08-13 22:46:45
回答 1查看 366关注 0票数 0

我正在尝试使用ADC从电位器读取一个值,然后用它来设置延迟的长度,该延迟将在一定的时间间隔内点亮不同的灯(取决于ADC的输入)。我可能犯了一个简单的错误。到目前为止代码如下:`

`初始化:

代码语言:javascript
复制
 LDI R16, HIGH(RAMEND)  ;Initializing the r16 register

 OUT SPH, R16
 LDI R16, LOW(RAMEND)
 OUT SPL, R16   

LDI R16, 0xFF   
OUT DDRB, R16   ;Initializes port B as output
LDI R16, 0x00
OUT DDRC, R16   ;Initializes port C as an input

LDI R16, 0b00000000; Initialize ADC port and reference voltage
STS ADMUX, R16 

startADC:
LDI R16, 0b11000111
STS ADCSRA, R16 ;Begins converstion 
KeepPolling:
LDI R16, ADCSRA
SBRS R16, 4     ;Checks if bit is set
RJMP KeepPolling    ;If bit is not set, conversion continues
LDS R18, ADCL       ;Loads ADCL value onto R16  
LDS R16, ADCH       ;Readvalue so resistor doesnt lock down
RCALL   Green


Green:

MOV R16, R18            ;Load value of ADC to R24
SBI PORTB, 0b00000001       ;Output High to portb
RCALL loop
CBI PORTB, 0b00000001
RCALL Yellow        ;Go to yellow if R24 is 0



Yellow: 

MOV R16, R18            ;Load value of ADC to R24
LSR R16             ;Divide R24 by 2
SBI PORTB, 0b00000010       ;Output high to port B 
CALL loop
CBI PORTB, 0b00000010
RCALL Red

Red:

MOV R16, R18
SBI PORTB, 0b00000011
RCALL loop
CBI PORTB, 0b00000011
RCALL startADC


loop: 

MOV R20, R16 

outer_loop: 

LDI R24, 0

Add_Dec:    

ADIW R24, 1
BRNE Add_Dec
DEC R20
BRNE outer_loop 
RET

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2016-08-13 22:58:36

KeepPolling环路的第一行不能读取模数转换器状态寄存器:

代码语言:javascript
复制
LDI R16, ADCSRA

也许你需要一个LDS的指导。根据AVR的不同,您也许可以使用SBI指令。

此外,startADC()调用Green(),后者调用Yellow(),后者调用Red(),后者调用startADC()。我想你很快就会用完堆栈空间。

而且,一旦打破了这个无限循环,Yellow()就会调用Red(),然后直接进入Red()Green()落入Yellow()也是如此。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38933869

复制
相关文章

相似问题

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