Помогите разобраться, что я делаю не так. Я хочу сделать, чтобы на пятой ноге МК светодиод моргал, ориентировался по разным примерам кода, но что-то ничего не получается.
Компилятор выдаёт следующее:
Build D:\Led_S\LED_ON for device 12F675
Using driver D:\Program Files\HI-TECH Software\PICC\lite\9.60\bin\picc.exe
Make: The target "D:\Led_S\Untitled.obj" is out of date.
Executing: "D:\Program Files\HI-TECH Software\PICC\lite\9.60\bin\picc.exe" -C D:\Led_S\Untitled.c -q --chip=12F675 -P --runtime=default --opt=default -D__DEBUG=1 -g --asmlist "--errformat=Error [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s"
Warning [176] D:\Led_S\Untitled.c; 15.0 missing newline
Error [192] D:\Led_S\Untitled.c; 6.1 undefined identifier "PORTA"
Error [192] D:\Led_S\Untitled.c; 7.1 undefined identifier "TRISA"
Warning [361] D:\Led_S\Untitled.c; 13.1 function declared implicit int
Warning [337] D:\Led_S\Untitled.c; 14.1 line does not have a newline on the end
Качаем datasheet, читаем внимателно, доходим до 3.1. Делаем открътие, что в 12F675 есть GPIO и TRISIO регистръ. Понимаем что нужно читат далее. Читаем!
Удачи
Лом - ето город в Болгарии, а не инструмент юстировки електроники.
Build D:\Led_S\LED_ON for device 12F675
Using driver D:\Program Files\HI-TECH Software\PICC\lite\9.60\bin\picc.exe
Make: The target "D:\Led_S\Untitled.obj" is out of date.
Executing: "D:\Program Files\HI-TECH Software\PICC\lite\9.60\bin\picc.exe" -C D:\Led_S\Untitled.c -q --chip=12F675 -P --runtime=default --opt=default -D__DEBUG=1 -g --asmlist "--errformat=Error [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s"
Warning [176] D:\Led_S\Untitled.c; 18.0 missing newline
Error [192] D:\Led_S\Untitled.c; 10.1 undefined identifier "WPPU"
Warning [361] D:\Led_S\Untitled.c; 14.1 function declared implicit int
Warning [337] D:\Led_S\Untitled.c; 17.1 line does not have a newline on the end
********** Build failed! **********
Есть еще такой момент, когда я собрал на этом МК, как оно должно работать в FlowCODE, FlowCODE скомпилировал и выдал hex файл. Но при попытке с имитировать работу в протеусе МК с этим hex файлом не работает. С другими МК таких проблем не было.
Опять читаем док. Там приблизително сказано: Каждъй от входов, исключая GP3, можно подтягивать через WPUx (WPU0-WPU5 - искл. WPU3) Перед етим нужно разрешить подтягивание через GPPU бит (OPTION REG:7)
Вас компилятор ругает в основном за то что не знает что такое WPPU
Flow разрешил подтягивание: option_reg = 0xC0; => самъй старшии бит ето разрешение подтяжки, а вот я нигде не увидел подтяжка какого то въвода.
А вам зачем подтягивание? Въ не нажимаете еще на клавишу!
Лом - ето город в Болгарии, а не инструмент юстировки електроники.
Но мне почему-то не получается сделать задержку, при «Delay_ms(500);» она не происходит, а при «_Delay(500);» код не компилируется. И при тестировании в Proteus не было стабильного горения светодиодов, они с огромной частотой моргали. Из-за чего это может быть?
Надо бы еще определить содержимое CMCON и ANSEL
Что это, для чего и как это сделать? «CMCON = 0x07;» я видел в подобной схеме на ЛабКит, но я так и не понял, для чего отключаются компараторы. Можете рассказать что и для чего?
. нужно разрешить подтягивание через GPPU бит (OPTION REG:7)
Главное желание и понимание всех происходящих процессов и всё получится но в данный момент я не понимаю почему задержка не происходит и почему светодиоды моргаит с огромной частотой. Я ведь вынес функцию подготовки МК за пределы бесконечного цикла, она не должна сбрасывать порт в 0.
Build D:\Led_ON2\LED_ON for device 12F675
Using driver D:\Program Files\HI-TECH Software\PICC\lite\9.60\bin\picc.exe
Make: The target "D:\Led_ON2\Untitled.obj" is out of date.
Executing: "D:\Program Files\HI-TECH Software\PICC\lite\9.60\bin\picc.exe" -C D:\Led_ON2\Untitled.c -q --chip=12F675 -P --runtime=default --opt=default -D__DEBUG=1 -g --asmlist "--errformat=Error [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s"
Warning [176] D:\Led_ON2\Untitled.c; 17.0 missing newline
Warning [361] D:\Led_ON2\Untitled.c; 13.1 function declared implicit int
Warning [337] D:\Led_ON2\Untitled.c; 16.1 line does not have a newline on the end
Что я делаю не так, что с установкой задержки не хочет компилироваться?
То что я дописывал «#define delay_ms» я так понимаю это не правильно.
GPIO – это 6-разрядный порт входа/выхода. GPIO имеет соответствующие биты направления в регистре TRISIO, позволяющие настраивать канал как вход или выход. Запись «1» в TRISIO переводит соответствующий выходной буфер в 3-е состояние. Запись «0» в регистр TRISIO определяет соответствующий канал как выход, содержимое защелки GPIO передаётся на выход микроконтроллера(если входная защелка подключена к выходу микроконтроллера).
Получается, подачу напряжения с выхода делаем с помощью GPIO, я правильно понимаю?
Исправил TRIS на GPIO, также всё моргает.
Последний раз редактировалось Alexandr617 Ср июл 01, 2015 14:26:26, всего редактировалось 1 раз.
1. Вы так и не увидели, что в рабочем варианте одно подчеркивание перед delay, а у вас два?
2. Директива #define что делает? И каков смысл ее использования в вашем варианте?
3. С помощью GPIO мы управляем портом. В данном случае подачей 1 или 0.
pyzhman писал(а):1. Вы так и не увидели, что в рабочем варианте одно подчеркивание перед delay, а у вас два?
2. Директива #define что делает? И каков смысл ее использования в вашем варианте?
1. Без разницы одно, два или вообще без подчеркивания, одни и теже ошибки выдаёт. Правда компилятор всегда показует на одну больше... Обратите внимание, в коде одно подчеркивание, а компилятор показал два.
2.
Директива #define определяет идентификатор и последовательность символов, которая будет подставляться вместо идентификатора каждый раз, когда он встретится в исходном файле.
действительно, непонятно для чего я её вставил.(
Удалил "GPIO=0b000001" и "GPIO=0b000010", это была моя ошибка, кнопка каждый раз сбивалась в "0". Теперь каждая нога отдельно от другой переключается, стало стабильней переключаться, но светодиоды всё равно моргают с огромной частотой.
#include <htc.h> // Required to interface with delay routines
#ifndef _XTAL_FREQ
// Unless already defined assume 4MHz system frequency
// This definition is required to calibrate __delay_us() and __delay_ms()
#define _XTAL_FREQ 4000000
#endif
/** demonstration of various built-in delay mechanisms */
void main(void){
while(1){
NOP();
_delay(1000); // delay for 1000 instruction cycles
CLRWDT();
__delay_us(400); // delay for 400 microseconds
CLRWDT();
__delay_ms(2); // delay for 2 milliseconds
CLRWDT();
}
}
Включи вот ети рядъ
#include <htc.h> // Required to interface with delay routines
#ifndef _XTAL_FREQ
// Unless already defined assume 4MHz system frequency
// This definition is required to calibrate __delay_us() and __delay_ms()
#define _XTAL_FREQ 4000000
#endif должно получится
-----------------------------------------------
Поставил себе HI-TECH C Compiler for PIC10/12/16 MCUs (PRO Mode) V9.71a
обе функции не трябуют #include <htc.h>
функция _delay(unsigned long ); проходит
функция __delay_us(unsigned long ); проходит требует #define _XTAL_FREQ 4000000
функция __delay_ms(unsigned long ); проходит требует #define _XTAL_FREQ 4000000
Заметь _delay() с один прочеркон, а __delay_us() i __delay_ms() с два
Лом - ето город в Болгарии, а не инструмент юстировки електроники.
main() {
unsigned int k;
CMCON = 0x07; //компараторы выключены
TRISA = 0b11111110; //RA0 выход
repeat: for (k=0; k<45000; k++);//"пустой" цикл для временной задержки
bitset(PORTA, 0); //выставить на RA0 высокий уровень
for (k=0; k<45000; k++);
bitclr(PORTA, 0); //выставить на RA0 низкий уровень
goto repeat; //повторить ещё раз
}
Я так понял что не все компиляторы имеют delay.
------------------------------------
botchin писал(а):Я сам работаю на ASM, но вот что нашел.
Включи вот ети рядъ
#include <htc.h> // Required to interface with delay routines
#ifndef _XTAL_FREQ
// Unless already defined assume 4MHz system frequency
// This definition is required to calibrate __delay_us() and __delay_ms()
#define _XTAL_FREQ 4000000
#endif должно получится
-----------------------------------------------
Поставил себе HI-TECH C Compiler for PIC10/12/16 MCUs (PRO Mode) V9.71a
обе функции не трябуют #include <htc.h>
функция _delay(unsigned long ); проходит
функция __delay_us(unsigned long ); проходит требует #define _XTAL_FREQ 4000000
функция __delay_ms(unsigned long ); проходит требует #define _XTAL_FREQ 4000000
Заметь _delay() с один прочеркон, а __delay_us() i __delay_ms() с два
Огромное спасибо за попытки мне помочь! Но это мне не помогло( компилятор выдаёт теже ошибки. Этот компилятор был в стандарте с MPLAB-ом, думаю стоит попробовать установить другую версию или компилятор...
-------
Кстати, пробовал вставлять Нопы с асма, задержку даёт, только очень маленькую, после этого вставил тот пустой цикл для задержки всё стало отлично МОРГАТЬ)). Простая прога моргалка уже залита в МК и стабильно могает уже 30мин. А с кнопками есть ещё вопросы, при нажатии кнопки светодиод почему-то не включается на постоянную работу он просто моргает поочерёдно с постоянно моргающим светодиодом.
--------------------
А FlowCODE я так понял имеет ошибки, по крайней мере для pic12f675 100%! Конфигурации в hex не ложит(PICkit об этом предупреждал. Конечно, после прошивки МК не работал, но прошивка была удачно залита) и в оболочке я мог (как бы) делать GP3 как на вход так и на выход.
Поставил себе HI-TECH C Compiler for PIC10/12/16 MCUs (PRO Mode) V9.71a
обе функции не трябуют #include <htc.h>
функция _delay(unsigned long ); проходит
функция __delay_us(unsigned long ); проходит требует #define _XTAL_FREQ 4000000
функция __delay_ms(unsigned long ); проходит требует #define _XTAL_FREQ 4000000
Заметь _delay() с один прочеркон, а __delay_us() i __delay_ms() с два прочеркa
Alexandr617 писал(а):Я так понял что не все компиляторы имеют delay
В язъках типа С функции бъвают встроеннъе и библиотечнъе. Delay встроенная - компилятор вставляет ее при нужде,