ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
13 июля
491860
Звероящер (27.02.2014 11:11, просмотров: 11666)
Внезапно пересел на Keil и на 51-ый, вместо богоугодного AVR. В компиляторе обнаружил следующую хрень. В АВРе, в хидере на микраш есть описания регистров и их битовых полей. Поэтому для того, чтобы выставить те или иные поля я делал красиво и приятно, например так: UCSR0B |= (1 << RXEN0) ну или если сразу несколько бит if (status & ((1 << FE0) | (1 << DOR0) | (1 << UPE0))) return; А в Кейле битовые поля объявляются как-то по дурацки: SBIT (TF2H, SFR_TMR2CN, 7); // Timer 2 High-Byte Overflow Flag SBIT (TF2L, SFR_TMR2CN, 6); // Timer 2 Low-Byte Overflow Flag SBIT (TF2LEN, SFR_TMR2CN, 5); // Timer 2 Low-Byte Flag Enable SBIT (TF2CEN, SFR_TMR2CN, 4); // Timer 2 Capture Enable SBIT (T2SPLIT, SFR_TMR2CN, 3); // Timer 2 Split-Mode Enable SBIT (TR2, SFR_TMR2CN, 2); // Timer2 Run Enable Ну и понятно, что конструкция как в АВРе не работает. Полез поглядеть, как в примерах сам Кейл показывает, а там блять void TIMER0_Init (void) { TH0 = TIMER_RELOAD; // Init Timer0 High register TL0 = TIMER_RELOAD; // Init Timer0 Low register TMOD = 0x03; // Timer0 in two 8-bit mode CKCON = 0x02; // Timer0 uses a 1:48 prescaler ET0 = 1; // Timer0 interrupt enabled ET1 = 1; // Timer1 interrupt enabled TCON = 0x50; // Timer0 ON // Timer 0 and 1 can be accessed on all SFR pages. } Вот кусок говна! Придётся самому битовые поля переопределять что-ли? Или в компилере где-то есть шаманский глюч, отключающий эту богомерзость?