Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Масив от 8 бита (MPLAB, XC8, PIC18F4550)
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=14915
Страница 1 от 1

Автор:  slav4o.com [ Съб Ное 26, 2016 9:28 pm ]
Заглавие:  Масив от 8 бита (MPLAB, XC8, PIC18F4550)

//Процесора е PIC18F4550 , работна среда MPLAB IDE v8.92, компилатор XC8

За мое удобство използвам един тип наречен bittype
Код:

typedef union{
    struct{
        unsigned B0 : 1;
        unsigned B1 : 1;
        unsigned B2 : 1;
        unsigned B3 : 1;
        unsigned B4 : 1;
        unsigned B5 : 1;
        unsigned B6 : 1;
        unsigned B7 : 1;
        unsigned B8 : 1;
    }bits;
    unsigned char byte;
}bittype;

bittype variable;

variable.byte = 0xFF; // променливата я разглеждам като байт и го задавам да е 255 (0xFF)

variable.bits.B7 = 0; // тука вече нулирам бит номер 7 (най-старшия) и тя става 127 (0x7F)

Това е доста удобно и ми върши работа. Днес обаче в един мой проект ми потрябва да укажа номера на бита чрез променлива. Опитах се да направя масив от битове, но уви не се получи. Накрая успях като добавих следния ред в моя union:
Код:
struct{
   bitindex[8] : 1;
}bitarray;

И така моят union вече е union от три неща които са по 8 бита : от една структура от 8 бита с имена, от един байт, и от един масив от 8 бита. Всичко изглеждаше добре. Дори в програмата имах следната проверка if(variable.bitarray.bitindex[0] == 1) която се оказа, че работи. Когато обаче в проверката задам друг номер на бита от масива, компилатора (XC8) дава грешка. Това нещо може ли да се направи изобщо ? Проблема е че ми трябва да управлявам 1000 светодиода, а процесора има само 2048 байта които не ми стигат, понеже искам да имам за всеки светодиод по 2 страници на паметта.

Автор:  dan [ Съб Ное 26, 2016 9:44 pm ]
Заглавие:  Re: Масив от 8 бита (MPLAB, XC8, PIC18F4550)

slav4o.com написа:
//Процесора е PIC18F4550 , работна среда MPLAB IDE v8.92, компилатор XC8
... Днес обаче в един мой проект ми потрябва да укажа номера на бита чрез променлива. Опитах се да направя масив от битове, но уви не се получи. ....

Това мисля, че няма как да се получи. Номерът на бита трябва да е известен към момента на компилиране.
Вариантът е да го направиш с лог. оператор И или ИЛИ и преместване (шифтване).

Автор:  michev [ Съб Ное 26, 2016 11:07 pm ]
Заглавие:  Re: Масив от 8 бита (MPLAB, XC8, PIC18F4550)

Не разбирам защо се опитваш да правиш подобни гимнастики. Какво му има на стандартния начин?
Код:
variable.bits |= (1<<i);

Код:
variable.bits &= ^(1<<i);

където i е номера на бита дето ще разбутваш.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/