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
어떤 도움을 이해할 수있을 것이다.
LDI R16, ADCSRA
어쩌면 당신이 거기 LDS 명령을 원하는 :
스택 공간이 부족하지 않도록 코드를 어떻게 변경할 수 있습니까? 그리고 당신이 당신의 코멘트의 마지막 부분에 대해 자세히 설명해 주실 수 있습니까? 감사 – HerculesDev