Можешь и не проверять , работать не будет ...misterkuk писал(а): Компиляция прошла успешно:) Завтра проверю на железе.
Програмирование pic на СИ.
Re: Програмирование pic на СИ.
- Реклама
-
misterkuk
- Мучитель микросхем
- Сообщения: 400
- Зарегистрирован: Сб апр 17, 2010 10:30:13
- Контактная информация:
Re: Програмирование pic на СИ.
dosikus писал(а):Можешь и не проверять , работать не будет ...misterkuk писал(а): Компиляция прошла успешно:) Завтра проверю на железе.
Re: Програмирование pic на СИ.
Дефайны лучше для удобства чтения подтягивать к инклюдам, сразу после них.misterkuk писал(а):Вот моя первая програма под схему http://www.labkit.ru/html/Assembler_for_PIC?id=356 Компиляция прошла успешно:) Завтра проверю на железе.Код: Выделить всё
#include <pic.h> __CONFIG (INTIO & UNPROTECT & LVPDIS & BOREN & MCLRDIS & PWRTEN & WDTDIS); #define knopka RB2 // кнопка void podgot (void); // подготовка МК void main (void) { podgot(); if (knopka = 0) PORTB = 0b01111111; } // === подготовка МК void podgot (void) { TRISA = 0b00000000; // направление работы ножек порта А TRISB = 0b11111111; // направление работы ножек порта В CMCON = 0x07; // отключение компараторов PORTA = 0; // очищаем порт А PORTB = 0; // очищаем порт Б RBPU = 1; // подтягивающие R (0-вкл, 1-выкл) }
Условие проверяется на равенство оператором ==, а не = (оператор присвоения)
Приучайся при модификации порта не трогать те выводы, которые заняты. В твоем случае это вход кнопки.
В твоем случае, судя по программе, ты не успеешь нажать кнопку после включения. Придется держать ее нажатой при подаче питания.
Попробуй сделать в цикле:
Код: Выделить всё
void main (void)
{
podgot();
for(;;)
{
if (knopka == 0)
PORTB |= 0b0000001;
else
PORTB &= 0b1111110;
}
}
С уважением,
Виктор.
Виктор.
-
misterkuk
- Мучитель микросхем
- Сообщения: 400
- Зарегистрирован: Сб апр 17, 2010 10:30:13
- Контактная информация:
Re: Програмирование pic на СИ.
Не пойму зачем нам отслежывать выход на индикатор? Я думал нужно отслежывать кнопку, тоесть RA2. Про равенство забыл. Виноват. И что такое Дефайны?:) Программа с изменением равенства не заработала:( В обед проверю с вашими исправлениями.ut1wpr писал(а): Дефайны лучше для удобства чтения подтягивать к инклюдам, сразу после них.
Условие проверяется на равенство оператором ==, а не = (оператор присвоения)
Приучайся при модификации порта не трогать те выводы, которые заняты. В твоем случае это вход кнопки.
В твоем случае, судя по программе, ты не успеешь нажать кнопку после включения. Придется держать ее нажатой при подаче питания.
И отслеживать состояние RB0 в зависимости от состояния кнопки.
Цель была такая- Нажимаем- горит
Бросаем тухнет.
А мочему вы в примере поставили |= и &= ?
Re: Програмирование pic на СИ.
я незнаю что они хотят доказать,и чем им ненравиться расположение дефайнов.misterkuk писал(а):Вот моя первая програма под схему http://www.labkit.ru/html/Assembler_for_PIC?id=356 Компиляция прошла успешно:) Завтра проверю на железе.Код: Выделить всё
#include <pic.h> __CONFIG (INTIO & UNPROTECT & LVPDIS & BOREN & MCLRDIS & PWRTEN & WDTDIS); #define knopka RB7 // кнопка void podgot (void); // подготовка МК void main (void) { podgot(); while(1) начало бесконечного цикла (внимательно читай самоучитель) { if (knopka == 0) PORTB0 = 1; else PORTB0 = 0; } //конец бесконечного цикла } //конец функции // === подготовка МК void podgot (void) { TRISA = 0b00000000; // направление работы ножек порта А TRISB = 0b10000000; // направление работы ножек порта В CMCON = 0x07; // отключение компараторов PORTA = 0; // очищаем порт А PORTB = 0; // очищаем порт Б RBPU = 1; // подтягивающие R (0-вкл, 1-выкл) }
присваивание описано правильно,нужно програмку лиш чуть чуть подкоректировать
см.выше
- Реклама
Re: Програмирование pic на СИ.
скажите ,а зачем накладывать маски |= и &= на порт,чтобы вывести в него данные?
в авр я встречал подобные присваивания, хотя просто пишу через =
PORTB = 0b10100100; и все прекрастно работает
в авр я встречал подобные присваивания, хотя просто пишу через =
PORTB = 0b10100100; и все прекрастно работает
Re: Програмирование pic на СИ.
Это не зависит от PIC или AVR. Логика тут простая : присваиванием меняешь _все_ разряды порта. Можно и так написа'ть, но при этом надо каждый раз помнить, что там было раньше, и каждый раз воспроизводить это состояние остальных выходов портов. А по маске - изменить состояние только выбранных выходов, не трогая остальные.vovik15 писал(а):скажите ,а зачем накладывать маски |= и &= на порт,чтобы вывести в него данные?
в авр я встречал подобные присваивания, хотя просто пишу через =
PORTB = 0b10100100; и все прекрастно работает
Re: Програмирование pic на СИ.
Чтобы не "задевать" те разряды порта, которые нельзя трогать.vovik15 писал(а):скажите ,а зачем накладывать маски |= и &= на порт,чтобы вывести в него данные?
в авр я встречал подобные присваивания, хотя просто пишу через =
PORTB = 0b10100100; и все прекрастно работает
Подобные сокращения в Си повсеметно приняты. Язык Си очень гибок. Но по сути все сводится к следующему преобразованию.
Код: Выделить всё
char temp;
temp = PORTB & 0xFE;
PORTB = temp;
Модифицированное значение temp выводим снова в порт.
В результате bit_0 порта окажется сброшенным, при этом остальные разряды порта останутся неизменными.
Оператор &= называется совмещенным оператором. Компилятор при этом сам наложит маску и присвоит модифицированное значение переменно, слева от оператора.
Рекомендую почитать основы программирования на Си. В интернете бездна материала...
С уважением,
Виктор.
Виктор.
-
misterkuk
- Мучитель микросхем
- Сообщения: 400
- Зарегистрирован: Сб апр 17, 2010 10:30:13
- Контактная информация:
Re: Програмирование pic на СИ.
При проверке на железе, горел только "е" сегмент и причём не зависимо от того нажата кнопка или нет.
-
misterkuk
- Мучитель микросхем
- Сообщения: 400
- Зарегистрирован: Сб апр 17, 2010 10:30:13
- Контактная информация:
Re: Програмирование pic на СИ.
Ну думаю с простой программой мы разобрались. А как насчёт работы с энергонезависимой памятью? как с ней работать?
Re: Програмирование pic на СИ.
http://piclist.ru/S-EEPROM/S-EEPROM.html
что ты привязался к этой памяти? у пиков полно других полезных функций
что ты привязался к этой памяти? у пиков полно других полезных функций
-
misterkuk
- Мучитель микросхем
- Сообщения: 400
- Зарегистрирован: Сб апр 17, 2010 10:30:13
- Контактная информация:
Re: Програмирование pic на СИ.
попробывал в протеусе. Там тоже только 1 сегмент горит. В чём причина?
Re: Програмирование pic на СИ.
исходник давай,и проект протеуса
-
misterkuk
- Мучитель микросхем
- Сообщения: 400
- Зарегистрирован: Сб апр 17, 2010 10:30:13
- Контактная информация:
Re: Програмирование pic на СИ.
С протеусом раньше не работал. Соединил индикатор с пиком как попало ( не так как на схеме). На железе тотже результат.
- Вложения
-
- ishodnik+proekt.rar
- (110.45 КБ) 440 скачиваний
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Програмирование pic на СИ.
А как на счёт хекса ?
Исходник нельзя вотнуть в протеус.... 
Re: Програмирование pic на СИ.
значит так
во вложении проект протеуса и исходник
что касаеться протеуса : кварц ставить необязательно(он все равно не эмулируеться) резисторы на индикатор тоже ставить не требуеться
они только отнимают ресурсы компьютера
во вложении проект протеуса и исходник
что касаеться протеуса : кварц ставить необязательно(он все равно не эмулируеться) резисторы на индикатор тоже ставить не требуеться
они только отнимают ресурсы компьютера
- Вложения
-
- project.rar
- (15.69 КБ) 425 скачиваний
-
misterkuk
- Мучитель микросхем
- Сообщения: 400
- Зарегистрирован: Сб апр 17, 2010 10:30:13
- Контактная информация:
Re: Програмирование pic на СИ.
Но вопрос остаётся открытым. Почему горит только 1 сегмент и мигает как вздумается ему?
Re: Програмирование pic на СИ.
бесконечный цикл забыл
while(1)
{
тут нужный код
}
и номер кнопочки перепутал (надо было в протеусе на другую линию повесить)
на RA2 перевесь,согластно программе
while(1)
{
тут нужный код
}
и номер кнопочки перепутал (надо было в протеусе на другую линию повесить)
на RA2 перевесь,согластно программе
Код: Выделить всё
#include <pic.h>
__CONFIG (LP & UNPROTECT & LVPDIS & BOREN & MCLRDIS & PWRTEN & WDTDIS);
void podgot (void); // подготовка МК
void main (void)
{
podgot();
while (1)
{
if (RA2 == 0) PORTB = 1;
}
} //конец функции
// === подготовка МК
void podgot (void)
{
TRISA = 0b11111111; // направление работы ножек порта А
TRISB = 0b00000000; // направление работы ножек порта В
CMCON = 0x07; // отключение компараторов
PORTA = 0; // очищаем порт А
PORTB = 0; // очищаем порт Б
RBPU = 1; // подтягивающие R (0-вкл, 1-выкл)
}
-
misterkuk
- Мучитель микросхем
- Сообщения: 400
- Зарегистрирован: Сб апр 17, 2010 10:30:13
- Контактная информация:
Re: Програмирование pic на СИ.
Я уже скопировал ваш код, вставил в МПЛАБ, скомпилировал. В протеусе в свойствах пика указал на hex файл прошивки что в папке микрочипа в програм файлс. Нажимаю плей. Ничего не горит ( хорошо). При нажатие кнопки должны загореться все сегменты, но загорается и горит всё время только 1 сегмент с линии RB0. Хотя по идее при отжаатии ничего светится не должно. У вас тот код что вы написали, как в протеусе работает?vovik15 писал(а):бесконечный цикл забыл
- Вложения
-
- Безымянный22.JPG
- (193.68 КБ) 869 скачиваний


