Програмирование pic на СИ.

Поклонники продукции Microchip Technology Inc тусуются тут.
Chettuser

Re: Програмирование pic на СИ.

Сообщение Chettuser »

Народ, уже полдня мучаю XC8. Сдаюсь! :(
Код простейший, PIC тоже - 84A:
(код урезан!)
Спойлер

Код: Выделить всё

#include <xc.h>
#include <stdlib.h>
#include <stdio.h>

#pragma config FOSC=HS, WDTE=OFF, CP=OFF, PWRTE=OFF
#define _XTAL_FREQ 	4000000;		// Тактовая частота
#define LRED    RB0;
#define LYELLOW RB1;
#define LGREEN  RB2;

init(void);
delay_s(int S);

void main (void)
{
	init();
	
	while(1)
	{	
//		RED = 1;  // Не работает тоже!
		RB0 = 1;
		delay_s(10);

	}
}


delay_s(int S)		// Задержка в секундах
{
int k = 0;
while(S>0)
{
	while(k<10)
	{
		[b]__delay_ms(100);[/b]
		k++;
	}
S--;
}
return;
}

init(void)
{
	TRISA = 0xFF;
	TRISB = 0x00;
	
	PORTA = 0x00;
	PORTB = 0x00;
return;
}
Такое ощущение, что XC8 в упор не видит pic.h, где прописан тот самый __delay_ms(x); :(
Что я забыл включить?
Лог ошибок:
Error [195] D:\My designs\SVETOFOR\SVETOFOR.c; 66.38 expression syntax
Error [187] D:\My designs\... .c; 66.38 too few function arguments
Error [194] D:\My designs\... .c; 66.38 ")" expected
Error [195] D:\My designs\... .c; 66.38 expression syntax
Error [195] D:\My designs\... .c; 66.39 expression syntax
Вложения
SVETOFOR.zip
(2.85 КБ) 159 скачиваний
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Програмирование pic на СИ.

Сообщение Аlex »

А я ведь чуть было не подумал, что у меня XC8 тоже с катушек съехал, пока пытался скомпилить Ваш код :) Мало того, я ещё в хелп полез, убеждаться что всё написано верно и всё подключено :))
Из дефайна точку с запятой уберите !
Варвары, как ещё назвать... :)))
Реклама
Chettuser

Re: Програмирование pic на СИ.

Сообщение Chettuser »

Никогда не пользовался, но тут что называется назрело...
Перекопал весь справочник по XC8 но не наткнулся даже на похожее.
Кто как делал сброс PIC16 программно?
Неужели кроме ассемблерного перехода на 0x0000 нет способа?

Собственно для чего это понадобилось - мне нужно вернуться в функцию main из подфункции, но не с того места откуда выскочил, а на начало этой main. Другого способа не вижу (эх... как хорошо было на ассемблере "goto" и все дела!).
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Програмирование pic на СИ.

Сообщение oleg110592 »

watchdog используйте
Реклама
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Програмирование pic на СИ.

Сообщение dosikus »

oleg110592, не а ...
Переписывать все , ибо алгоритм не верен ....
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Програмирование pic на СИ.

Сообщение Аlex »

Как вариант. Можно ещё повесить любую ногу на MCLR и подавать на неё "0". Контроллер ресетнится.
А так, по текущей проблеме, соглашусь с dosikus'ом. Если случилось так, что нужно перескочить куда-то в нестандартное место, то алгоритм явно неверен, и его нужно пересматривать.
Chettuser

Re: Програмирование pic на СИ.

Сообщение Chettuser »

Вопрос решен. Закрыт.
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: Програмирование pic на СИ.

Сообщение HHIMERA »

Ну почему... в ответственных приложениях при обнаружении сбоя или ошибки... вполне можно заюзать типа...

((void (*)())0x0000)(); // RESET 0000H
"Я не даю готовых решений, я заставляю думать!"(С)
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Програмирование pic на СИ.

Сообщение dosikus »

Стас, у него шаблон снесет , проще разрешить goto и метки юзать . :)))

Chettuser, только не из функции а после ее вызова и по результату вызова.
А если нужен именно Reset а не просто переход на вектор Reset ,
проще watchdog юзать, как oleg110592 советовал .
И при старте анализировать флаги сброса ...
Chettuser

Re: Програмирование pic на СИ.

Сообщение Chettuser »

Я уже выкрутился, спасибо. :)
Chettuser

Re: Програмирование pic на СИ.

Сообщение Chettuser »

Возможно ли сделать аналогичное на PIC?
http://www.polesite.ru/?p=1965
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Програмирование pic на СИ.

Сообщение Аlex »

Это плюсы, а конкретно - использование шаблонов. Если компилятор будет их (++) поддерживать, то - возможно.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Програмирование pic на СИ.

Сообщение dosikus »

В купе с призрачным преимуществом легкости разводки получаем батхерт от плюсов с соответствующими тормозами .
Проще юзать SMD монтаж и двухстороннюю разводку с изготовлением плат на китайских площадках...
Аватара пользователя
Adusik
Поставщик валерьянки для Кота
Сообщения: 2198
Зарегистрирован: Ср мар 14, 2007 01:50:10

Re: Програмирование pic на СИ.

Сообщение Adusik »

Подскажите пожалуйста, что дописать в конфигу чтобы были установлены биты защиты как программной области так и епрома? Нужно All Protect.
Сейчас защищена только область программы: __CONFIG ( WDTDIS & INTIO & MCLRDIS & PROTECT );
Chettuser

Re: Програмирование pic на СИ.

Сообщение Chettuser »

Сегодня компилятор выдал на работе фокус:
Error [141] D:\V..... er.h; 1.15 can't open include file "xc.h": Too many open files
(908) exit status = 1
И ошибку на заголовок (содержащий xc.h) во всех *.с-файлах.
Чего ему не понравилось?

Кстати, где прячется описание ошибок (Error [141]), где посмотреть кто-нибудь знает? Справку перелопатил, не нашёл.
Аватара пользователя
Demonit88
Открыл глаза
Сообщения: 43
Зарегистрирован: Сб авг 14, 2010 05:26:04
Откуда: Воронеж

Re: Програмирование pic на СИ.

Сообщение Demonit88 »

Да мне собственно только понять как назначить порты, как прописать выходы на эти порты, как назначить входы, как прописать взаимодействие по этим портам... понять как управлять входами и выходами камня
Неважен цвет шерсти ,главное как ты пользуешся головой ,усами ,лапами.
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7360
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Програмирование pic на СИ.

Сообщение uldemir »

А чего их назначать? делаем include - там всё назначено:

Код: Выделить всё

#include <p18f25k20.h>
#pragma config FOSC=INTIO67, FCMEN=OFF, PWRT=ON, IESO=OFF, BOREN=SBORDIS, BORV=22, WDTEN=OFF, PBADEN = OFF

И обращения делаются через операции с ними:

Код: Выделить всё

#pragma interruptlow tmr0routine   // прерывание
void tmr0routine(void) {

	LATA = 0;                               // обнулим порт А
	if ((PORTC & 0x07) != 0x07) blink_cnt = 0;  // если из 3х младших выводов порта Ц содержат хоть одну единицу
	LATB = (videobuf.............                 // выводим данные в порт Б
	LATCbits.LATC7 = videobuff[videobuf_offs] >> 7; // Отдельно можно изменить один бит порта Ц

	INTCONbits.TMR0IF = 0;  // Ну и сбрасываем флаг запроса прерывания.
}
Написано под PICC18 компилятор. В XC8 #pragma может иметь иной синтаксис.
Не думаю, что 629-й кристалл, это тот, под который стоит писать на C - там и на ассемблере мало что умещается. Поэтому не знаю, поддерживает ли его какой компилятор C - даже в голову такая мысль не приходила.
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: Програмирование pic на СИ.

Сообщение urry »

поддерживают - и хайтек и хc8
Chettuser

Re: Програмирование pic на СИ.

Сообщение Chettuser »

#pragma нормально воспринимается XC8, а вот __CONFIG не всегда молча съедает.
Ответить

Вернуться в «PIC»