Перейти к содержанию
    

bragol

Участник
  • Постов

    27
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о bragol

  • Звание
    Участник
    Участник
  1. Вот расположение этой переменной: X:031AH PUBLIC pCompareFl она формируется из массива, который в дальнейшем объединяется в переменную типа флоат X:02D3H PUBLIC pCompare * * * * * * * X D A T A M E M O R Y * * * * * * * XDATA 0000H 027FH UNIT _XDATA_GROUP_ XDATA 027FH 00AFH UNIT ?XD?MAIN XDATA 032EH 000BH UNIT ?XD?ALPHABETLCD нас интересует область MAIN
  2. модель памяти именно LARGE Затирается конкретная переменная типа флоат, она не в массиве и указатели не используются в программе вообще
  3. это понятно, но не понятно почему это происходит, когда я в память не лезу, компилятор все делает сам и главное, как это исправить? не помогло. Еще есть такая закономерность, когда происходит "нахлест", то перезаписывается конкретная переменная типа флоат, которая по дефолту равно 1, причем записываются в нее те самые иероглифы, но как только я через меню переписываю ее значение, то программа начинает работать корректно
  4. Микроконтроллер AD89C51RD2, 64 КБ встроенной памяти, 1792 Б XRAM. Есть к нему прошивка в несколько тысяч строк, вот ее габариты: "Program Size: data=76.5 xdata=820 code=38246". Проблема возникает именно с областью памяти xdata. В программе есть переменные, которые я записываю в эту область памяти типа: float xdata ppk2K72 = 0.9843; float xdata ppk2K73 = 0.99698; float xdata ppk2K61 = 0.99596; float xdata ppk2K62 = 0.99849; Таких переменных больше 100 и их обязательно надо хранить в памяти. Так вот пока эти переменные были закоментированны и не забивали память, программа работала корректно, но как только пришло время их использовать, я перепрошил свое устройство, то появились явные глюки, связанные с переполнением памяти. Программа выводит на дисплей хаотичные символы из памяти, перезаписывает некоторые другие переменные неправильными значениями... Глюк пропадает, когда я освобождаю область памяти XDATA, который у меня настроен на максимальный объем памяти: void initialization() { EA = 1; // enable interrupts CKRL = 0xFF; //Clock Reload Register for calculating core frequency CKCON0 = 0x01; // X2 mode for all peripherals CKCON1 = 0x00; // X2 for SPI AUXR |= 0x10; // XDATA = 1792 IPH0 = 0x00; // низкий уровень прерываний для всей переферии IPL0 = 0x00; //********** UART Mode 1 (8 bit) with int_BRD PCON |= 0x80; // SMOD1 = 1 SCON = 0x50; // uart in mode 1 (8 bit), REN=1 BDRCON &= ~0xEC; // BRR=0; SRC=0; BDRCON |= 0x0E; // TBCK=1;RBCK=1; SPD=1 BRL = 0xB8; // 9600 Bds at 11.092MHz ES = 1; // Enable serial interrupt BDRCON |= 0x10; // Baud rate generator run TI = 0; RI = 0; }
  5. Что неужели ни у кого схожих проблем не было??? Многократно все перепроверил...
  6. выше я немного ошибся на терминал все-таки выводятся нули, а 0х0FFF только в кейловском симуляторе. И еще вряд ли это от МК, проверил на 2-ух разных результат один и тот же, но и на программу грешить не могу, потому что за основу брал исходники производителей
  7. На терминал ничего не выводится, в симуляторе либо одни нули, чего судя по всему быть не может, либо 0х0FFF если программно подключаю Vref 2,5V. Такой результат и в первом и во втором варианте, по сути АЦП вообще ничего не делает, иначе на терминал выводилось бы 0х0FFF при подключенном опорном напряжении или нечто стремящееся к нулю, второй день уже бьюсь пробовал и в режиме разового преобразования и в режиме постоянного. Может быть что на МК АЦП не работает??? Я понимаю, что скорее всего где-то я ошибся и этот вариант можно рассматривать самым последним, но все равно мне просто интересно может ли на МК выйти из строя какой-то один блок, а не весь целиком. И еще такой немаловажный момент, я ради интереса скачал программу с сайта производителя на мой адук814 с разовым преобразованием и при ее запуске диод вместо того, чтоб мигать просто постоянно горит, да и вольтметром проверяли, он показывает постоянное напряжение, а должен скакать, получается, что у них тоже неправильная программа??? Что на мой взгляд маловероятно
  8. Работа с АЦП на МК ADuC814

    Пишу пробный вариант программы для работы с АЦП (1) Настройка последовательно порта для вывода результатов преобразования (2) Настройка регистров АЦП (3) Произвести преобразование (4) Вывести результат на UART На реальной микросхеме почему-то не работает пробовал и стандартные методы, за основу которых взяты примеры с сайтов производителей и через прерывания пробую, тоже не выдает данные на гипер терминал Вот через прерывание: #include <ADUC814.H> #include <stdio.h> sbit BLINK = P3^3; void pause (int i) { while ( i > 0 ) --i; } void ADC_int () interrupt 6 { printf("\n%02BX%02BX\n", ADCDATAH, ADCDATAL); return; /* while (ADCCON3 & 0x80); BLINK = ~BLINK; if(ADCDATAL != 0 || ADCDATAH != 0) printf("We Have Some DATA!"); pause(10000);*/ } void main (void) { int CHAN = 0; // unsigned char chan_2_convert; /*----------------------------------------------- Configure the serial port to run at 9600 Baud. -----------------------------------------------*/ PCON = 0x80; PLLCON = 0x30; SCON = 0x50; TMOD |= 0x20; TH1 = 0xF7; TR1 = 1; TI = 1; /*----------------------------------------------- Configure the A/D to sequentially convert each input channel. -----------------------------------------------*/ ADCCON1 = 0x80; ADCCON2 = CHAN; EA = 1; EADC = 1; while (1) { SCONV = 1; BLINK = ~BLINK; pause(10000); } } Вот другим способом, тут пытался подать напряжение Vref, программно: #include <ADUC814.H> #include <stdio.h> void pause (int i) { while ( i > 0 ) --i; } void main (void) { unsigned char chan_2_convert; /*----------------------------------------------- Configure the serial port to run at 9600 Baud. -----------------------------------------------*/ PCON = 0x80; PLLCON = 0x30; SCON = 0x50; TMOD |= 0x20; TH1 = 0xF7; TR1 = 1; TI = 1; /*----------------------------------------------- Configure the A/D to sequentially convert each input channel. -----------------------------------------------*/ ADCCON1 = 0x80; ADCCON2 = 0x1C; while (1) { unsigned int conv_val; /*----------------------------------------------- Start a conversion and wait for it to complete. -----------------------------------------------*/ chan_2_convert = 0;// (chan_2_convert + 1) % 6; // ADCCON2 = (ADCCON2 & 0xF0) | chan_2_convert; SCONV = 1; while (ADCCON3 & 0x80); pause(10000); /*----------------------------------------------- Read A/D data and print it out. ---------------------------------------------*/ conv_val = ADCDATAL | ((ADCDATAH & 0x0F) << 8); printf ("ADC Channel %bu = 0x%4.4X\r\n", chan_2_convert, conv_val); } } В чем может быть моя ошибка?
  9. MCS-51

    Нашел 7-ую версию, работает корректно и исправно, ниже ссылка, если вдруг кому-нибудь понадобится ftp://ftp.analog.com/pub/MicroConverter/ADuC8xx/WSD/ ЗЫ И какие же подводные камни меня ждут? О каких проблемах речь идет? Мне эта информация необходима для дальнейшего общения с начальством, так что буду благодарен за предоставленную информацию.
  10. MCS-51

    EdSim51 это симулятор 51 МК, я спрашивал про его возможность "воспринимать" hех файлы скомпилированные именно из Си кода, так как hех файлы, скомпилированные из ассемблерного кода он запускает корректно. http://www.edsim51.com/ --- Вот о чем речь идет
  11. MCS-51

    Кто-нибудь использовал EdSim51? Если писать на ассемблере, то он корректно воспринимает код и делает то, что я хочу, но когда пытаюсь в него загрузить нех файл созданный с помощью кейла или SDCC, то он собственно не пашет и странным образом зацикливает прогу, вот пример рабочего кода ассемблера и не рабочего Си, прога элементарная, в качестве примера на дисплее выводит1 -> 2 -> 3 в цикле:
  12. MCS-51

    Я же выше сказал уже: проблемы с родным языком, если конечно он для него родной... человек не воспринимает чужие посты и просьбы не засорять тему, и вы тоже не воспринимаете, но вам "простительно" Модераторам огромная просьба почистить тему от всех постов, не касающихся специфики темы. Здесь вообще есть модераторы??? Я бы ЛС отправил, так быстрей бы все сделали
  13. MCS-51

    У меня начинает складываться такое мнение, что с изучением языков программирования, вы стали забывать свой родной язык... Если не хотите или не можете отвечать на поставленные вопросы, не отвечайте вообще, из-за ваших ответов не по теме теряется общий смысл :bb-offtopic: Огромная просьба к модераторам, если Вас не затруднит, почистите пожалуйста тему. С Ув.
  14. MCS-51

    А есть у кого-нибудь программа Windows Serial Downloader более свежая? Моя версия 6.7 под ХР вылетает раз по 10 подряд пред тем как корректно запуститься? Смотрел на сайте Analog devices что-то не нашел... 2 scifi и sergeeff Я сразу сказал, что я только набираюсь опыту и на плюсах ничего серьезней реализации различных алгоритмов не писал. А вы продолжайте острить, если не можете сказать, что-нибудь по делу, интернет дает вам такую возможность...
  15. MCS-51

    Вы правы, спасибо за комментарий по делу Я кстати ошибся с МК, тут у меня используют 814...
×
×
  • Создать...