0
我试图从电位器读取一个使用ADC的值,然后用它来设置我的延迟时间长度,这将在不同的时间间隔点亮不同的灯光(取决于输入来自ADC)。我可能会犯一个简单的错误。这是迄今为止代码:`ADC输入不工作的代码
`初始化:
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
任何帮助将不胜感激。
我怎么可能改变代码,以便没有用完堆栈空间?你能否详细说明你评论的最后一部分,不太清楚我的理解是什么意思?谢谢 – HerculesDev