РАДИОСХЕМЫ



СТАРЫЙ ФОРУМ

ФОРУМ НА ЭЛВО

РАДИОФОРУМЫ


СХЕМЫ И СТАТЬИ
  • БЛОГИ
  • НОВОЕ
  • СХЕМЫ
  • РАЗНОЕ
  • ТЕОРИЯ
  • ТЕЛЕВИДЕО
  • СВЕТОДИОД
  • МЕДТЕХНИКА
  • БЫТТЕХНИКА
  • ИЗМЕРИТЕЛИ
  • СПРАВОЧНИК
  • ТЕХНОЛОГИИ
  • РЕМОНТ СХЕМ
  • МОБИЛЬНИКИ
  • КОМПЬЮТЕРЫ
  • НАЧИНАЮЩИМ
  • ЗАРЯДКИ И АКБ
  • СИГНАЛИЗАЦИИ
  • АУДИОТЕХНИКА
  • АВТОВЕЛОМОТО
  • БЛОКИ ПИТАНИЯ
  • РАДИОПРИЁМНИКИ
  • МЕТАЛЛОИСКАТЕЛИ
  • МИКРОКОНТРОЛЛЕР
  • РАДИОПЕРЕДАТЧИКИ


    • Страница 1 из 1
    • 1
    Архив - только для чтения
    Программа для PIC (нажатие кнопки)
    Сб, 17.10.2015, 11:41 | Сообщение # 1        
    kolya2014ponomarev
    аватар
      Постов: 1   ОК 
    Здравствуйте, недавно начал заниматься программированием платы PIC16F877. Написал программу по выбору одной из двух кнопок, одна - включает светодиод, другая - звук, но к сожалению, данная программа не работает(программа компилируется, но после загрузки ни одна из кнопок не работает). Один из портов (PORTB.F0) при этом аналоговый и не знаю как перевести его в цифровой. Плата pic16f877.
    Помогите пожалуйста с решением данной проблемы.
    Вот сама программа:

    void main()
    {
    TRISB=0x00;
    TRISB.F0=1;
    TRISA.F4=1;
    TRISB.F3=0;
    Sound_Init(&PORTC,0);
    while(1)
    {
    for(;;)
    if(!PORTA.F4)
    PORTB.F3=1;
    }
    {
    for(;;)
    if (!PORTB.F0)
    sound_play(10,10);
    }
    }
    Сб, 17.10.2015, 13:22 | Сообщение # 2        
    Витинари
    аватар
      Постов: 1503   Друзья 
    kolya2014ponomarev, так как не указано, какой именно вариант языка Си использовался, прокомментировал основные ошибки.

    Во-первых, направление портов указано только для порта B (и то, все - выходы). Порт F просто не знает, что на нем должна быть кнопка (она указывается как вход, т.е. состояние соответствующего бита на TRISA должно быть равно 1). Во-вторых, знаете ли, что значит "TRISB=0x00" и ей подобные команды, и знаете ли, вообще, как расшифровывается "0x00"?
    В-третьих:

    void main()
    {

    TRISB=0x00;
    TRISB.F0=1;
    TRISA.F4=1;
    TRISB.F3=0;
    Sound_Init(&PORTC,0);
    while(1) // бесконечный цикл, здесь все правильно
    { // начало блока цикла
    for(;;) // а тут цикл в цикле! здесь программа наглухо виснет
    if(!PORTA.F4) // PORTA не знает, что на нем есть входы
    PORTB.F3=1;
    } // внезапно заканчивается блок цикла while
    { // неизвестно откуда взявшаяся фигурная скобка
    for(;;) // еще один цикл в цикле. Но программа уже висит на предыдущем
    if (!PORTB.F0) // а PORTB знает, что на нем только выходы
    sound_play(10,10);
    } // что закрывает этот блок - не известно.
    }
    • Страница 1 из 1
    • 1
    Поиск:

    Внимание! Форум переехал на Tehnodium.ru



    © 2010-2022 "Форум Радиосхемы". All Rights Reserved  Почта  PDA