Всем привет. Написал код на Си по выдачи данных с АЦП на UART. Тоесть к ADC0, ADC1, ADC2 подключены потенциометры в 1кОм, при прокручивании сопротивления одного из них сыплются данные в virtual terminal-e(значения от 0 до 255). На реальном железе все работает отлично: данные приходять, можно посмотреть в виде графика через terminal v1.9b, отправить номер канала от 0 до 2 и данные будут сыпаться. Попробывал через Proteus 7.7 sp3 и просто сел.
При запуске сразу сыплется целая куча сообщений каждую секунду около 700, предупреждения вида
PC=0x01BC. (AVR AD CONVERTER) Reference value = 0. U1 и секунды операци. При просмотре сообщения:
"cannot find source code at address '000001BC'.
this may be because the CPU has no source window, or because it is execution library or runtime code for which no debug data is present".
Скорее всего это из-за того что в программе используются работа чисто только на прерываниях, тоесть в основном цикле кода фактически нет.
Код: Выделить всё
int main (void)
{
USART_Init();
link = adcch;//Назначаем ссылки объект ее работы(массив)
asm("sei");//Прерывание не вызываются
ADCSRA = (1<<ADEN)|(1<<ADIE)|(1<<ADSC)|(0<<ADATE)|(3<<ADPS0);
UDR = 1;
while(1)//ЗДЕСЬ ПУСТО
{
}
}
Но вопрос ни в этом а в том как сделать, если это возможно, чтобы программа в Proteuse работала почти также быстро как и на железе? Дело в том что как я думаю из-за этих сообщении 1 секунда работы реального времени загружается несколько минут в PROTEUS-E и данные еле-еле передаются в virtual terminal. Естественно этот процес занимает огромное кол-во времени и загрузка проца достигает 90%.
Проект с прошивкой и проектом в