#include <mega8.h>
#include <lcd.h>
#include <delay.h>
#include <stdio.h>
#include <stdlib.h>
#define ADC_VREF_TYPE 0x00
#define V 5
// Инициализация LCD
#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
//Функция для работы с АЦП
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(10);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
void main(void)
{
char acpread[5];
char acptry[5];
int j;
PORTB=0x00; //скорее всего нужно настроить на вывод
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00; //Регистр управления таймером
TCNT0=0x00; //Счетный регистр
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00; //Регистр сравнения
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00; //Регистр таймера в ассинхроном режиме
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
TIMSK=0x00; //Разрешение и запрет прерываний по таймеру
UCSRA=0x00; //Регистры управления и состояни
UCSRB=0x18; //Регистры управления и состояни
UCSRC=0x86; //Регистры управления и состояни
UBRRH=0x00; //Регистры ввода-вывода
UBRRL=0x4D;
ACSR=0x80;
SFIOR=0x00;
ADMUX=ADC_VREF_TYPE & 0xff; //Регистр управления мультиплексером
ADCSRA=0x85; //Регистр управления АЦП
lcd_init(16); // Инициализация ЖК
while (1)
{
itoa(read_adc(1), acpread);
acptry = acpread*V/1024;
j = 0; //цикл для вывода значения с фотодатчика
lcd_gotoxy(0,0);
while(j<3){
lcd_putchar(acptry[j]);
delay_ms(200);
j++;
}
}
};
Error: the expression must be a modifiable lvalue
При компиляции возникает ошибка:
Error: C:\CDAVR\KRR.c(73): the expression must be a modifiable lvalue
Хотя буквально год назад компилировал вроде как этот же код, и все проходило гладко. А сейчас достал его, и не могу понять где ошибка.
Код:
где эта 73 строка, на которую ругается?
Код:
acptry = acpread*V/1024;
Чисто для антереса, а что вы пытаетесь делать в той самой строчке?
Цитата: Nosaer
Извините, привык что строки в теге <code></code> номируются.
Код:
acptry = acpread*V/1024;
Ну так естественно, что будет ошибка. Нельзя менять массивный указатель - он константен.
Можно создать отдельный указатель типа char*, и скопировать туда адрес.
Вообще, массивы, объявленные как type array[]; физически указателя не содержат.
Просто компилятор подставляет адрес первого элемента массива на стадии компиляции,
если имя массива без индекса используется в выражениях.
Цитата: Ramon
Чисто для антереса, а что вы пытаетесь делать в той самой строчке?
Есть подозрение, что совсем не то, что было задумано. :)
Программа опрашивает фотодатчик и выводит значение на жк.