Страница 28 из 103

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

Добавлено: Пт ноя 07, 2014 23:13:44
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

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

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

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

Добавлено: Сб ноя 08, 2014 09:43:34
Chettuser
:facepalm: :oops:

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

Добавлено: Сб ноя 08, 2014 18:22:51
Chettuser
Никогда не пользовался, но тут что называется назрело...
Перекопал весь справочник по XC8 но не наткнулся даже на похожее.
Кто как делал сброс PIC16 программно?
Неужели кроме ассемблерного перехода на 0x0000 нет способа?

Собственно для чего это понадобилось - мне нужно вернуться в функцию main из подфункции, но не с того места откуда выскочил, а на начало этой main. Другого способа не вижу (эх... как хорошо было на ассемблере "goto" и все дела!).

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

Добавлено: Сб ноя 08, 2014 18:29:04
oleg110592
watchdog используйте

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

Добавлено: Сб ноя 08, 2014 21:37:39
dosikus
oleg110592, не а ...
Переписывать все , ибо алгоритм не верен ....

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

Добавлено: Сб ноя 08, 2014 22:07:46
Аlex
Как вариант. Можно ещё повесить любую ногу на MCLR и подавать на неё "0". Контроллер ресетнится.
А так, по текущей проблеме, соглашусь с dosikus'ом. Если случилось так, что нужно перескочить куда-то в нестандартное место, то алгоритм явно неверен, и его нужно пересматривать.

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

Добавлено: Сб ноя 08, 2014 23:05:03
Chettuser
Вопрос решен. Закрыт.

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

Добавлено: Сб ноя 08, 2014 23:06:28
HHIMERA
Ну почему... в ответственных приложениях при обнаружении сбоя или ошибки... вполне можно заюзать типа...

((void (*)())0x0000)(); // RESET 0000H

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

Добавлено: Вс ноя 09, 2014 08:00:06
dosikus
Стас, у него шаблон снесет , проще разрешить goto и метки юзать . :)))

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

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

Добавлено: Вс ноя 09, 2014 08:29:59
Chettuser
Я уже выкрутился, спасибо. :)

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

Добавлено: Пн ноя 10, 2014 20:20:29
Chettuser
Возможно ли сделать аналогичное на PIC?
http://www.polesite.ru/?p=1965

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

Добавлено: Пн ноя 10, 2014 20:23:03
Аlex
Это плюсы, а конкретно - использование шаблонов. Если компилятор будет их (++) поддерживать, то - возможно.

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

Добавлено: Пн ноя 10, 2014 20:27:13
dosikus
В купе с призрачным преимуществом легкости разводки получаем батхерт от плюсов с соответствующими тормозами .
Проще юзать SMD монтаж и двухстороннюю разводку с изготовлением плат на китайских площадках...

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

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

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

Добавлено: Пн янв 12, 2015 20:16:41
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]), где посмотреть кто-нибудь знает? Справку перелопатил, не нашёл.

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

Добавлено: Чт янв 15, 2015 00:30:21
Demonit88
Да мне собственно только понять как назначить порты, как прописать выходы на эти порты, как назначить входы, как прописать взаимодействие по этим портам... понять как управлять входами и выходами камня

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

Добавлено: Чт янв 15, 2015 07:18:01
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 - даже в голову такая мысль не приходила.

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

Добавлено: Чт янв 15, 2015 07:38:16
urry
поддерживают - и хайтек и хc8

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

Добавлено: Чт янв 15, 2015 12:26:29
Chettuser
#pragma нормально воспринимается XC8, а вот __CONFIG не всегда молча съедает.