Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


Ответ
Опции темы

Изучение PIC C Compiler(CCS C)

Непрочитано 05.01.2021, 01:48   #1931
Prototup
Прописка
 
Аватар для Prototup
 
Регистрация: 07.05.2008
Адрес: Москва
Сообщений: 231
Сказал спасибо: 26
Сказали Спасибо 54 раз(а) в 19 сообщении(ях)
Prototup на пути к лучшему
По умолчанию 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.
Prototup вне форума   Ответить с цитированием
Непрочитано 05.01.2021, 07:45   #1932
NewWriter
Почётный гражданин KAZUS.RUN
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию 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.
NewWriter вне форума   Ответить с цитированием
Непрочитано 07.01.2021, 00:33   #1933
Prototup
Прописка
 
Аватар для Prototup
 
Регистрация: 07.05.2008
Адрес: Москва
Сообщений: 231
Сказал спасибо: 26
Сказали Спасибо 54 раз(а) в 19 сообщении(ях)
Prototup на пути к лучшему
По умолчанию

//*--------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
Prototup вне форума   Ответить с цитированием
Непрочитано 07.01.2021, 15:25   #1934
vavan1983
Почётный гражданин KAZUS.RUN
 
Аватар для vavan1983
 
Регистрация: 26.12.2007
Сообщений: 1,198
Сказал спасибо: 70
Сказали Спасибо 80 раз(а) в 69 сообщении(ях)
vavan1983 на пути к лучшему
По умолчанию 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;
}
Нажмите на изображение для увеличения
Название: Снимок.GIF
Просмотров: 0
Размер:	55.2 Кб
ID:	159737
vavan1983 вне форума   Ответить с цитированием
Непрочитано 08.01.2021, 16:04   #1935
Shadow-nx
Прохожий
 
Регистрация: 19.09.2020
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Shadow-nx на пути к лучшему
По умолчанию

Здравствуйте, помогите пожалуйста разобраться, намучился что ****...
В общем, есть 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 то кварцевый стабилизатор нужно исключительно по эту скорость подбирать.
Нажмите на изображение для увеличения
Название: Снимок.GIF
Просмотров: 0
Размер:	79.1 Кб
ID:	159780

Сообщение от vavan1983 Посмотреть сообщение
По приёму UART обрабатывай только в прерывании. Ты приходящии байты проворониваеш да и скорость в супер луппе у UARTa плавает.
было бы что в прерывании обрабатывать, оно даже не доходит до него, я поставил терминалы для просмотра того что приходит сразу с виртуального ком порта и после макса, там мусор, причем иногда даже разный)))

Сообщение от vavan1983 Посмотреть сообщение
И то нужно знать какая скорость от вашего конвертора в сторону USARTa если 9600 то кварцевый стабилизатор нужно исключительно по эту скорость подбирать.
Нажмите на изображение для увеличения
Название: Снимок.GIF
Просмотров: 0
Размер:	79.1 Кб
ID:	159780
а как это узнать, в даташите ничего нет
Миниатюры:
Нажмите на изображение для увеличения
Название: Proteus.PNG
Просмотров: 0
Размер:	49.4 Кб
ID:	159773   Нажмите на изображение для увеличения
Название: Proteus2.PNG
Просмотров: 0
Размер:	70.4 Кб
ID:	159775  

Последний раз редактировалось mike-y-k; 19.09.2022 в 01:56. Причина: 6.6
Shadow-nx вне форума   Ответить с цитированием
Непрочитано 08.01.2021, 23:03   #1936
vavan1983
Почётный гражданин KAZUS.RUN
 
Аватар для vavan1983
 
Регистрация: 26.12.2007
Сообщений: 1,198
Сказал спасибо: 70
Сказали Спасибо 80 раз(а) в 69 сообщении(ях)
vavan1983 на пути к лучшему
По умолчанию

Сообщение от Shadow-nx Посмотреть сообщение
там мусор, причем иногда даже разный)))
А что вы хотели система общения модуля с вашим pic16f наверное должна быть диалоговая.
pic16f873-pic16f877.pdf

Сообщение от Shadow-nx Посмотреть сообщение
было бы что в прерывании обрабатывать, оно даже не доходит до него, я поставил терминалы для просмотра того что приходит сразу с виртуального ком порта и после макса, там мусор, причем иногда даже разный)))
Конечно если вы мусор отправляите то и мусор в ответ.

Последний раз редактировалось mike-y-k; 19.09.2022 в 01:54. Причина: 6.6
vavan1983 вне форума   Ответить с цитированием
Непрочитано 08.01.2021, 23:48   #1937
Shadow-nx
Прохожий
 
Регистрация: 19.09.2020
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Shadow-nx на пути к лучшему
По умолчанию Re: Изучение PIC C Compiler(CCS C)

Сообщение от vavan1983 Посмотреть сообщение
А что вы хотели система общения модуля с вашим pic16f наверное должна быть диалоговая.
Вложение 159781
можете поподробнее обьяснить, я с реальным железом только начал работать. Вот как узнать скорость моего USB-UART модуля? и как настроить их нормальное общение?
Shadow-nx вне форума   Ответить с цитированием
Непрочитано 09.01.2021, 02:54   #1938
vavan1983
Почётный гражданин KAZUS.RUN
 
Аватар для vavan1983
 
Регистрация: 26.12.2007
Сообщений: 1,198
Сказал спасибо: 70
Сказали Спасибо 80 раз(а) в 69 сообщении(ях)
vavan1983 на пути к лучшему
По умолчанию

Вы уж простите нет времени вам оказать помощь, много времени понадобиться на это. Всё в ваших руках и знаниях.

Похоже кончилось то время когда сюда наивные и умные коды выкладывали готовые, больше такого не будет.

Кто были умные стали мудрые.

Я уже на одном сайте получил вечный бан, осталось и тут его заполучить

Последний раз редактировалось mike-y-k; 19.09.2022 в 01:52. Причина: 6.6
vavan1983 вне форума   Ответить с цитированием
Непрочитано 09.01.2021, 08:53   #1939
NewWriter
Почётный гражданин KAZUS.RUN
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию 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.
NewWriter вне форума   Ответить с цитированием
Непрочитано 26.02.2021, 19:47   #1940
26165
Частый гость
 
Регистрация: 25.10.2006
Сообщений: 16
Сказал спасибо: 0
Сказали Спасибо 61 раз(а) в 13 сообщении(ях)
26165 на пути к лучшему
По умолчанию Re: Изучение PIC C Compiler(CCS C)

CCS v5.101
https://cloud.mail.ru/public/fYr9/wcZNt4jTq
26165 вне форума   Ответить с цитированием
Эти 10 пользователя(ей) сказали Спасибо 26165 за это сообщение:
bolek4321 (28.02.2021), Eddy71 (26.02.2021), katalianin (14.04.2022), kgg_ussr (01.03.2021), Kogat (27.04.2021), tanveerriaz (27.02.2021), ThomaA (22.09.2021), welcome61 (26.02.2021), wolfeldt (28.02.2021), Кот Баюн (27.03.2021)
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
i2c+ccs pic Gladkih Микроконтроллеры, АЦП, память и т.д 9 18.04.2016 22:17
PIC BASIC PRO Compiler 2.47 dosikus Proteus, KiCAD и другие ECAD 27 05.12.2009 05:48
изучение IAR AVR C compiler granel Микроконтроллеры, АЦП, память и т.д 0 10.10.2008 20:45
PIC C Compiler PCWH458 sergxxx Микроконтроллеры, АЦП, память и т.д 9 23.09.2008 18:25
Не включается дебаггер в CCS C Compiler BigMazzi Микроконтроллеры, АЦП, память и т.д 4 19.09.2008 13:34


Часовой пояс GMT +4, время: 00:46.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.