Цитата(__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;}
Таким образом вы оперируете с понятными Вам именами, и при необходимости изменить вывод порта это изменение проводится один раз в секции описания, а не по всей программе.
И еще... Одна из самых частых ошибок новичков: Отсутствие замкнутого цикла в основной функции. Если это цикл отсутствует, то, естественно, программа "работать не будет"

Хотя в симуляторе один проход программы в пошаговом режиме отрабатывает "на ура" :-)