Перейти к содержанию

Bugrim

Members
  • Постов

    235
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные Bugrim

  1. Спасибо Alex.

    С этим кусочком разобрался. А вот другая запара - почему хай тек так компилирует:

    Код на С:

    ...
    if (razrad==0b01000000)
    razrad=1;
    else
    razrad<<1;
    }
    

    Дизасемблер:

    ...
    103:				 if (razrad==0b01000000)
    0EF 087A	 MOVF 0x7a, W
    0F0 3A40	 XORLW 0x40
    0F1 1D03	 BTFSS 0x3, 0x2
    0F2 28DC	 GOTO 0xdc
    104:				 razrad=1;
    0F3 3001	 MOVLW 0x1
    105:				 else
    106:				 razrad<<1;
    107:			 }
    

    И if не так откомпилировал и else обрабатывать не хочет.

  2. Доброго времени суток.

    Прошу помощи при написании программы (хай тек) часов объявляю шаблон структуры:

    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 будут производиться схожие операции, целесообразно применять функции, но вот как в функции указать что операция будет происходить с конкретной структурой?

  3. Примеры идут, даже хэлп по этой библиотеке, но на функции, указанные в хэлпе компилятор ругается. И я понимаю, что в моем случае не все функции должны быть доступны.

  4. С новым годом ув. форумчане. Желаю в новом году "трезвых" идей и удачных проектов.

    Ну а теперь, собственно говоря, по моему вопросу.

    Цель: создать USB устройство на базе PIC18F14K50 которое, определялось на ПК как com порт.

    Скачал библиотеки Microchip Application Libraries, в этих библиотеках есть вкладка MCHPFSUSB Library. Я так понимаю данная библиотека предназначена для собирания кода отвечающего за USB протокол. Запускаю программу USBConfig, устанавливаю:

    post-33913-0-66142400-1357040943_thumb.jpg

    post-33913-0-32605500-1357040933_thumb.jpg

    нажимаю generate. Получаю два файла: usb_config.c, usb_config.h. Компилирую, по мере ошибок, связанных с отсутствием файлов, нахожу их в папке MCHPFSUSB Library и копирую их в папку проекта. Создаю новый файл, для написания своей программы, и тут вопрос - какие функции для управления USB мне доступны? И порядок действий мой правильный?

  5. Добрый день. Прошу Вашей помощи. Вот функция:

    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. В чем тут беда?

  6. Доброй ночи. Не много в недоумении поведением 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 раза дольше. Это так и есть или я не корректно что то записал?

  7. Добрый день. Начал изучать HI-TEC и сразу, бъет по глазам, чувствительность его к регистру (ВЕРХНИЙ, нижний). На асме я это обходил установкой "/c-" вопциях проекта. А вот с HI-TEC - не могу разобраться. Прошу Ваших подсказок. За ранее благодарен.

  8. Добрый день. Прошу помощи по алгоритму вычисления арктангенса. Наверняка кто то сталкивался с такой задачей и может поделится кодом. Точность вычисления - 0,1 градуса, придел вычислений - 0 - 90 градусов. Предполагаемый контроллер PIC12F...

    Заранее благодарен.

  9. ANSEL - определяет вид вывода 1=аналоговый вход ,0=цифровой вход/выход

    Это я знаю. Но - Где определяет? По какому принципу? В ANSEL - 8 бит, а входов/выходов в МК - 12.

  10. Доброго времени суток всем. Процшу Вашей помощи в настройке данного контроллера. Настроить хочу следующим образом: Порт А - выходы, Порт С - входа, рпичем 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. То что это выбор аналогового подключения - я понял. Авто как его применять и какой байт за что отвечает - вот вопрос. Моделирую в ПРОТЕУСЕ.

    За ранее благодарен.

  11. Что ты хочеш - не понятно.

    У меня через com порт на PIC подаю данные, в зависимости от их значений происходит управление внешним объектом. Для этого надо знать программирование ПК, в моем случае VB, для посылки данных в com порт, а так же уметь програмировать PIC. Все зависит от чтого что тебе доступно и какие у тебя цели - а далее выбор PICа, и порта подключания (COM, LPT, USB и т.д.)

  12. Добрый день! Прошу Вашей помощи по работе с шиной I2C в протеусе. Хочу записать данные в 24С512 и считать что записал. Однако, чтение, происходит с прикрепленного файла, а записываемые данные кудуто пропазают, или я не правильно записую. Вот что показывает i2c отладчик.

    post-33913-0-20441300-1301152999_thumb.jpg

    Подскажите где ошибка.

  13. Добрый день. Прошу помощи. Не знаю с какого бока подойти к этой проблеме. Проект почти готов, время собирать, а вот это...

    Повыкидовав лишнее, оставил кусочек с интересубщей проблемой, функция "кусочка" - суммирование числа (количества импульсов) накопившегося на счетчике с предыдущим рзльтатом. При отладке программы в протеусе в пошаговом, точнее по одному циклу программы, сбоев не наблюдал - что надо, то и в результате. Если убрать точку останова, запустить, на время, после остановить, то время от времени появляется не соответствие - количество импульсов, подсчитаных счетчиком не соответствует числу подсчитаным программой.

    Такая ошибка представлена на рисунка. Не соблюдается равенство!

    post-33913-0-33664000-1295728791_thumb.jpg

    Кто "врет" программа, или протеус?

    Принцип работы таков: U3, U5, U6, U8 двоично - десятичные счетчики из них происходит запись в сдвиговые регистры U7, U9, после чего двоично - десятичные счетчики обнуляются. Далше они опять накапливают импульсы. В это время PIC считывает данные с сдвиговых регистров и сумирует их с предыдущими значениями.

    Счетчики U14-U17+индикаторы обеспечивают лишь наглядность накопившейся информации для проверки регистров PICa.

    Прошу знатоков помочь в этом вопросе.

    test.rar

×
×
  • Создать...