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

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

1 24 64

У меня несколько другая проблема. Опять чудеса с PIC-C. На этот раз на совершенной другой машине. Если создаю проект на МК PIC16F873A - то сразу же после его создания (мастером) и компиляции выдается ошибка в файле поддержки ЖК дисплея. Если заменить в готовом файле PIC16F873A на PIC16F874A - то все работает. Опять у меня мистика
То же самое и с PIC16F876A и PIC16F877A....

 

А можно такой вопрос:

писал программу, в итоге получилось - код программы, обработчик прерываний таймера 0 и обработчик прерываний АЦП. Осцилятор 16Мгц,

setup_adc (ADC_CLOCK_DIV_32);
setup_timer_0 (RTCC_INTERNAL|RTCC_DIV_8);

На индикаторах програ странно себя вела (буд-то тормозила), я затолкал её в мблаб и посмотрел в пошаговом симуляторе. В итоге увидел, что всё время процессора уходит на обработку прерываний с таймера 0, едва хватает на обработку АЦП и до когда программы он едва едва добирается.

Что можете сказать по этому поводу? не хватает быстродействия? И как вообще правильно расчитать время, затрачиваемое на обработку кода, чтоб правильно выставлять коэффициенты деления? Извиняюсь, если уже была подобная тема, ещё не весь форум изучил, в частности эту тему..

 

Al-x: Что можете сказать по этому поводу? не хватает быстродействия?
нужно оптимизировать процедуру обработки прерывания, чтобы ее максимально сократить.
Возможно, часть можно вывести за пределы этой процедуры.
Можно увеличить коэффициент деления.

Кроме того, АЦП можно считывать в два этапа. На первом проходе запустить преобразование и на следующем считать значение.

Что касается частоты обновления светодиодного индикатора, то частоту можно взять 60 Гц.
В моей программе, на частоте 4МГц (одна команда=1мкс): период обновления=255(счетчик)*16(делитель)*4(4цифры)=16320мкс. Частота=1/период=61Гц

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

 

привет всем. у меня возникло пару вопросов:
как мне из 1й функции перейти на след
qwert
{
}

qwerty
{
}
типа этого.
напишите плиз код задержки,а то у меня не получается

и еще у меня есть протеус 6 про. помойму в нем можно както отлаживать схемы наблюдая как он их эмулирует. КАК?
зарание спасибо

 

В каком смысле "код задержки"? Если перейти из qwert в qwerty, так это делается обычным вызовом. Для чего здесь задержка?

 

да задержка это отдельная песня.
ну а как мне перейти...??? напиши.
и как мне ножку порта изменить(состояние)(1,0)(вход выход)
пожалуста напишите примерами а то я хоть и ВСЮ ветку прочитал не понял
кстати пишу я на хайтеке поэтому у меня возникают трудности.

 

вот я написал настройку шима(это как бы у меня одна функция)
#include <pic.h>

void main(void)
{
CCP1CON=0;
TMR2=0;
PIR2=0b01111111;
CCPR1L=.10;
INTCON=0;
RP0=1;
TRISC=0b00000000;
PIE1=0;
PIR1=0;
RP0=0;
CCP1CON=0b00101100;
T2CON=0b00000100;
}

xxxxx
{
}

как мне перейти в след скобки???

 

вот так:
#include <pic.h>

void xxxxx();

void main(void)
{
CCP1CON=0;
.....
T2CON=0b00000100;
xxxxx();
}

void xxxxx()
{
.....
}

Если только я правильно понял суть вопроса (больно уж он для программера... того...). Насчет ножки, думаю, подскажет кто-нибудь из участников, поскольку я с PIС-ами не работаю.

 

спасибо попробую. ну я же еще учусь

 

А почему у меня компилятор начинает ругаться когда я пишу так:
#include <pic.h>
int i
void main()
{
CCP1CON=0;
TMR2=0;
PIR2=0b01111111;
CCPR1L=0x10;
INTCON=0;
RP0=1;
TRISC=0b00000000;
TRISB=0b00000000;
PIE1=0;
PIR1=0;
RP0=0;
CCP1CON=0b00101100;
T2CON=0b00000100;
cycle();
}
cycle()
{
while(1==1)
{
for (i=0; i25000; i++);
CCPR1L++;
}
}
А вот что пишет:
Executing: "C:\Program Files\PICC-Lite\BIN\PICL.EXE" -C -E"Test.cce" "Test.c" -O"Test.obj" -Zg9 -O -ASMLIST -Q -MPLAB -16F876A
Advisory[1207] : some of the command line options you are using are now obsolete
Advisory[1208] : use --help option or refer to the user manual for option details
Error[314] C:\Projects\Test(C)\Test.c 5 : ";" expected
Warning[374] C:\Projects\Test(C)\Test.c 8 : missing basic type; int assumed
Error[983] C:\Projects\Test(C)\Test.c 8 : storage class redeclared
Error[984] C:\Projects\Test(C)\Test.c 8 : type redeclared
Error[239] C:\Projects\Test(C)\Test.c 8 : identifier "TMR2" redefined (from line 38)
Warning[374] C:\Projects\Test(C)\Test.c 9 : missing basic type; int assumed
Error[983] C:\Projects\Test(C)\Test.c 9 : storage class redeclared
Error[984] C:\Projects\Test(C)\Test.c 9 : type redeclared
..............................
Error[239] C:\Projects\Test(C)\Test.c 13 : identifier "TRISC" redefined (from line 58)
Warning[374] C:\Projects\Test(C)\Test.c 14 : missing basic type; int assumed
Error[983] C:\Projects\Test(C)\Test.c 14 : storage class redeclared
Error[984] C:\Projects\Test(C)\Test.c 14 : type redeclared
Advisory[1] C:\Projects\Test(C)\Test.c 14 : too many errors (21)
Halting build on first failure as requested.
BUILD FAILED: Wed Jul 25 15:56:52 2007
и так на все реристры

Все нашел. Вопрос снят.
а для тех у кого такая же маза то я просто забыл поставить ";" после объявленной перемменной