05.01.2021, 01:48
|
|
Прописка
Регистрация: 07.05.2008
Адрес: Москва
Сообщений: 231
Сказал спасибо: 26
Сказали Спасибо 54 раз(а) в 19 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Доброго времени форумчане! Чё-то я совсем охренел от программирования, нужен свежий взгляд. Видимо я уже не вижу своих граблей!
Программусина простейшая, вернее это только фрагмент. Идея проста - получить данные из порта, занести их в структуру и выделить из неё нужные биты, для работы различных устройств.
Гляньте, а то уж компилятор стал ругаться на main (ну что совсем плохо!)
*** Error 173: Functions may not be nested
//*--------Function prototype---------*//
unsigned int cod (unsigned int ;
//*--------Function determination------*//
unsigned int cod (unsigned int {
union {
unsigned int8 z;
struct bits {
unsigned int kb:4; // подключение для клавиатуры Pin B0,B1,B2,B3.
unsigned int Vector_LR:2; //подключение для энкодера: импульс вправо,импульс влево. Pin B4,B5
unsigned int Reserved:2; //резерв Pin B6,B7
} Drive;
} un;
struct bits* P=NULL;//объявление указателя на структуру, начальная инициализация
P=&un;
Return p-›Vector_LR;// хотелось бы здесь видеть значение, полученное на входе от энкодера
//================================================== ============//
void main()
{
unsigned int8 info;//переменная для хранения результата чтения из порта В
WHILE(TRUE) {
info = input_b();// чтение и запись из порта В
cod(info);// здесь хотел получить результат чтения контактов энкодера
;;
}
}
Последний раз редактировалось Prototup; 05.01.2021 в 01:53.
|
|
|
|
05.01.2021, 07:45
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,508
Сказал спасибо: 401
Сказали Спасибо 2,218 раз(а) в 1,316 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Сообщения об ошибках то переводите, хотябы через гугл-переводчик. "Функция не может быть вложенной". То есть этот компилятор не допускает определение функции внутри другой функции.
По сути дела у вас пропущена скобка } после Return и перед main.
Кстати, разве Return допускается писать с заглавной буквы?
И я что-то не понял, что за жуть у вас там написана. Какие-то лишние переменные, какие-то присвоения адресов, какие-то навороченные union-ы поверх структуры, к чему все это? То ли не все скопировано сюда, то ли настолько безобразно написано. Вероятно, и то, и другое.
К тому в сообщении на форуме же код следует оформлять с помощью тега
[CODE]
текст кода
[/СОDE]
(кнопочка вверху в расширенном редакторе)
И не усложняйте простые дела всякими указателями, объединениями и структурами. Чем проще пишите, тем понятнее работает. "Принял - посчитал - отдал".
Если конкретно хотите прочитать входы, прочитанное хотите передать в функцию и получить дешифрованные значения, то следует делать так:
Код:
|
int ReadPort(void);
int Decode(int data);
int main(void)
{
int read_port;
int result;
read_port = ReadPort();
result = Decode(read_port);
}
int ReadPort(void)
{
return PORT_VALUE;
}
int Decode(int data)
{
if(data & 1)
return -1;
if(data & 2)
return 1;
if(data & 3)
return 0;
} |
А указатель - это по сути адрес переменной, и этот адрес - есть тоже переменная, под которую тратится место и выполняется дополнительная операция получения значения этого адреса.
Касательно энкодера, вам нужно получить только направление поворота в виде трех возможных значений -1, 0, +1. И впихивать втуда еще и клавиатуру оно нафик не нужно.
Последний раз редактировалось NewWriter; 05.01.2021 в 13:36.
|
|
|
|
07.01.2021, 00:33
|
|
Прописка
Регистрация: 07.05.2008
Адрес: Москва
Сообщений: 231
Сказал спасибо: 26
Сказали Спасибо 54 раз(а) в 19 сообщении(ях)
|
//*--------Function determination------*//
union {
// unsigned int8 z;//на (всякий) случай разборки байта
struct bits {
unsigned int kb:4; // подключение для клавиатуры Pin B0,B1,B2,B3.
unsigned int Vector_LR:2; //подключение для энкодера: импульс вправо,импульс влево. Pin B4,B5
unsigned int Reserved:2; //резерв Pin B6,B7
} Drive;
} un;
//================================================== ============//
void main()
{
unsigned int8 info;//переменная для хранения результата чтения из порта В
struct bits* P=NULL;//объявление указателя на структуру, начальная инициализация
P=&un;
WHILE(TRUE) {
info=0;
un= input_b();// чтениеиз порта В и запись в un
info=p-›Vector_LR;// здесь видно значение, полученное на входе от энкодера Pin B4,B5
info=p-›kb;// здесь видно значение, полученное от клавиатуры Pin B0,B1,B2,B3.
info=p-›Reserved;// здесь видно значение, полученное от зарезервированных Pin B6,B7
;;
}
}
Мой вариант более компактен и удобен (мне так кажется...) Ниже приведён скан с симуляцией программы, в ней можно видеть как в одном байте приходят данные с опроса клавиатуры и энкодера (резервные пока не использовал) и как просто эти сигналы "распарсить"! Цель преследовалась испытать компилятор, т.к. бытовало мнение, что для работ с указателями, структурами, объединениями и т.д. лучше пользовать не CCS, а Х8, Х16 и т.д. Но эта задачка легко была решена существующими средствами.
Сообщение от NewWriter
|
И впихивать втуда еще и клавиатуру оно нафик не нужно.
|
Ну что поделать- мне так надо, я мож извращенец... Прощу понять и простить...
Спасибо за критику NevWriter! Всех с Рождеством!
Ну и конечно, в Новый год, хотелось бы и новый релиз, чёй то давно свежачка от CCS не видно. Где угощение?
Последний раз редактировалось mike-y-k; 19.09.2022 в 01:56.
Причина: 6.6
|
|
|
|
07.01.2021, 15:25
|
|
Почётный гражданин KAZUS.RU
Регистрация: 26.12.2007
Сообщений: 1,198
Сказал спасибо: 70
Сказали Спасибо 80 раз(а) в 69 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Чёто как то странно в структуру объединения типов UNION вложена структура struct bits. Получается просто придётся обращаться к структуре struct bits через union. Допустим нужно объединить в одной переменной LONG четыре переменных SHORT тогда в помощь union
Код:
|
#include ‹iostream›
using namespace std;
union{
unsigned short unsh[4];
unsigned long unlo;
}muuni;
int main()
{
muuni.unsh[0]=0x11;
muuni.unsh[1]=0x22;
muuni.unsh[2]=0x33;
muuni.unsh[3]=0x44;
cout ‹‹ hex ‹‹muuni.unlo ‹‹ endl;
return 0;
} |
|
|
|
|
08.01.2021, 16:04
|
|
Прохожий
Регистрация: 19.09.2020
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Здравствуйте, помогите пожалуйста разобраться, намучился что ****...
В общем, есть USB UART конвертер https://www.chipdip.ru/product/ft232...-board-micro-2 работает без нареканий, в терминале проверял, все окей, собрал в протеусе схему, взял кусок кода из примера в интернете, там правда стояли еще задержки, с задержками все пакеты уходили, а приходил один мусор, если вообще приходил, убрал все задержки, теперь сообщение приходит но не целиком, плюс предупреждение от которого не знаю как избавиться, пытался через #byte OSCTUNE = 0x90 изменять состояние регистра ничего не вышло, ошибка осталась
Код:
|
[PIC16 MEMORY] PC=0x00E6. OSCTUNE register is not modelled [U3] |
Код:
|
#include ‹16F887.h›
#fuses NOMCLR, INTRC_IO, NOBROWNOUT, NOLVP
#use delay(clock = 8MHz)
#use rs232(UART1, baud = 9600)
const char message[] = "PIC16F887 microcontroller UART example" ;
int8 i = 0, j;
void main(){
setup_oscillator(OSC_8MHZ); // Set internal oscillator to 8MHz // Wait 2 seconds
// Print text
printf("Hello world!");
// Print list of characters
printf("\n\r"); // Start new line
while(message[i] != '\0'){
putc(message[i]); // Write character // Wait 100 ms
i++; // Increment i
}
// Print numbers
printf("\n\r"); // Start new line
for(i = 0; i ‹ 21; i++){
printf("%u\n\r", i); // Print i and start new line
}
putc(0x55);
// Receive and send data via UART
} |
По приёму UART обрабатывай только в прерывании. Ты приходящии байты проворониваеш да и скорость в супер луппе у UARTa плавает.
И то нужно знать какая скорость от вашего конвертора в сторону USARTa если 9600 то кварцевый стабилизатор нужно исключительно по эту скорость подбирать.
Сообщение от vavan1983
|
По приёму UART обрабатывай только в прерывании. Ты приходящии байты проворониваеш да и скорость в супер луппе у UARTa плавает.
|
было бы что в прерывании обрабатывать, оно даже не доходит до него, я поставил терминалы для просмотра того что приходит сразу с виртуального ком порта и после макса, там мусор, причем иногда даже разный)))
Сообщение от vavan1983
|
И то нужно знать какая скорость от вашего конвертора в сторону USARTa если 9600 то кварцевый стабилизатор нужно исключительно по эту скорость подбирать.
|
а как это узнать, в даташите ничего нет
Последний раз редактировалось mike-y-k; 19.09.2022 в 01:56.
Причина: 6.6
|
|
|
|
08.01.2021, 23:03
|
|
Почётный гражданин KAZUS.RU
Регистрация: 26.12.2007
Сообщений: 1,198
Сказал спасибо: 70
Сказали Спасибо 80 раз(а) в 69 сообщении(ях)
|
Сообщение от Shadow-nx
|
там мусор, причем иногда даже разный)))
|
А что вы хотели система общения модуля с вашим pic16f наверное должна быть диалоговая.
pic16f873-pic16f877.pdf
Сообщение от Shadow-nx
|
было бы что в прерывании обрабатывать, оно даже не доходит до него, я поставил терминалы для просмотра того что приходит сразу с виртуального ком порта и после макса, там мусор, причем иногда даже разный)))
|
Конечно если вы мусор отправляите то и мусор в ответ.
Последний раз редактировалось mike-y-k; 19.09.2022 в 01:54.
Причина: 6.6
|
|
|
|
08.01.2021, 23:48
|
|
Прохожий
Регистрация: 19.09.2020
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Сообщение от vavan1983
|
А что вы хотели система общения модуля с вашим pic16f наверное должна быть диалоговая.
Вложение 159781
|
можете поподробнее обьяснить, я с реальным железом только начал работать. Вот как узнать скорость моего USB-UART модуля? и как настроить их нормальное общение?
|
|
|
|
09.01.2021, 02:54
|
|
Почётный гражданин KAZUS.RU
Регистрация: 26.12.2007
Сообщений: 1,198
Сказал спасибо: 70
Сказали Спасибо 80 раз(а) в 69 сообщении(ях)
|
Вы уж простите нет времени вам оказать помощь, много времени понадобиться на это. Всё в ваших руках и знаниях.
Похоже кончилось то время когда сюда наивные и умные коды выкладывали готовые, больше такого не будет.
Кто были умные стали мудрые.
Я уже на одном сайте получил вечный бан, осталось и тут его заполучить
Последний раз редактировалось mike-y-k; 19.09.2022 в 01:52.
Причина: 6.6
|
|
|
|
09.01.2021, 08:53
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,508
Сказал спасибо: 401
Сказали Спасибо 2,218 раз(а) в 1,316 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Мда уж, трехкратное подорожание СТМ-ок снова возвращает людей на ПИК-и Это чтож, снова вспоминать ПИК-и и доставать их из ящика?
Сообщение от Shadow-nx
|
пытался через #byte OSCTUNE
PC=0x00E6. OSCTUNE register is not modelled [U3]
|
Уже второй чел. Ну вы, граждане, хоть через гугл-переводчик то переводите сообщения! Сказано же - "Регистр OSCTUNE не смоделирован" в модели микроконтроллера. Оно и логично - в модели частота микроконтроллера жестко задана через диалоговое окошко и ее изменение в коде программы невозможно. А в реальном железе как раз возможна подстройка частоты этим регистром.
Далее, если у вас чето там не так, значит у вас скорость порта не соответствует настроенной скорости UART-а в микроконтроллере.
И вообще - изучайте мануалы, без них никуда.
Замечания по схеме в протеусе:
В Протеусе для симуляции преобразователь MAX232 НЕ нужен, там работает всё и без него напрямую.
Так же для симуляции не нужен кварц на микроконтроллере, потому что частота микроконтроллера задается в его свойствах через диалоговое окошко.
Для дисплея так же не нужен резистор регулировки контраста, в симуляции это свойство не поддерживается.
И еще раз - читайте мануал. Не умеете читать - возьмите Ардуино и не мучайте себя и других. Там для таких неумех всё готовое уже есть.
Последний раз редактировалось NewWriter; 09.01.2021 в 16:19.
|
|
|
|
26.02.2021, 19:47
|
|
Частый гость
Регистрация: 25.10.2006
Сообщений: 16
Сказал спасибо: 0
Сказали Спасибо 61 раз(а) в 13 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
|
|
|
Эти 10 пользователя(ей) сказали Спасибо 26165 за это сообщение:
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:11.
|
|