ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
22 ноября
232861
Двоешник (10.01.2011 17:58, просмотров: 17911)
Прерывание в прерывании у Pic-ов  есть прерывание от таймера 0 в PIC18F4520: void interrupt my_isr(void) { /* Спец. функция уровня прерывания */ if ((TMR0IE)&&(TMR0IF)) { /* Проверка флагов прерывания от таймера */ TIMER0_TC++; TMR0IF=0; SPI_Led_Key(); /* Обработка клавиатурной и светодиодной матрицы */ } if ((TXIE)&&(TXIF)) { /* Проверка флагов прерывания от передатчика UART */ UARTTxIRQ (); } if ((RCIE)&&(RCIF)) { /* Проверка флагов прерывания от приемника UART */ UARTRxIRQ (); } } Вот функция SPI_Led_Key(); void SPI_Led_Key ( void ) { CLR_PL(); SET_PL(); Array_Keys [0] = SPIRWChar(Array_Leds[0]); Array_Keys [1] = SPIRWChar(Array_Leds[1]); Array_Keys [2] = SPIRWChar(Array_Leds[2]); SPIRWChar(Array_Leds[3]); SET_ST_CP(); CLR_ST_CP(); } Вот функция SPIRWChar() INT08U SPIRWChar(INT08U spi_out) { SSPBUF = spi_out; while (!SSPIF); SSPIF = 0; return SSPBUF; } Выходит так, что внутри обработки прерывания от таймера 0 должно произойти прерывание, которое установит SSPIF, но этого не происходит. Вероятно это связано с приоритетами. Подскажите как сделать? Спасибо!