Witam,
napisałem w assemblerze funkcję obsługi ADC i chciałbym ją wykorzystać w kodzie w C.
Zamieszczę przykładowy kod pokazujący o co mi chodzi:
adc.asm
adc.h
main.c
Chodzi o to, że funkcje put_int16 nie zwracają odpowiednio 0x11 i 0x22, lecz 0x00 i 0x00.
Ponadto co mam dodać abym nie musiał wstukiwać:
#define ADCSR 0x26
#define MCUCR 0x35
??
Dodano po 1 [godziny] 2 [minuty]:
Problem rozwiązałem.
Za krótko czekałem na wynik i w efekcie cały czas zczytywałem 0x0000.
Powinno być nie ADCSR tylko ADCSRA.
napisałem w assemblerze funkcję obsługi ADC i chciałbym ją wykorzystać w kodzie w C.
Zamieszczę przykładowy kod pokazujący o co mi chodzi:
adc.asm
#include <avr/io.h>
#define ADC_ASM
#include "adc.h"
.text
.global adc_read
adc_read:
in R25, ADCL//ADCL
in R24, ADCH//ADCH/*//ldi
ret
adc.h
#ifndef _ADC_H
#define _ADC_H
#ifndef ADC_ASM
uint16_t adc_read(void);
#endif
#endif
main.c
#include <avr/io.h>
#include <inttypes.h>
#include "adc.h"
int main(void)
{
uint16_t adc_data;
adc_data=adc_read();
put_int8(77,30,(unsigned char)(adc_data),0);//ta funkcja wypisuje liczbę 8-bitową
put_int8(77,60,(unsigned char)(adc_data>>8),0);
while (1)
{
asm("nop");
}
return(0);
}
Chodzi o to, że funkcje put_int16 nie zwracają odpowiednio 0x11 i 0x22, lecz 0x00 i 0x00.
Ponadto co mam dodać abym nie musiał wstukiwać:
#define ADCSR 0x26
#define MCUCR 0x35
??
Dodano po 1 [godziny] 2 [minuty]:
Problem rozwiązałem.
Za krótko czekałem na wynik i w efekcie cały czas zczytywałem 0x0000.
Powinno być nie ADCSR tylko ADCSRA.