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

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

1 30 64

Вот в книге Шпака есть хоть какое-то описание команд ССS... А для HT что будет являться настольной книгой.
P.S. Был я как-то на сайте Microchipa, так там заводом производителем контроллеров рекомендуют пользоваться CCS-PICC. Якобы он именно для пиков и разрабатывался.

 

FlopА для HT что будет являться настольной книгой.

В pdf, который идет с хайтеком расписано все, что надо знать. и сам компилятор, и особенности под него написания, и стандартные библиотеки.

хоть какое-то описание команд ССS
вы имеете в виду его библиотеки?

 

Давайте вынесем обсуждение компиляторов в отдельную тему!
Тут осбусжаем конкретно программиование на Си для ПИКов!

Сегодня столкнулся с проблемой. Отлаженая программа начала давать сбои, когда датчик температуры указывал отрицательную температуру. Продолжая разбиратся, решил наконец связать Proteus и MPLabs c помощью плагина (внизу страницы). Поставил на закачку.

Тем временем выяснил, что проблема возникает в следующем месте:
if (T3>T_End_Process)
T3=-20, T_End_Process=40
обе переменные имели тип int16.

Долго провозившись, у меня возникла идея. Обратившись к руководству ССS я выяснил, что для всех типов, кроме чисел с плавающей точкой указывается беззнаковый тип, по умолчанию.
Решил проблему легко, всего лиш добавив к объявлению переменной явное указание, что это "знаковое" число:
signed int16 T3, T_End_Process

Многим это покажется явным, но может кому-то написанное мною сэкономит 30 минут
( А тут, и плагин на 98% закачался )

 

Сергей К: Обратившись к руководству ССS я выяснил, что для всех типов, кроме чисел с плавающей точкой указывается беззнаковый тип, по умолчанию
Извращенцы. За такие "доработки" языка надо просто по ушам бить.

 

давно забил на объявления по умолчанию. Всегда пишу signed (unsigned) int..char...etс. Слишком много времени уходит на поиск подобных проблем. И нервные клетки не восстанавливаются.

 

С праздником всех участников форума!!!!!
Праздник праздникаом, хоть и под пивом, а всеравно одна мысль покою е дает.
Как для 16F676 организовать аналого-цифровое преобразование?
Взял готовый пример, переделал его под 676, а толку нет, в чём проблема пока не могу понять может кто подскажет.
#include <16f676.h>
#FUSES INTRC,NOWDT
#use delay (clock=4000000)
#device ADC=10// ошибку выдает сдесь!!!
#byte ADCON0 = 0b0001011
int n;
#int_AD
AD_isr()
{
n = read_adc() / 102;
output_C((2 < n - 1));
ADCON0 |= 4;
}
void main()
{
setup_adc_ports(ALL_ANALOG );
setup_adc(ADC_CLOCK_DIV_32);
enable_interrupts(INT_AD);
enable_interrupts(global);
set_adc_channel(0);
ADCON0 |= 4;
while(1);
}

 

Сергей К: Давайте вынесем обсуждение компиляторов в отдельную тему!
Тут осбусжаем конкретно программиование на Си для ПИКов!

Трудно обсуждать С отдельно от компилеров. Я вот в вышестоящем посте ув. флопа начало не до конца понял, где у него ошибку выдает, т.к. это относится не к С а именно к компилятору.

 

rfc: Трудно обсуждать С отдельно от компилеров
я про обсуждение отличий компиляторов, их преимуществ. А тут конкретая реализация кода на Си (с некоторой привязкой к компилятору).

Flop: #device ADC=10// ошибку выдает сдесь!!!
эта строка указывает компилятору, как обрабатывать данные от АЦП (а точнее в каком формате выводить из read_adc()). В данном случае здесь указано использование 10 битного режима (т.е. рузультат будет занимать 2 байта).
Приведите здесь текст ошибки на языке оригинала. Какой компилятор используете?

 

приношу извинения за внесение неясности. Скопировал по новому текст программы из примера (Шпака),и все заработало . Но при этом поменял тип контроллера и ADCON0 |=3;

 

Какой компилятор используете? Пользуюсь ССS-PICC, а точнее только начал осваивать. Некоторые моменты описываемые в книге Шпака логически не понятны, так сказать- додумывайте сами.