Показать сообщение отдельно
Старый 26.09.2009, 17:57   #298   
Форумец
 
Сообщений: 1,532
Регистрация: 19.02.2009
Возраст: 54
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от RN3QGA Посмотреть сообщение
Вот бы где взять описания команд мПАСА на русском, может книга какая есть?
mikroP основан на стандартном Паскале. В том же учебнике по Делфи расписаны команды Паскаля . А с английским лучше дружить.
Цитата:
Сообщение от RN3QGA Посмотреть сообщение
Попробовал раскомментировать строки компилятор выдает ошибку.
Пока не понял в чем дело.
Раскомментировать надо не строки, а только одну строку
Код:
//{$DEFINE LED_OA}  -> {$DEFINE LED_OA}
Цитата:
Сообщение от RN3QGA Посмотреть сообщение
При включении загорались сразу два сетодиода на GPIO1 и 2. и после отпускания кнопки тоже оставались гореть светодиоды.
Все правильно. Программа сделана под мою отладку. У меня светодиоды подключены анодами к GP, а катодами к земле, у Вас же аноды к + питания, катоды к GP, чтобы одновременно горел только 1 светодиод в Вашей схеме и надо раскомментировать строку.
Цитата:
Сообщение от RN3QGA Посмотреть сообщение
Решил попробовать сделать чтоб при включении ничего не горело и после отпускания кнопки ничего не горело. Вот добавил кусочек кода, наверное можно более изящно но все работает ОК.
Тут не про изящность надо думать, а про рациональность кода и работоспособность, пару замечаний, в коде вместо
Код:
GPIO.0:=1;
GPIO.1:=1;
GPIO.2:=1;
лучше зваписать
Код:
GPIO := 7;
Результат тот же, а в итоге код короче. Из кода в условии проверки нажатия кнопки без ущерба можно убрать все те же строчки GPIO.0:=1; GPIO.1:=1; GPIO.2:=1;, все равно сработают эти же строчки в начале цикла. Второе, пользоваться побитными операциями с портами, как с регистрами я бы поостерегся, порт - это не регистр и при обращении к нему происходит процедура Чтение - Модификация - Запись (про это можете прочитать на первых страницах этого топика).
В итоге я бы сделал так:
Код:
program P12F629Button_Svetic;
//{$DEFINE LED_OA}
var g: byte;
begin
//CMCON  := 7; // эту строку сейчас можно убрать, но на будущее надо держат в уме
TRISIO := 0x18;
{$IFDEF LED_OA}
GPIO   := 7;
{$ELSE}
GPIO   := 0;
{$ENDIF}
g := 1;
while true do
begin
if Button(GPIO, 4, 10, 0) then
begin
if g = 8 then g := 1;
{$IFDEF LED_OA}
GPIO := (not g) and 7;
Delay_ms(100);
g := g shl 1;
GPIO := 7;
{$ELSE}
GPIO := g;
Delay_ms(100);
g := g shl 1;
GPIO := 0;
{$ENDIF}
end;
end;
end.

Последний раз редактировалось petrd; 20.09.2010 в 10:06.
  Ответить с цитированием