Свежие обсуждения
Микроконтроллеры

Ликбез по С для микроконтроллеров PIC

1 18 64

Переключите отладочный файл на формат COFF. И для Project, и для .c
Должно помочь.

 

нет, не помогло Попробую эту версию компилятора и MPLabs поставить на другом ПК и посмотреть.

 

Чудеса да и только. Точно происки инопланетян. Ладно, подумаем ещё...

 

Сергей К, предлагаю попытаться локализовать проблему. Попробуйте открыть вот этот проект:
http://www.pic16.nm.ru/likbezc/proba2_0303.zip
и, не компилируя! , запустить симуляцию. Заранее установив формат отладочного файла .coff, как я предложил выше. Если нормально просимулируется - скорее всего, с компилятором проблема. Если опять неправильно - наверно что-то не так в настройках симулятора.

 

Ппробовал Ваш без компиляции.
exp(0)=1.0
С Вашим - работает. Значит дело в компиляторе (или его настройках? Хотя это маловероятно...)
Тем более, если учесть, что все остальное работает.
И последняя попытка, поделитесь Вашим "math.h". Но только, если размер его не 17324 байта.

Нашел альтернативную функцию exp. Попробовал ее вместо стандартной - работает. Можно сказать - частично проблема поборена

 

Сергей К: поделитесь Вашим "math.h"
Мой размерчик 17345, в аттаче.

79219.zip

 

Подскажите как в PIC16 на Си

1. прочитать что на ножке: 1 или 0

2. сделать ножку: входом или выходом, включить подтяжку.

3. вывести на ножку выход: 1 или 0

Желательно на Си с работой с регистрами PIC - чтоб к разным компиляторам подходило.

Спасибо.

 

В общем случае в начале программы пишем макросы:

#define biton(x,y) (x|=1<<y)
#define bitoff(x,y) (x&=~(1<<y))
#define invertbit(x,y) (x^=(1<<y))
#define testbit(x,y) (x&(1<<y))

Затем просто используем их:

biton(myvar,3);
bitoff(myvar,5);
invertbit(myvar,1);
if (testbit(myvar,6)) myvar=0;

В CCS PICC такие команды уже предусмотрены - это bit_clear, bit_set, bit_test. О них написано в книге Шпака, стр 370 и далее.

Сделать ножку входом или выходом можно как и на асме, записав соответствующее значение в регистр TRIS. Например (для CCS PICC):

#byte PORTA = 0x05 // Адреса регистров
#byte PORTB = 0x06
#byte TRISA = 0x85
#byte TRISB = 0x86

TRISA = 0b00001111; // Настройка выводов портов
TRISB = 0b11110000;

Выводить требуемые уровни на выходы портов можно "напрямую", записывая в регистры соответствующие значения. Например:

PORTA = 0;
PORTB = 0xF0;

В CCS PICC предусмотрены некоторые хитрости при работе с портами. Читайте о них в книге Шпака, стр.143, а также стр.348 и далее. Здесь долго рассказывать. Ссылки на книгу есть на 1-й странице этой темы.

 

Спаисбо.

А как сделать вход с внутренней подтяжкой к питанияю ?

 

Nokia: как сделать вход с внутренней подтяжкой к питанию ?

В CCS PICC для этого предусмотрена специальная функция port_b_pullups. Варианты:
port_b_pullups(TRUE); // подтяжка включена
port_b_pullups(FALSE); // подтяжка отключена

А в общем случае - как и в асме, битом 7 (_RBPU) регистра OPTION_REG (адрес 081h), см. даташит на соответствующий PIC.