Отговори на тема  [ 40 мнения ]  Отиди на страница Предишна  1, 2, 3
CRC библиотека 
Автор Съобщение
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Вто Фев 06, 2007 2:45 am
Мнения: 263
Мнение Re: CRC библиотека
По-сокоро нещо такова трябва да е:
Код:
INTCON = ....;
T0CON = ....;
INTCON.TMR0IF = 0;
while (0 == INTCON.TMR0IF) {}
return;


Вто Окт 27, 2015 3:33 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Окт 25, 2015 1:42 pm
Мнения: 23
Мнение Re: CRC библиотека
таймера го направих ето така :

#include <p18f67j60.h>
void timer_us(unsigned int time)
{ unsigned int max_num=65525 ;
static struct diff
{
unsigned char MSB;
unsigned char LSB;
}unsigned razlika={0,0};
diff razlika=max_num-time ;
TMR0L=razlika.LSB;
TMR0H=razlika.MSB;
INTCON=0b10100000 ;
T0CON=0b10000000 ;
while(T0CONbits.TMR0ON==1)
{NOP ; }
}


Чет Окт 29, 2015 4:35 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Окт 25, 2015 1:42 pm
Мнения: 23
Мнение Re: CRC библиотека
Но имам проблем при компилирането на тази подпрограма :

#include <p18f67j60.h>
void send_command(unsigned char command)
{ unsigned int i, c ;
bit bufbus=0 ;
for(i=0; i<8; i++)
{
bufbus=commmand;
if(bufbus==1)
{PORTBbits.RB5=0 ;
for(c=0; c<6; )
{ c++ ; }
PORTBbits.RB5=1 ;
timer_us(45) ;
}
else
{ PORTBbits.RB5=0 ;
timer_us(60) ;
}
command>>1 ;
}
}

въпреки, че думата "bit" е позната на компилатора ми казва, че имам синтактична грешка. А на мен ми трябва тази променлива. Също така ми изписва чe command не е дефинирана.


Чет Окт 29, 2015 4:52 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Юли 11, 2007 10:16 am
Мнения: 1730
Мнение Re: CRC библиотека
Дали ще е бит или байт (unsigned char) е все тая. Няма да спестиш нищо.
Проблема с "command" ти е грешното изписване (с 3 m-та), заради което ме подведе търсенето и сега си редактирах поста.
Използвай "code" таг да си постваш кода, че така е супер нечетим.


Чет Окт 29, 2015 5:10 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 11:22 pm
Мнения: 3084
Мнение Re: CRC библиотека
bufbus=command;

Това е доста фриволен код.

Не ти трябва 'bufbus',
вместо 'if(bufbus==1)'
напиши 'if(command & 1)!=0)' .

for(c=0; c<6; )
{ c++ ; }

Тоя цикъл какво прави?

Интересно, че не ти дава грешки за липсващи ';' . Виж дали има такава настройка и
я включи.


Чет Окт 29, 2015 5:50 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Окт 25, 2015 1:42 pm
Мнения: 23
Мнение Re: CRC библиотека
Така ще стане, но как да разбирам command & 1 ? А относно цикъла това е грешка на програмиста, която си оправи.
Такава настройка има и е включена. А какъв може да е проблема да ми излиза грешка при дефиниране на bit ?


Чет Окт 29, 2015 7:26 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 11:22 pm
Мнения: 3084
Мнение Re: CRC библиотека
& -побитово умножение/операция И

може да не ти позволява локални променливи от тоя тип. пробвай да я дефинираш глобално - за изясняване на проблема. всъщност е нормално при малките процесори да има някакви ограничения в компилатора.


Чет Окт 29, 2015 8:13 pm
Профил
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Вто Фев 06, 2007 2:45 am
Мнения: 263
Мнение Re: CRC библиотека
@ЕнжЕнера, написал си виц. Земи:
Код:
#include <p18f67j60.h>

#define max_num   65525U

void timer_us(unsigned int   time)
{
    time = (max_num - time);

    TMR0L = (unsigned char) time;
    TMR0H = (unsigned char)(time >> 8);
    INTCON = 0b10000000;  // Няма нужда от прекъсване от TMR0, щото така или иначе малко по-долу чакаш в безкраен цикъл!
    T0CON = 0b10000000;

    while (INTCONbits.TMR0IF == 0) {}
    T0CONbits.TMR0ON = 0;
}

Имам смътно усещане, че трябва да се получи софтуерен УАРТ от тоя 'код'. Ако съм познал, трябва да е нещо такова:
Код:
void send_command(unsigned char command)
{
    unsigned char i;
   
    PORTBbits.RB5 = 0;
    timer_us(60);

    for (i = 0; i < 8; i++)
    {
        if (0 != (command & 1))
        {
             PORTBbits.RB5 = 1;
        }
        else
        {
             PORTBbits.RB5 = 0;
        }

        timer_us(60);
        command >>= 1;
    }
   
    PORTBbits.RB5 = 1;
    timer_us(60);
}


Пет Окт 30, 2015 2:48 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Окт 25, 2015 1:42 pm
Мнения: 23
Мнение Re: CRC библиотека
Даа, голям смях. Направил съм грешка и съм си я оправил. А кода е за комуникация по one-wire за това и кода за изчисляване на CRC е странен. Просто след последния бит проверява съдържанието дали е 0. Имам проблем с дефинирането на пинове 0-5 на порт В като входове,а 6 и 7 изходи. Изписва ми , че имам синтактична грешка.

#include <p18f67j60.h>
#pragma config WDT=OFF
#pragma config FOSC=HS
TRISB=0b00111111;


Пет Окт 30, 2015 4:39 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Юли 11, 2007 10:16 am
Мнения: 1730
Мнение Re: CRC библиотека
Това
Код:
TRISB=0b00111111;
ако ти е такова хвърчащо - т.е извън функция е нормално да не се компилира.


Пет Окт 30, 2015 4:52 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 40 мнения ]  Отиди на страница Предишна  1, 2, 3

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 11 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни