Продолжаю перетаскивать код из AT90S4433 в CodeVision...
Делаю настройки портов I/O
Код: Выделить всё
ACSR=0x80;
SFIOR=0x00;
#define ADC_VREF_TYPE 0x00
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x85;
SFIOR&=0xEF;
WDTCR=0x1F;
WDTCR=0x0F;Код: Выделить всё
unsigned int read_adc_new(unsigned char adc_input)
{
#asm
LD R30,Y
OUT ADMUX,R30
RCALL _read_adc
IN R30,ADCL
IN R31,ADCH
STS _r_tadc,R30
STS _r_tadc+1,R31
#endasm
}
void read_adc(void)
{
#asm
SBI ADCSRA,ADSC ;Стартую преобразование
_read_adc_wait:
wdr
sbis ADCSRA,ADIF ;Ожидаю пока идет преобразование
rjmp _read_adc_wait
SBI ADCSRA,ADIF
#endasm
}
Но почему-то программа глючит, это выражается на выводе на LCD индикатор. Как только я
- убираю строку RCALL _read_adc, вывод на индикатор идет нормально: пропечатываются все 16 символов,
- возвращаю строку RCALL _read_adc, вывод на индикатор идет косячно, первые 8 символов выводятся, а остальные нет
Видимо во время ожидания окончания опроса ADC, что-то происходит?
Или я настройки портов I/O сделал не правильно?
Кстати кварц у меня внешний 4МГц, AREF и AVCC подключены через резистор 330 Ом к VCC, и непосредственно к лапам AREF и AVCC подключены два кондера 10мкФ и 0,1 (у меня плата разработана под AT90S4433 и с ним на этой плате все норм работает!).
Помогите плиз, откройте глаза слепому котенку???


