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

 
 
> Не работает прибавление 1 к переменной при нажатии на кнопку
loghir
сообщение May 9 2011, 06:05
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 13-03-11
Пользователь №: 63 577



Доброго времени суток!
Всех с Днем Победы! Желаю чтобы агрессивные политики воевали только в парламентах по мордам друг друга!

биты конфигурации задаю вручную, RA0 сидит на +5В через резистор 4к7, кнопка на "массу", МК - pic16f72.
Срабатывание кнопки гарантировано доходит до RA0 (мерял на выводе). При "ручной" записи в порт через переменную индикация работает нормально.

Код
#include <pic.h>

#define knopka_start RA0
#define all_1 RC4
unsigned char time1 = 0;

void podgot (void)
{
ADCON1 = 0x07;
TRISA = 0b111111;
TRISB = 0b00000000;
TRISC = 0b00000000;
RBPU = 0;
PORTA = 0;
PORTB = 0b11111111;
PORTC = 0b11111111;
}

const unsigned char arr_seg [10] =
{
/* начало массива
0bABCDEFGH <– расположение сегментов по битам */
0b00000011, // «0» !
0b10011111, // «1» !
0b00100101, // «2» !
0b00001101, // «3» !
0b10011001, // «4» !
0b01001001, // «5» !
0b01000001, // «6» !
0b00011111, // «7» !
0b00000001, // «8» !
0b11110111, // «9» !
};

void main (void)
{
podgot();
all_1 = 0;
PORTB = arr_seg [time1];
if (knopka_start == 0);
{
time1 = time1 + 1;
}
}


Сообщение отредактировал loghir - May 9 2011, 06:05
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
loghir
сообщение May 11 2011, 18:29
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 13-03-11
Пользователь №: 63 577



Цитата
Tак как у PIC'ов ног мало, а функций и переферии относительно много, каждая нога может быть по разному переопределена. Ясно где дальше копать?

Спасибо за подмказку, но этим уже озаботился: http://electronix.ru/forum/index.php?showtopic=89769
команда
Код
ADCON1 = 0x07;

отключает АЦП. Вывод работает как линия порта, я проверял.
Цитата
Кстати, что за компилятор пользуете?

PICC 8.05pl2 из MPLAB IDE 8.30

Я тут наваял код:
Код
...
bit DDF = 0;             // переменная "защелка", чтобы на счетчик прошел только один "0".
bit knopka_prev = 0;     // переменная для запоминания состояния кнопки
...
void init (void) // настройка TMR1 для 0.3 сек
{
// Prescaler=1:2; TMR1 Preset=0; Freq=30,51758Hz; Period=32 768 000 ns
GIE = 1;         // разрешены все немаскированные прерывания
// регистр T1CON
T1CKPS1 = 0;    // выбор коэфф. деления предделителя
T1CKPS0 = 1;    // выбор коэфф. деления предделителя
T1OSCEN = 1;    // выключить внутренний тактовый генератор модуля TMR1
TMR1CS  = 1;    // 1 - выбран внешний (0 - внутренний, Fosk/4) источник тактового сигнала модуля TMR1
TMR1H = 0x0;     // preset for timer1 MSB register
TMR1L = 0x0;     // preset for timer1 LSB register
}

void main (void)
{ // начало main
podgot();
all_1 = 0;
PORTB = arr_seg [time1];
knopka_prev = knopka_start; // значения "knopka_start" присваиваются "knopka_prev".
for(;;)
{ // начало бесконечного цикла
if((knopka_prev == 0) && (DDF == 0))  
    {
    DDF = 1; // активируем "защелку", чтобы на счетчик прошел только один "0".
    time1 = time1 + 1;
    PORTB = arr_seg [time1];
        while (DDF = 1) // выполняется пока величина () не станет ложной.
        {
        TMR1ON  = 1; // включить TMR1
        if (TMR2IF == 1) // ожидание появления флага прерывания по переполнению TMR1
            {
            TMR1ON  = 0; // выключить TMR1
            TMR2IF = 0;  // сброс флага прерывания по переполнению TMR1
            DDF = 0;     // условие для следующего срабатывания кнопки
            time1 = time1 + 1;
            PORTB = arr_seg [time1];
            }
        }
    }
} // конец бесконечного цикла
} // конец main

только толку - ноль. В прямом смысле: зажегся и не меняется!
Go to the top of the page
 
+Quote Post
xemul
сообщение May 11 2011, 20:22
Сообщение #3



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(loghir @ May 11 2011, 22:29) *
Я тут наваял код:
...
только толку - ноль. В прямом смысле: зажегся и не меняется!

У детёныша моих знакомых дизлексия с дизграфией в лёгкой форме. Понятно, что приключается оно от неспособности юноши младого сконцентрироваться на выполняемой задаче. Опять же понятно, что лечится оно вдумчивым чтением правильных книжек с пересказами и сочинениями.

Объясните, плз:
- с какой целью Вы задействовали TMR1?
- почему проверяете TMR2IF?
- где, по Вашему мнению, в цикле выполняется проверка кнопки?
- (ышо раз) чем отличается "while (DDF = 1)" от "while (DDF == 1)", и к каким последствиям приводит "while (DDF = 1)" в Вашей программе?

Пока Вы не ответите (хотя бы самому себе) на эти вопросы, двинуться дальше, имхо, не получится.

По поводу "рабочего кода": добавьте к рыбе в посте #9 свою инициализацию из исходной программы (не счёл нужным её повторять или править несуразности, не влияющие на скорость полёта) и проверку индекса массива, предложенную sergeeff, и будет Вам рабочий код, но без антидребезга (поэтому и было оно поименовано ГСЧ).
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- loghir   Не работает прибавление 1 к переменной при нажатии на кнопку   May 9 2011, 06:05
- - V_G   А вы когда-нибудь программы для микроконтроллеров-...   May 9 2011, 07:21
- - loghir   ЦитатаГде бесконечный цикл (у вас - ожидания нажат...   May 9 2011, 09:55
|- - xemul   Цитата(loghir @ May 9 2011, 13:55) не все...   May 9 2011, 12:18
- - V_G   Отжатие совместно с антидребезгом надо отрабатыват...   May 9 2011, 12:19
- - loghir   ЦитатаЕсли не помешает правильно интерпретировать ...   May 9 2011, 14:08
|- - sergeeff   Цитата(loghir @ May 9 2011, 18:08) забавн...   May 9 2011, 14:25
|- - xemul   Цитата(loghir @ May 9 2011, 18:08) Если б...   May 9 2011, 15:30
- - loghir   ЦитатаВся ваша программа - полное отсутствие поним...   May 9 2011, 15:10
|- - sergeeff   Цитата(loghir @ May 9 2011, 19:10) Чтобы ...   May 9 2011, 16:02
- - loghir   Цитата';' в С - не просто закорючка. Сомне...   May 9 2011, 16:45
|- - sergeeff   Цитата(loghir @ May 9 2011, 20:45) Спасиб...   May 9 2011, 17:05
|- - xemul   Цитата(loghir @ May 9 2011, 20:45) Спасиб...   May 9 2011, 19:09
- - V_G   Цитата(xemul @ May 10 2011, 06:09) Тогда ...   May 9 2011, 23:19
- - loghir   Тут не гадать, а пробовать надо: в другом "бу...   May 10 2011, 13:23
|- - sergeeff   Цитата(loghir @ May 10 2011, 17:23) Тут н...   May 10 2011, 14:10
- - loghir   sergeeff ЦитатаПростой вопрос. Вы уверены, что мож...   May 10 2011, 15:59
|- - sergeeff   Цитата(loghir @ May 10 2011, 19:59) Прочи...   May 10 2011, 17:10
- - sergeeff   Попробуйте простой тест: Кодvoid main (void...   May 11 2011, 19:14
- - loghir   Проверил код Кодvoid main (void) { podgot...   May 12 2011, 15:16
|- - xemul   Цитата(loghir @ May 12 2011, 19:16) после...   May 12 2011, 16:04
- - sergeeff   Кодif((knopka_prev == 0) && ...   May 12 2011, 15:37
- - loghir   Спасибо, уже убедился другим способом: Кодif(...   May 12 2011, 16:08
|- - sergeeff   Цитата(loghir @ May 12 2011, 20:08) Судя ...   May 12 2011, 16:39
- - RunneR2   Раз не работает с переобъявлением ноги, попробуйте...   May 12 2011, 17:36
- - loghir   Цитатанезнаю что у вас за компилятор, PICC 8.05pl2...   May 17 2011, 09:49
|- - sergeeff   Цитата(loghir @ May 17 2011, 12:49) Алгор...   May 17 2011, 10:13
- - loghir   1. Со сборкой программатора (пардон, 3-х программа...   May 17 2011, 15:51
|- - sergeeff   Цитата(loghir @ May 17 2011, 18:51) Один ...   May 17 2011, 16:42
- - loghir   Если бы нюансы! Неправильные схемы включения и...   May 22 2011, 16:05
|- - sergeeff   Цитата(loghir @ May 22 2011, 20:05) Если ...   May 22 2011, 16:08
- - loghir   ЦитатаВы предлагаете вам схемку на форуме спаять? ...   May 22 2011, 18:08
- - sergeeff   Цитата(loghir @ May 22 2011, 22:08) Я скр...   May 22 2011, 19:39


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 00:54
Рейтинг@Mail.ru


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