12F508

PIC версия программы(разные темы)

12F508

Сообщение iwa12 (iwa12) » 13 июл 2012, 17:16

При компиляции программы в Flowcode 5.1 c HI-TECH 9.83 выдаёт ошибку
84: trisio = trisio & 0xFE;
^ (192) undefined identifier "trisio"
Исправил файл 12F508.fcd:
InputCmdFull="gpio = gpio | %m;n%o = gpio;n"
InputCmdOneBit="gpio = gpio | %m;n%o = ((gpio & %m) == %m);n"
InputCmdMask="gpio = gpio | %m;n%o = gpio & %m;n"
OutputCmdFull="gpio = 0x00;ngpio = %o;n"
OutputCmdOneBit="gpio = gpio & %i;nif (%o)ntgpio = (gpio & %i) | %m;nelsentgpio = gpio & %i;n"
OutputCmdMask="gpio = gpio & %i;ngpio = (gpio & %i) | (%o & %m);n"
При компиляции ошибку не пишет, но прибор не работает.

12F508.zip

12F508isprav.zip
У вас нет доступа для просмотра вложений в этом сообщении.
Ник: iwa12
Имя: iwa12
Заинтересованный
Заинтересованный
Информация о пользователе

Re: 12F508

Сообщение mim (mim) » 13 июл 2012, 17:32

Согласно документации МК 12f508 содержит регистр TRISGPIO – регистр настройки портов ввода вывода.
Это конечно условное название (наименование), но все, кто пишет программное обеспечение, должны придерживаться правил.
Как правило, эти определения описываются в файлах хххх.h. Там указываются имена и адреса всех регистров, битов и т.д.
Поскольку ФК имеет возможность работать с различными компиляторами, то производители ФК создали еще один файл definitions.h.
Дело в том, что в различных компиляторах приняты различные умолчания и определения по поводу написания имен регистров, битов и т.д.
Например, в boostc регистры описываются маленькими буквами, а биты большими. В HiTech все описывается большими буквами.
Посмотрите, как это определено в файлах хххх.h в boostc и HiTech.
Таким образом, файл definitions.h содержит переопределения с больших - на маленькие.
Например, так выглядят переопределения для 12f508 в файле definitions.h:

#ifdef __PIC12F508_H
#define option_reg OPTION_REG
#define indf INDF
#define tmr0 TMR0
#define pcl PCL
#define status STATUS
#define fsr FSR
#define osccal OSCCAL

#define tris TRIS
#define gpio GPIO
#endif


Обратите внимание, что строка #define tris TRIS в файле definitions.h пропущена - ее нужно добавить.
Можно написать #define trisgpio TRIS
или #define trisgpio TRISGPIO
или #define tris TRISGPIO.
Почему такое многообразие? Это связано с тем, что в файле pic12f508.h HiTech введены различные определения – производитель подстраховался. Есть и TRIS, и TRISGPIO.
// Register: GPIO - это описано в в файле pic12f508.h HiTech
volatile unsigned char GPIO @ 0x006;
volatile control unsigned char TRIS @ 0x006;
volatile control unsigned char TRISGPIO @ 0x006;


В файле 12F508.fcd нужно исправить trisio на tris или на trisgpio. Можно конечно и в definitions.h ввести строку #define trisio TRIS, но давайте придерживаться ДАТЫ.


Эти изменения справедливы для HiTech 9.83 для предыдущих версий нужно в дополнительном коде добавить определение #define __PIC12F508_H, потому что в старых версиях файл называется _12F508 и компилятор не находит его в файле definitions.h.

Думаю что после таких исправлений все должно работать.
Ну, а настройки конфигурации нужно делать в программаторе.
Хотя можно и описать в программе, с помощью директивы __CONFIG(х & х & х);.
Например __CONFIG(WDT_OFF & MCLRE_OFF & OSC_IntRC);
Это значит - Отключили Дог, Сброс как вход, Внутренний генератор.

// Configuration mask definitions - это определения для работы с конфигурацией
//
// Config Register: CONFIG
#define CONFIG 0x0FFF
// Oscillator Selection bits
// external RC oscillator
#define OSC_ExtRC 0xFFFF
// LP oscillator
#define OSC_LP 0xFFFC
// XT oscillator
#define OSC_XT 0xFFFD
// internal RC oscillator
#define OSC_IntRC 0xFFFE
// Watchdog Timer Enable bit
// WDT enabled
#define WDT_ON 0xFFFF
// WDT disabled
#define WDT_OFF 0xFFFB
// Code Protection bit
// Code protection off
#define CP_OFF 0xFFFF
// Code protection on
#define CP_ON 0xFFF7
// GP3/MCLR Pin Function Select bit
// GP3/MCLR pin function is MCLR
#define MCLRE_ON 0xFFFF
// GP3/MCLR pin function is digital input, MCLR internally tied to VDD
#define MCLRE_OFF 0xFFEF
У вас нет доступа для просмотра вложений в этом сообщении.
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе

Re: 12F508

Сообщение iwa12 (iwa12) » 15 июл 2012, 08:57

Сделал все правки которые Вы сказал. Но порты не работают! Точнее некорректно работают! Если на порт А4 подать (OUT) 1 то пишет:
Launching the compiler...
C:\Program Files\HI-TECH Software\PICC\9.83\bin\picc.exe --CHIP=12F508 -N48 Flowcode2.c
C:\Program Files\Flowcode\v5\FCD\..\CAL\PIC\PIC_CAL_String.c: 467: (750) constant operand to || or && (warning)
C:\Program Files\Flowcode\v5\FCD\..\CAL\PIC\PIC_CAL_String.c: 467: (765) degenerate unsigned comparison (warning)
Flowcode2.c: 55: (1090) variable "_FCV_A" is not used (warning)
Flowcode2.c: 54: (1090) variable "_FCV_G" is not used (warning)
Flowcode2.c: 79: (712) can't generate code for this expression
HI-TECH C Compiler for PIC10/12/16 MCUs (PRO Mode) V9.83
Copyright (C) 2011 Microchip Technology Inc.
Licensed for evaluation purposes only.
This licence will expire on Sat, 18 Aug 2012.
(908) exit status = 1
Return code = 1
Flowcode не смог откомпилировать код C блок-схемы из-за следующих ошибок:
Если Ваша блок-схема содержит код C, пожалуйста проверьте это тщательно. Если Ваша блок-схема не содержит C-кода, или Вы полностью проверили код, войдите в контакт с Технической поддержкой

Если же пишу в весь порт 255, то пишет:
Launching the linker/assembler...
C:\Program Files\HI-TECH Software\PICC\9.83\bin\picc.exe --CHIP=12F508 -N48 Flowcode2.c
C:\Program Files\Flowcode\v5\FCD\..\CAL\PIC\PIC_CAL_String.c: 467: (750) constant operand to || or && (warning)
C:\Program Files\Flowcode\v5\FCD\..\CAL\PIC\PIC_CAL_String.c: 467: (765) degenerate unsigned comparison (warning)
Flowcode2.c: 55: (1090) variable "_FCV_A" is not used (warning)
Flowcode2.c: 54: (1090) variable "_FCV_G" is not used (warning)

и релюшки переключаются! Но по битно порты не управляются!
Если же я использую порт А1 как вход, то выдаёт:
Launching the compiler...
C:\Program Files\HI-TECH Software\PICC\9.83\bin\picc.exe --CHIP=12F508 -N48 Flowcode2.c
C:\Program Files\Flowcode\v5\FCD\..\CAL\PIC\PIC_CAL_String.c: 467: (750) constant operand to || or && (warning)
C:\Program Files\Flowcode\v5\FCD\..\CAL\PIC\PIC_CAL_String.c: 467: (765) degenerate unsigned comparison (warning)
Flowcode2.c: 56: (1090) variable "_FCV_S" is not used (warning)
Flowcode2.c: 55: (1090) variable "_FCV_A" is not used (warning)
Flowcode2.c: 54: (1090) variable "_FCV_G" is not used (warning)
Flowcode2.c: 80: (712) can't generate code for this expression
HI-TECH C Compiler for PIC10/12/16 MCUs (PRO Mode) V9.83
Copyright (C) 2011 Microchip Technology Inc.
Licensed for evaluation purposes only.
This licence will expire on Sat, 18 Aug 2012.
(908) exit status = 1
Return code = 1
Flowcode не смог откомпилировать код C блок-схемы из-за следующих ошибок:
Если Ваша блок-схема содержит код C, пожалуйста проверьте это тщательно. Если Ваша блок-схема не содержит C-кода, или Вы полностью проверили код, войдите в контакт с Технической поддержкой
Ник: iwa12
Имя: iwa12
Заинтересованный
Заинтересованный
Информация о пользователе
Вернуться наверх

Re: 12F508

Сообщение iwa12 (iwa12) » 15 июл 2012, 16:05

Кстати, актуальна только правка в definitions.h (#define tris TRIS). А в файле 12F508.fcd, замена trisio на tris, аналогична замене trisio на gpio. Но я вставил правленый Вами файл (с tris).
Ник: iwa12
Имя: iwa12
Заинтересованный
Заинтересованный
Информация о пользователе
Вернуться наверх

Re: 12F508

Сообщение mim (mim) » 15 июл 2012, 18:24

iwa12 писал(а):Кстати, актуальна только правка в definitions.h (#define tris TRIS). А в файле 12F508.fcd, замена trisio на tris, аналогична замене trisio на gpio. Но я вставил правленый Вами файл (с tris).


"Как вы лодку назовете, так она и поплывет..."
Фрагмент ДАТЫ.jpg
У вас нет доступа для просмотра вложений в этом сообщении.
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе
Вернуться наверх

Re: 12F508

Сообщение iwa12 (iwa12) » 15 июл 2012, 20:48

mim писал(а):
iwa12 писал(а):Кстати, актуальна только правка в definitions.h (#define tris TRIS). А в файле 12F508.fcd, замена trisio на tris, аналогична замене trisio на gpio. Но я вставил правленый Вами файл (с tris).


"Как вы лодку назовете, так она и поплывет..."

Про "лодку" понятно! Но где мне дальше копать!
Но по битно порты не управляются!
Могу управлять только целым портом! Не могу управлять отдельными выводами!!!
Ник: iwa12
Имя: iwa12
Заинтересованный
Заинтересованный
Информация о пользователе
Вернуться наверх

Re: 12F508

Сообщение mim (mim) » 16 июл 2012, 06:23

iwa12 писал(а):Но где мне дальше копать!
Но по битно порты не управляются!
Могу управлять только целым портом! Не могу управлять отдельными выводами!!!

Замучил ты бабушку своими вопросами, заставляешь ее читать ДАТУ.
Я с таким МК не работал. На кой он мне сдался? Я в отпуске!!!
Вот что говорит ДАТА.
Регистр контроля управления TRIS работает только на ЗАПИСЬ - поэтому конструкции типа tris = tris | 0x0F не могут использоваться, потому что есть чтение (синим). Матриксы над этим голову не ломали!!! Как правильно переписать? Сейчас думать некогда.
Вот пример на СИ как нужно выдавать в порты побитно. Сначала настраиваешь все порты, а затем с ними работаешь через GP....
У вас нет доступа для просмотра вложений в этом сообщении.
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе
Вернуться наверх

Re: 12F508

Сообщение iwa12 (iwa12) » 16 июл 2012, 07:28

Извините, что отвлекаю Вас во время отпуска! Это святое! Как-нибудь на досуге посмотрите, пожалуйста, что можно сделать с 12f508, я в СИ полный профан! Большое спасибо за помощь!
Ник: iwa12
Имя: iwa12
Заинтересованный
Заинтересованный
Информация о пользователе
Вернуться наверх

Re: 12F508

Сообщение mim (mim) » 16 июл 2012, 12:20

iwa12 писал(а): я в СИ полный профан!

Я бы сказал покрепче...
Так кто мешает изучать СИ?
ЗЫ Пробуй вот эти файлы.
У вас нет доступа для просмотра вложений в этом сообщении.
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе
Вернуться наверх

Re: 12F508

Сообщение iwa12 (iwa12) » 17 июл 2012, 06:56

На вывод порты работают изумительно!!! Но теперь проблема на ввод! Ставлю команду на ввод порта А0, компилирую в чип - срабатывает вывод на все порты (выдаёт 1 на всё порты).
Ник: iwa12
Имя: iwa12
Заинтересованный
Заинтересованный
Информация о пользователе
Вернуться наверх

След.

Вернуться в Flowcode PIC

Кто сейчас на форуме

Пользователь просматривает форум: нет зарегистрированных пользователей