-
Постов
235 -
Зарегистрирован
-
Посещение
Тип контента
Профили
Форумы
Блоги
Сообщения, опубликованные Bugrim
-
-
То есть объявляю функцию:
void inc_secunda(struct dannie*);
Вызов функции делаю так:
inc_secunda(&hasi);
А сама функция:
void inc_secunda(hasy_dan) { hasy_dan.ed_sek++; if (hasy_dan.ed_sek==10) { hasi.des_sek++; hasi.ed_sek=0; } }
Но что то не так ругается.
0 -
Не правильно выразился. Как передать аргумент функции для того что бы действия в функции происходили то ли с hasi то ли с budilnik1.
0 -
Доброго времени суток.
Прошу помощи при написании программы (хай тек) часов объявляю шаблон структуры:
struct dannie { unsigned ed_sek:4; unsigned des_sek:4; unsigned ed_min:4; unsigned des_min:4; unsigned ed_has:4; unsigned des_has:4; };
Далее объявляю сами структуры:
struct dannie hasi @ 0x30,budilnik1 @ 0x33, budilnik2 @ 0x36;
Далее, что для hasi, что для budilnik1 будут производиться схожие операции, целесообразно применять функции, но вот как в функции указать что операция будет происходить с конкретной структурой?
0 -
Примеры идут, даже хэлп по этой библиотеке, но на функции, указанные в хэлпе компилятор ругается. И я понимаю, что в моем случае не все функции должны быть доступны.
0 -
С новым годом ув. форумчане. Желаю в новом году "трезвых" идей и удачных проектов.
Ну а теперь, собственно говоря, по моему вопросу.
Цель: создать USB устройство на базе PIC18F14K50 которое, определялось на ПК как com порт.
Скачал библиотеки Microchip Application Libraries, в этих библиотеках есть вкладка MCHPFSUSB Library. Я так понимаю данная библиотека предназначена для собирания кода отвечающего за USB протокол. Запускаю программу USBConfig, устанавливаю:
нажимаю generate. Получаю два файла: usb_config.c, usb_config.h. Компилирую, по мере ошибок, связанных с отсутствием файлов, нахожу их в папке MCHPFSUSB Library и копирую их в папку проекта. Создаю новый файл, для написания своей программы, и тут вопрос - какие функции для управления USB мне доступны? И порядок действий мой правильный?
0 -
Через volatile объявил переменную dan - заработало. За ссылку спасибо.
0 -
__CONFIG (LP & LVPDIS & MCLRDIS & BORDIS & WDTDIS & PWRTDIS ); char dan; bit flagyt0; void interrupt T0(void ) { flagyt0=1; T0IF=0; } void main () {
0 -
Добрый день. Прошу Вашей помощи. Вот функция:
ompriyom() { char x; TMR0=133; T0IF=0; T0IE=1; flagyt0=0; for (x=1;x<8;) { while (1==flagyt0) { TMR0=133; if (RA3==0) dan &=~(1<<1); else dan |=(1<<1); x++; dan<<=1; flagyt0=0; } } T0IE=0; }
Переменная dan - char, глобальная. Хай тек никак не хочет компилировать if else и выдает сообщение:variable "_dan" is not used. В чем тут беда?
0 -
Вопрос снят. Установил другой (другую версию), компилирует как я хочу.
0 -
-
Приведение к такому виду:
#include <htc.h> void main () { char bb; bb++; }
не дает никаких результатов, дизасемблирование такое же.
0 -
Доброй ночи. Не много в недоумении поведением hi-tech. Объявляю переменную типа char, делаю инкримент (++) (асме адина команда incf). Здесь в дизасемблеере hi-tech: загрузка в аккумулятор 1, сохранение аккумулятора в регистре, загрузка этого регистра, сложение аккумулятора с переменной.
#include <htc.h> void main () { char bb; ++bb; }
3: #include <htc.h> 4: void main () 5: { 6: char bb; 7: ++bb; 005 3001 MOVLW 0x1 006 00A1 MOVWF 0x21 007 0821 MOVF 0x21, W 008 07A0 ADDWF 0x20, F 8: } 009 2800 GOTO 0
В результате в место одной команды имеем 4. Обычная, на мой взгляд, операция, а выполняется в 4 раза дольше. Это так и есть или я не корректно что то записал?
0 -
То есть такой возможность нет?
0 -
Добрый день. Начал изучать HI-TEC и сразу, бъет по глазам, чувствительность его к регистру (ВЕРХНИЙ, нижний). На асме я это обходил установкой "/c-" вопциях проекта. А вот с HI-TEC - не могу разобраться. Прошу Ваших подсказок. За ранее благодарен.
0 -
А можно асемблерные файлы выложить?
0 -
Входные данные, скоре всего, будут изменяться от 0 до 1 (может до 2).
0 -
преобразование данных акселерометра и вычисление угра наклона относительно горизонтали
0 -
На Си не програмировал, пользовался асм. Скорость вычисления особо не интересует.
0 -
Добрый день. Прошу помощи по алгоритму вычисления арктангенса. Наверняка кто то сталкивался с такой задачей и может поделится кодом. Точность вычисления - 0,1 градуса, придел вычислений - 0 - 90 градусов. Предполагаемый контроллер PIC12F...
Заранее благодарен.
0 -
ANSEL - определяет вид вывода 1=аналоговый вход ,0=цифровой вход/выход
Это я знаю. Но - Где определяет? По какому принципу? В ANSEL - 8 бит, а входов/выходов в МК - 12.
0 -
Доброго времени суток всем. Процшу Вашей помощи в настройке данного контроллера. Настроить хочу следующим образом: Порт А - выходы, Порт С - входа, рпичем portc,0 - вход АЦП. Настраиваю следующим образом:
;Настройка порта А bcf STATUS,RP0 clrf PORTA movlw 07h movwf CMCON bsf STATUS,RP0 clrf ANSEL movlw b'00000000' movwf TRISA bcf STATUS,RP0 movlw h'ff' movwf porta ;Настройка порта C bcf STATUS, RP0 clrf PORTC bsf STATUS, RP0 clrf ansel movlw b'11111111' movwf TRISC bcf STATUS, RP0 ;Настнойка АЦП bank1 movlw b'00110010';Выбор синхронизации АЦП - внутрений RC генератор movwf adcon1 bsf pie1,adie ; Разрешение включения прерывания от АЦП movlw b'00000000' movwf ansel ;выбор ANS0 как аналоговый вход bank0 movlw b'10010001' movwf adcon0 ;Настройка АЦП на правое выравнивание,без опорного напряжения ;выбор AN4 как входа АЦП bsf intcon,peie ; Разрешение переферийных прерываний bsf intcon,gie ; Глобальное разрешение прерываний
В результате АЦП - работает, портА - работает, а цифровой вход RC4 - прогрпмма не определяет взодное значение, постоянно читает как 1. И объясните что это за регистр ANSEL. То что это выбор аналогового подключения - я понял. Авто как его применять и какой байт за что отвечает - вот вопрос. Моделирую в ПРОТЕУСЕ.
За ранее благодарен.
0 -
Что ты хочеш - не понятно.
У меня через com порт на PIC подаю данные, в зависимости от их значений происходит управление внешним объектом. Для этого надо знать программирование ПК, в моем случае VB, для посылки данных в com порт, а так же уметь програмировать PIC. Все зависит от чтого что тебе доступно и какие у тебя цели - а далее выбор PICа, и порта подключания (COM, LPT, USB и т.д.)
0 -
-
Добрый день. Прошу помощи. Не знаю с какого бока подойти к этой проблеме. Проект почти готов, время собирать, а вот это...
Повыкидовав лишнее, оставил кусочек с интересубщей проблемой, функция "кусочка" - суммирование числа (количества импульсов) накопившегося на счетчике с предыдущим рзльтатом. При отладке программы в протеусе в пошаговом, точнее по одному циклу программы, сбоев не наблюдал - что надо, то и в результате. Если убрать точку останова, запустить, на время, после остановить, то время от времени появляется не соответствие - количество импульсов, подсчитаных счетчиком не соответствует числу подсчитаным программой.
Такая ошибка представлена на рисунка. Не соблюдается равенство!
Кто "врет" программа, или протеус?
Принцип работы таков: U3, U5, U6, U8 двоично - десятичные счетчики из них происходит запись в сдвиговые регистры U7, U9, после чего двоично - десятичные счетчики обнуляются. Далше они опять накапливают импульсы. В это время PIC считывает данные с сдвиговых регистров и сумирует их с предыдущими значениями.
Счетчики U14-U17+индикаторы обеспечивают лишь наглядность накопившейся информации для проверки регистров PICa.
Прошу знатоков помочь в этом вопросе.
0
Язык СИ для микроконтроллеров
в МК для начинающих
Опубликовано · Изменено пользователем Bugrim
Спасибо Alex.
С этим кусочком разобрался. А вот другая запара - почему хай тек так компилирует:
Код на С:
Дизасемблер:
И if не так откомпилировал и else обрабатывать не хочет.