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

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

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

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

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

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


 
Опции темы
Непрочитано 05.01.2021, 01:48  
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  
NewWriter
Почётный гражданин KAZUS.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,508
Сказал спасибо: 401
Сказали Спасибо 2,218 раз(а) в 1,316 сообщении(ях)
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  
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  
vavan1983
Почётный гражданин KAZUS.RU
 
Аватар для 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  
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  
vavan1983
Почётный гражданин KAZUS.RU
 
Аватар для 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  
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  
vavan1983
Почётный гражданин KAZUS.RU
 
Аватар для 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  
NewWriter
Почётный гражданин KAZUS.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,508
Сказал спасибо: 401
Сказали Спасибо 2,218 раз(а) в 1,316 сообщении(ях)
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  
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, время: 22:11.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot