2014-11-22 71 views
0

這是我的代碼。我需要在電路板上放置一個上拉電阻,INT0標誌會將我發送到轉換器,然後在PORTB上打印出來。我在PC0上使用ADC0,但它不會工作。 PORTB上只打印一個值。你可以幫我嗎?Atmega328p ADC彙編不轉換

.include "m328pdef.inc" 
.org 0x0000 jmp startProgram 
.org 0x0002 jmp int0_int 
.org 0x002A jmp adcComplete 

startProgram: 
    .org 0x0033 

// Configuracion de Stack Pointer y Timer0 
ldi R16, High(RAMEND) 
out SPH, R16 
ldi R16, Low(RAMEND) 
out SPL, R16 

// Configuracion INT0 
ldi r16, 0x02 
sts EICRA, R16 
ldi r16, 0x01 
out EIMSK, R16 
sts EIFR, R16 

// Configuracion del ADC 
ldi R16, 0x60 
sts ADMUX, R16 
ldi r16, 0xFF 
sts ADCSRA, R16 
ldi r16, 0x02 
sts ADCSRB, R16 
ldi r16, 0x01 
sts DIDR0, R16 
SEI 

// Inicializando Puerto B 
ldi R16, 0xFF 
out DDRB, R16 
ldi R16, 0x04 
out DDRD, R16 

// Rutina de espera del ADC 
loop: 
    rjmp loop 

int0_int: 
    reti 

adcComplete: 
    lds R16, ADCH 
    cpi R16, 63 
    brlo low_adc 
    cpi R16, 127 
    brlo med_adc 
    cpi R16, 191 
    brlo high_adc 
    cpi R16, 191 
    brsh full_adc 
    reti 

low_adc: 
    ldi R17, 0xFF 
    out PORTB, R17 
    reti 

med_adc: 
    ldi R17, 0x3F 
    out PORTB, R17 
    reti 

high_adc: 
    ldi R17, 0x0F 
    out PORTB, R17 
    reti 

full_adc: 
    ldi R17, 0x03 
    out PORTB, R17 
    reti 
+0

能否請你請你幫個忙,並添加一些意見成爲意義您用於配置外設的值?二進制符號也可以幫助發現錯誤。 – JimmyB 2014-11-24 15:27:54

回答

0

我覺得sts EIFR, R16實際上應該out EIFR, R16

然後,您將PORTD.2(INT0)配置爲輸出,導致它變爲0並停留在那裏。沒有邊沿,沒有INT0,沒有ADC觸發。

如果你有一個外部上拉使用

ldi R16, 0x00 
out DDRD, R16 
out PIND, R16 

要使用內部上拉電阻使用

ldi R16, 0x00 
out DDRD, R16 
ldi R16, (1<<2) 
out PIND, R16