реклама на сайте
подробности

 
 
> не заводится 89c2051
__Alexander
сообщение Jul 18 2007, 10:11
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 76
Регистрация: 18-07-07
Из: Киев
Пользователь №: 29 202



Программа написана в Keil. HEX прошивается. На плате молчит.
Могут ли быть какие-то настройки в Keile или в софте программатора чтобы дать ему не включиться?

По Debug программа работает. (И даже в протеусе rolleyes.gif ).
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
__Alexander
сообщение Jul 18 2007, 11:17
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 76
Регистрация: 18-07-07
Из: Киев
Пользователь №: 29 202



Есть кондеры возле кварца и резюк с кондером на сброс именно таких номиналов. Писал в Keile на С, прошивается универсальным "заводским" программатором.
Может надо не HEX прошивать, хотя херня все это...

И еще вопросик. Я так понимаю у них нет как в АВР регистра направления порта (вход/выход)?
И по умолчанию на них присутсвуют логические единицы?

Правильно ли я понимаю принцип работы портов:

P1 = 0xFF; // Единицы на всех выводах порта

P1_1 = 1; // Единица на первом бите порта 1
P1_1 = 0; // Ноль на первом бите порта 1

if (P1_1 == 1) // Проверить есть ли единица на первой ноге порта 1
{}


if (P1_1 == 0) // Проверить есть ли ноль на первой ноге порта 1
{}


Че-то тут не так.
Go to the top of the page
 
+Quote Post
ALexx
сообщение Jul 20 2007, 07:55
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 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;}


Таким образом вы оперируете с понятными Вам именами, и при необходимости изменить вывод порта это изменение проводится один раз в секции описания, а не по всей программе.

И еще... Одна из самых частых ошибок новичков: Отсутствие замкнутого цикла в основной функции. Если это цикл отсутствует, то, естественно, программа "работать не будет" 05.gif Хотя в симуляторе один проход программы в пошаговом режиме отрабатывает "на ура" :-)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th August 2025 - 06:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.0136 секунд с 7
ELECTRONIX ©2004-2016