|
|
  |
не заводится 89c2051 |
|
|
|
Jul 18 2007, 10:11
|
Частый гость
 
Группа: Участник
Сообщений: 76
Регистрация: 18-07-07
Из: Киев
Пользователь №: 29 202

|
Программа написана в Keil. HEX прошивается. На плате молчит. Могут ли быть какие-то настройки в Keile или в софте программатора чтобы дать ему не включиться? По Debug программа работает. (И даже в протеусе  ).
|
|
|
|
|
Jul 18 2007, 11:08
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 12-06-07
Пользователь №: 28 387

|
Цитата(__Alexander @ Jul 18 2007, 13:11)  Программа написана в Keil. HEX прошивается. На плате молчит. Могут ли быть какие-то настройки в Keile или в софте программатора чтобы дать ему не включиться? По Debug программа работает. (И даже в протеусе  ). Какие там могут быть настройки в Keile? Да и фьюзов то в этом МК нету... Какой ещё Debug в 2051? Это на компе отлаживаете? Я начинал свой путь с 2051 и сейчас ей не брезгую, пишу всё на асме. А по существу - у Вас конденсаторов нету возле кварца. Угадал? по 20-40 пФ на землю. Или ресет неправильно сделали. С 1-ой ноги 8,2кОм на землю и 10 мкФ на +5В. Ну что ещё? другой экземпляр микросхемы пробовали? програмировали с верификацией/определением или просто? Чем програмировали? Как судите о неисправности платы? по ком-порту данные не передаются? светодиоды не моргают? Не мешало бы проект в студию. или схему хотя-бы. Или будем продолжать из пустого в порожнее?
|
|
|
|
|
Jul 18 2007, 11:26
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 12-06-07
Пользователь №: 28 387

|
С си, а уж тем более с кейлом не связывался ниразу, обьясню по простецки, по нашему. В 2051 действительно нету регистра направления, но это реализуется очень просто: если нога работает на ввод данных, то на неё нужно установить еденицу (на асме SETB P1.4 например). Если Вы новичок в этом деле, то лучше написать моргалку светодиодов вначале, а то некоторые в начале творческого пути понаподключают индикаторов, ком-портов и внешней памяти, а потом трубят в форуме, мол НИРАБОТАЕТ...
|
|
|
|
|
Jul 20 2007, 07:55
|

Местный
  
Группа: Свой
Сообщений: 243
Регистрация: 22-09-04
Из: Burbach, Germany
Пользователь №: 704

|
Цитата(__Alexander @ Jul 18 2007, 14:17)  Есть кондеры возле кварца и резюк с кондером на сброс именно таких номиналов. Писал в Keile на С, прошивается универсальным "заводским" программатором. Может надо не HEX прошивать, хотя херня все это...
И еще вопросик. Я так понимаю у них нет как в АВР регистра направления порта (вход/выход)? И по умолчанию на них присутсвуют логические единицы?
Правильно ли я понимаю принцип работы портов:
P1 = 0xFF; // Единицы на всех выводах порта
P1_1 = 1; // Единица на первом бите порта 1 P1_1 = 0; // Ноль на первом бите порта 1
if (P1_1 == 1) // Проверить есть ли единица на первой ноге порта 1 {} if (P1_1 == 0) // Проверить есть ли ноль на первой ноге порта 1 {} Че-то тут не так. Если Вы пишете в Кейле, то вызывают сомнение некоторые приведенные Вами конструкции. 1) P1 = 0xFF; // Единицы на всех выводах порта - это правильно 2) Вместо P1_1 = 1; должно быть P1^1 = 1; или еще один способ: P1&=0x02; 3) if (P1_1 == 1) - не правильно. Должно быть if (P1^1 == 1) или просто if (P1^1), или if(P1&0x02) if (P1_1 == 0) - не правильно. Должно быть if (P1^1 == 0) или просто if (! P1^1) или if(!(P1&0x02)) А вообще. что касается битов, удобнее и красивее описывать их в начале программы, давая им осмысленные имена. Вот так: Где-то в начале программы: Код // Сигналы связи с контроллером sbit LOD=P1^3; sbit CLK=P3^2; sbit DTA=P3^0; Где-то в теле программы проверяем бит LOD и в зависимости от его состояния выставляем значения на битах DTA и СLK Код if(LOD){ DTA=1; CLK=0;} else { DTA=0; CLK=1;} Таким образом вы оперируете с понятными Вам именами, и при необходимости изменить вывод порта это изменение проводится один раз в секции описания, а не по всей программе. И еще... Одна из самых частых ошибок новичков: Отсутствие замкнутого цикла в основной функции. Если это цикл отсутствует, то, естественно, программа "работать не будет"  Хотя в симуляторе один проход программы в пошаговом режиме отрабатывает "на ура" :-)
|
|
|
|
|
Jul 20 2007, 09:13
|
Частый гость
 
Группа: Свой
Сообщений: 123
Регистрация: 13-12-05
Из: Украина, Тернополь
Пользователь №: 12 161

|
Цитата(__Alexander @ Jul 18 2007, 14:17)  Может надо не HEX прошивать, хотя херня все это... У меня в програматоре (FlexPRO) необходимо прошивать BIN-файлом (генерируется из НЕХ файла декодером). Цитата P1 = 0xFF; // Единицы на всех выводах порта ... Че-то тут не так. Советую начать со следующей програмы: #include <REG2051.H> void main(void) { while(1) { P1++; } }Запрограмируйте контроллер и посмотрите осцилографом на віводах порта Р1, увидите меандр на каждом выводе (при рабочем апаратном обеспечении). Если не увидите меандра то разбирайтесь с железом.
|
|
|
|
|
Jul 20 2007, 13:06
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(__Alexander @ Jul 18 2007, 15:17)  ....Может надо не HEX прошивать, хотя херня все это... И еще вопросик. Я так понимаю у них нет как в АВР регистра направления порта (вход/выход)? И по умолчанию на них присутсвуют логические единицы? ... 1) прошиваете хекс.. 2) регистра направленности нет.. 3) не логическая единица, а ЗЭТ состояние...иначе Вы не сможете обеспечивать внешнее чтение  хотите единичку - обеспечте внешние резисторы...обычно не учтённый именно этот нюанс - является причиной многих бед.. 4) входа компаратора отличаются от других... если не хватит кристалла - следующий 4051...точно такой же но побольше флэш... удачи Вам (круглый)
Сообщение отредактировал kolobok0 - Jul 20 2007, 13:07
|
|
|
|
|
Jul 20 2007, 15:48
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 12-06-07
Пользователь №: 28 387

|
Цитата(kolobok0 @ Jul 20 2007, 16:06)  4) входа компаратора отличаются от других... Да, это грабли, которые многих подстерегают в начале пути! А именно начинают вешать периферию на выводы P1.0 и P1.1 (12 и 13 выв.), не подтянув их к +5В с помощью 10 кОм. Сам когда-то наткнулся. P.S. Что то мне здаётся, что автор уже забыл про свой топик, а мы тут разводим теории. Кто что ещё знает про 2051  Эх, где те времена...
|
|
|
|
|
Jul 20 2007, 17:35
|
Частый гость
 
Группа: Участник
Сообщений: 76
Регистрация: 18-07-07
Из: Киев
Пользователь №: 29 202

|
Мда ребята, спасибо за советы, но скорее я тут похож совершенно на ламера, если мне рекомендуют правильную обвязку МК, даже включая подтяжку на компаратор. Перед тем как писать программу, я железо проехал по нескольку раз. И все, что вы мне советовали уже было давано припаяно, причем на заводской плате. А спрашивал я исключительно о софте, то ли программера, то ли кейла. И вот какой должен был быть ответ. Херня конечно, но в Кейле надо было установить: Memory Model: Small Code Rom Size: Small Но! Вылезла прога за 2К. И пришлось еще в вкладке С51 устанавливать флажки: Linker Code Packing Don`t use absolute register accesses (кто знает подскажите, что происходит при выполнении в регистрах проца при этом) И вот собссно и все. Прога (чес слово) заработала сразу и на ура! Вот это все, что я и хотел услышать. Но, для себя я думаю, прога на 50 строк, где есть один таймер с обработкой по прерыванию, свитч на 8 позиций и обработка одной клавиши, при этой конфигурации кейла занимает 1.8К (при контроллерной памяти в 2К) - это жопа. При написании на ИАРе на 2313 (тоже 2К) у меня намного больше влазило, из это вывод, кейл - гавно (про оптимизацию кода не напоминать). Разве что писать на асме. P.S. Еще раз спасибо всем ответившим. P.S.S. Автор темы не забыл что он ее создал P.S.S. P1^x - не канает почему-то, только P1_x.
|
|
|
|
|
Jul 20 2007, 19:11
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 12-06-07
Пользователь №: 28 387

|
Это хорошо, когда всё получается! Но кейл в основном хвалят. Как по мне, так несерьёзные проекты (типа поморгать светодиодом или считать данные с датчика) лучше писать на асме. Оптимизация - почти 100%, это смотря уже как написать. За это я и не взлюбил си Но вы не расстраивайтесь, ведь за каждой неудачей скрывается гора опыта. Нужно только не сдаваться!
|
|
|
|
|
Jul 25 2007, 15:21
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(Angelborn @ Jul 20 2007, 23:11)  Это хорошо, когда всё получается! Но кейл в основном хвалят. Как по мне, так несерьёзные проекты (типа поморгать светодиодом или считать данные с датчика) лучше писать на асме. Оптимизация - почти 100%, это смотря уже как написать. За это я и не взлюбил си Но вы не расстраивайтесь, ведь за каждой неудачей скрывается гора опыта. Нужно только не сдаваться! добавлю... и серьёзные проекты на азме писать одно удовольствие...потому как азм - is-as что написал то и сам дурак  )) удачи Вам (круглый)
|
|
|
|
|
Jul 26 2007, 13:42
|

Местный
  
Группа: Свой
Сообщений: 243
Регистрация: 22-09-04
Из: Burbach, Germany
Пользователь №: 704

|
Цитата(__Alexander @ Jul 20 2007, 20:35)  Но, для себя я думаю, прога на 50 строк, где есть один таймер с обработкой по прерыванию, свитч на 8 позиций и обработка одной клавиши, при этой конфигурации кейла занимает 1.8К (при контроллерной памяти в 2К) - это жопа. При написании на ИАРе на 2313 (тоже 2К) у меня намного больше влазило, из это вывод, кейл - гавно (про оптимизацию кода не напоминать). Разве что писать на асме. Зря Вы так о "Дедушке Кейле".... Вот, например: AT89C2051. Два внешних прерывания и таймер с соответствующими обработчиками, декодирование информации и управление 4-мя драйверами ЖКИ (16 символов), контроль температуры по 1-Wire(DS18B20). Это все на С. Получаем после компиляции: Код linking... Program Size: data=78.0 xdata=0 code=1687 creating hex file from "3LineLCD(x51)"... "3LineLCD(x51)" - 0 Error(s), 0 Warning(s).
|
|
|
|
|
Aug 14 2007, 08:26
|
Профессионал
    
Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368

|
Цитата(__Alexander @ Jul 20 2007, 20:35)  Но, для себя я думаю, прога на 50 строк, где есть один таймер с обработкой по прерыванию, свитч на 8 позиций и обработка одной клавиши, при этой конфигурации кейла занимает 1.8К (при контроллерной памяти в 2К) - это жопа. При написании на ИАРе на 2313 (тоже 2К) у меня намного больше влазило, из это вывод, кейл - гавно (про оптимизацию кода не напоминать). Разве что писать на асме. ИМХО Вообще-то в Кейле очень неплохая оптимизация. Я наоборот когда с ИАРа в Кейл переводил свои проги то код с 8кб уменьшился до 6кБ. надо только посмотреть какой уровень оптимизации выставлен по умолчанию - там помоему от 0 до 9. Плюс оптимизацию по скорости или по размеру тоже надо выбрать. Конфигурация кейла, которая линкуется с любой вашей программой всего лишь находится в файле START.A51 если не ошибаюсь - посмотрите его для вашей Small модели - там же ничего нет. Только цикл очистки регистров и оперативной памяти. Все вместе занимает не более 150 байт Кода. Так что я бы вам посоветовал еще раз прогнать программу в отладчике и в подозрительных местах раскрыть код, чтоб увидеть ассемблерную интерпретацию - и тогда легко можно будет увидеть, где Кейл генерит плохой код и ему надо помочь. А со временем после нескольких таких проверок сами научитесь писать "легкий" для компилятора код.
|
|
|
|
|
Aug 14 2007, 12:50
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 12-06-07
Пользователь №: 28 387

|
Ребята, а как в кейле посмотреть асм-файл после компиляции. Он у меня не создаётся. Кейл 3 версии (8.08). В настройках не нашёл это.
|
|
|
|
|
Aug 14 2007, 14:36
|
Профессионал
    
Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368

|
Цитата(Angelborn @ Aug 14 2007, 15:50)  Ребята, а как в кейле посмотреть асм-файл после компиляции. Он у меня не создаётся. Кейл 3 версии (8.08). В настройках не нашёл это. Файл с асмовским листингом создается - это фай с расширением LST. Только там еще куча всякой другой фигни. Если нету - наде все галочки на закладке Output в опциях проэкта повключать. Можно в отладчике запустить программу и нажать там на иконку Dissasembly window. Тогда он покажет окно окно с асмом и даже соответсвие инструкций на С с асмовскими. Только в опциях проэкта надо включить "Browse information".
Сообщение отредактировал syoma - Aug 14 2007, 14:47
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|