Re: Програмирование pic на СИ.
Добавлено: Сб фев 12, 2011 12:25:58
ARV, претензия не по делу. У человека ошибка, мне другую тему создавать, чтобы указать ее?
Здесь можно немножко помяукать :)
https://radiokot.ru/forum/
претензия не к вам. если у меня болит зуб, нога, голова и насмор, леяат меня 4 разных врача, а не один. если у человека проблема с Си - пусть разбирается с Си не приплетает ПИК. если у него проблема с ПИК-ом - пусть разбирается с ним, и не приплетает Си. по-моему, порядок есть порядок.testerplus писал(а):ARV, претензия не по делу. У человека ошибка, мне другую тему создавать, чтобы указать ее?
А если плохой аппетит? Иногда и с одной проблемой придется всех 4х врачей обойти. Чел. не в курсе , в чем проблема, и мог приписать "Программирования pic на Си из-под Widows 7". Нормальное название темы, это же не программный модуль, где следует стремиться к самобытности и самодостаточности.ARV писал(а):если у меня болит зуб, нога, голова и насморк, лечат меня 4 разных врача, а не один
Код: Выделить всё
freq=0;
for (i=1;i<=100;i++)
{
TMR1H=0;TMR1L=0;
T1CON=0b00000111 ;// 00 = 1:1 Prescale value;;; 0 = Oscillator is shut off;;; 1 = Do not synchronize external clock input;;;;
//1 = External clock from pin RB6/T1OSO/T1CKI/PGC (on the rising edge);; 1 = Enables Timer1
__delay_us(1000);
T1CON=0b00000110 ;// 0 = disable Timer1(lowers bit)
freq=(long)TMR1H*256+freq;
freq=(long)TMR1L +freq;
}
freq=freq*10; //
Так соберите и проверьте, в чем пробема?12val12 писал(а):какое значение будет иметь переменная freq в конце вышеприведенного участка кода при подаче на вход RB6/T1OSO/T1CKI/PGC меандра 1000000 Гц
Код: Выделить всё
char timerH = 0; //кол-во переполнений TMR1
char timerM = 0;
char timerL = 0;
unsigned long summa = 0;
char text [12];
unsigned int incTMR0 = 0; //кол-во переполнений TMR0
void init() { //ф-ция инициализации ЖКИ
Lcd_Custom_Config ( &PORTA,3,2,1,0,&PORTB,0,2,1 );
Lcd_Custom_Cmd(LCD_CURSOR_OFF);
}
void interrupt() { //обработка прерываний
if (INTCON.T0IF) { //если TMR0 увеличить перем. прерываний
incTMR0++;
INTCON.T0IF = 0;
}
if (PIR1.TMR1IF) { //если TMR1 увеличить перем прерываний
timerH++; PIR1.TMR1IF = 0;
}
}
void main() { //Начало главной программы
init();
CMCON=0b00000111; //выключаем компараторы
OPTION_REG=0b1000010; //прескалер перед TMR0 1:8
TMR1L=0b00000000; //обнуляем TMR1
TMR1H=0b00000000;
TMR0=188; //начальное значение TMR0
TRISA.F0=0;
TRISA.F1=0;
TRISA.F2=0;
TRISA.F3=0; //Конф-ция порта А 0,1,2,3 - выход
TRISB.F0=0;
TRISB.F1=0; //Конф-ция порта В 0,1,2 - выход
TRISB.F2=0;
INTCON=0b11100000; //разрешить прерыв-я глобальные,от переферии, от TMR0
T1CON=0b000000111; //вкл TMR1,источник такт внешний,не синхронизировать
// генератор выкл,прескалер 1:1
PIR1.TMR1IF = 0; //сбросить флаг прерываний
PIE1.TMR1IE = 1; //разрешить прерывания от TMR1
while(1) { //цикл
if (incTMR0 == 489 ) { //секунда прошла
INTCON=0b00000000; //запретить все прерывания
T1CON.TMR1ON = 0; //выключить TMR1
timerM = TMR1H; //считать регистр TMR1H
timerL = TMR1L; //считать регистр TMR1L
*(((unsigned char*)(&summa))+2)=timerH;
*(((unsigned char*)(&summa))+1)=timerM;
*(((unsigned char*)(&summa))+0)=timerL;
LongToStr(summa,text); //переводим число в текст
Lcd_Custom_Out(1,1,text);//выводим число в 1-ю строку 1-ю позицию
timerH = 0; //обнуляем переменную кол-ва переполнений TMR1
incTMR0 = 0; //обнуляем переменную кол-ва переполнений TMR0
TMR1L=0b00000000; //обнуляем TMR1
TMR1H=0b00000000;
TMR0 = 188; //инициализируем TMR0 начальным значением
PIR1.TMR1IF = 0; //сброс флага прерываний TMR1
INTCON=0b11100000; //разрешаем снова все прерывания
//сброс флага прерываний TMR0
T1CON.TMR1ON = 1; //включаем TMR1
}
}
}
Он и будет ругаться. В хайтеке не может быть ф-ии с именем interrupt ! Да и код написан не под хайтек.но компиллятор ругается на попрограмму обработки прерываний
Вряд ли такое устройство можно назвать частотомером, точность 0.05% - никуда не годится. (Ксати, понизьте входную частоту до 10000 и будете приятно удивлены тем, что точность дойдет до единиц процента).12val12 писал(а):Собран тот вариант что страницей ранее ..точность 400гц на мегегерце
Типичная ошибка начинающего работать в Си. Ну дались Вам эти такты, не нужно их подсчитывать....не хочу писать прерывания и подсчитывать такты на его обработку !
65 чего? Я понимаю, что Вы имели ввиду, но Вам здесь неохотно помогают именно из-за постановки вопроса.здесь же преполнение таймера исключено до частоты 65 Мгц.
Так ее за Вас написать должны? Берите алгоритм и реализуйте самостоятельно:я не хочу ничео изобретать поэтому просил процедуру частотомера .пусто он хоть все три таймера использует но лишь бы не задействовал другие ноги кроме внешнего входа 16 битного таймера
Ghost in shell писал(а):Доброго времени суток!
вопрос: как запустить логической "1" программу?
сначала:
Вот как организовать, чтобы ожидание длилось до появления логической "1" на линии "knopka_start"?
Как МК воспринимает появление логической "1"? Какое это число, знак? С чем сравнивать?
Код: Выделить всё
void main (void) // запуск программы
{ // начало функции
while (knopka_start)
{
}
программа
} //Код: Выделить всё
void main (void) // запуск программы
{ // начало функции
while(!knopka_start);
while (1)
{
}
программа
} //Код: Выделить всё
void main (void) // запуск программы
{ // начало программы
while(!knopka_start);
while (1)
{
}
программа
} // конец программыКод: Выделить всё
while (1)
{
}Код: Выделить всё
void main (void) // запуск программы
{ // начало программы
while(!knopka_start);
while (1)
{
программа
}
} // конец программыНу так у Вас же изначально было написано:Логичнее поместить тело программы в бесконечный оператор while (1):
{ // начало функции
while (ожидание, пока knopka_start = 0)
{
}
программа
} // конец функции
Это же тупой копипаст вашей же программы . Да и думал "программа" - это комментарий.Ghost in shell писал(а):dosikus, спасибо, но есть вопросы:
зачем оператор
Логичнее поместить тело программы в бесконечный оператор while (1):
Я к стате тоже не нашол:(... хотелосьбы их себе добыть.Chettuser писал(а):Можно я тут немного погажу вопросами?
Скажите пожалуйста, почему я не могу найти delay.h в папках HT-PICC ? И где его взять можно? Да и вообще где можно полные библиотеки кучей скачать?