Сейчас у себя убрал volatile, и все стало точно как у вас..... Что это было.....
Сейчас у себя убрал volatile, и все стало точно как у вас..... Что это было.....
Код: Выделить всё
ReceiveData <<=1;
ReceiveData |=1;
Код: Выделить всё
72: ReceiveData <<=1;
009E 010F MOVLB 0xf
00A0 90D8 BCF 0xfd8, 0, ACCESS
00A2 370A RLCF 0xa, F, BANKED
00A4 370B RLCF 0xb, F, BANKED
00A6 370C RLCF 0xc, F, BANKED
00A8 370D RLCF 0xd, F, BANKED
73: ReceiveData |=1;
00AA 010F MOVLB 0xf
00AC 810A BSF 0xa, 0, BANKED
74:
Код: Выделить всё
ori r24,0x01Код: Выделить всё
//передача серии 32 бита
void Transmit (void)
{
TransmitData=0x00ff00ff;
for (unsigned char i=0; i<32; i++)
{
if (TransmitData & (1<<(31-i)))
TransmitBit1();
else
TransmitBit0();
}
}В PIC18 есть множитель тактовой частоты на 4, так что 1 маш. цикл = такту генератора. И все команды проходят за 1 М/Ц, кроме переходов.а у PIC вроде за 4.....
Попробуйте такЕще вопросик, чтобы не расслаблялись.....
Код: Выделить всё
void Transmit (void)
{
TransmitData=0x00ff00ff;
for (unsigned char i=0; i<32; i++)
{
if (TransmitData & (0x80000000)) // Или &(1<<31)
TransmitBit1();
else
TransmitBit0();
TransmitData <<=1;
}
}
так вроде проглатывает.....Аlex писал(а):& 0x80000000
а так пишет "warning: left shift count >= width of type" хотя тип long как я понимаю состоит из 32 бит.....Аlex писал(а):& (1<<31)
Ой да шоп я без вас делал..... умные вы мои.....Kavka писал(а):if (TransmitData & (1UL<<(31-i)))
Так а причём тут множитель? Кому-то можно xасовой кварц поставить и PLL-кой разогнать до 100МГц, так что, сравним быстродействие с pic18 при часовом кварце?Аlex писал(а):В PIC18 есть множитель тактовой частоты на 4, так что 1 маш. цикл = такту генератора. И все команды проходят за 1 М/Ц, кроме переходов.
По этому, я бы ещё поспорил на счёт скорости выполнения. Но не буду, т.к. это будет вечный спор и не по теме
Код: Выделить всё
unsigned char Flags1=0; //регистр флагов
#define b1BtnLock (1<<0) /*бит защелки опроса кнопки*/
#define b1BtnShrt (1<<1) /*бит короткого нажатия кнопки*/
#define b1BtnLong (1<<2) /*бит длинного нажатия кнопки*/
if (Flags1 & b1BtnLock) //проверка бита защелки
Flags1 |= b1BtnLock; //установка бита защелки
Flags1 &= (~b1BtnLock) //сброс бита защелкиНапример, в соответствии с ISO/IEC 9899shads писал(а):А на С как правильно с битовыми полями работать? Возможно ли не привязываться к отдельным байтам, а работать чисто с именами битов?
EXAMPLE 3 The following obscure constructionsdeclare a typedef name t with type signed int, a typedef name plain with type int, and a structure with three bit-field members, one named t that contains values in the range [0, 15], an unnamed const-qualified bit-field which (if it could be accessed) would contain values in either the range [−15, +15] or [−16, +15], and one named r that contains values in one of the ranges [0, 31], [−15, +15], or [−16, +15]. (The choice of range is implementation-defined.)Код: Выделить всё
typedef signed int t; typedef int plain; struct tag { unsigned t:4; const t:5; plain r:5; };
леня писал(а):
как нажатием на кнопку к переменной единичку прибавить ?
леня писал(а):
не в микроконтроллере