if (flagn_knl==l) {
flagn_knl=0;
UART0tx_byte('0') UART0tx_byte(11') UART0tx_byte('2') UART0tx_byte('3') UART0tx_byte('4') UART0tx_byte('5') UART0tx_byte('6 UARTOtx_byte( UART0tx_byte UART0tx_byte( UART0tx_byte(
//инициализация системы //запрет прерываний //инициализация прерываний //инициализация ТО ; //разрешение прерываний //задержка на сброс ЖКИ //инициализация ЖКИ //
//очистка экрана ЖКИ //инициализация модуля UART0 на скорость обмена 115200 бит/с //Погасить светодиоды 1, 2
//Начало основного цикла
//нажималась ли кнопка 0
//да, сбросить флаг нажатия
//очистка экрана ЖКИ
simw = '!1;
j); //вывести символ на ЖКИ с адресом j ОЗУ ЖКИ ; //передать символ через UART0
//нажималась ли кнопка 1
//да, сбросить флаг нажатия
)
'7') |('8')
) )
UART0tx_byte('В') UART0tx_byte('С')
}
}
/I------------------------------------------------------------------------
В отличие от предыдущих проектов, программа обслуживания UART0 использует прерывания по приему байта через UART0, поскольку прием байта от внешнего устройства является для программы событием, о времени наступления которого она «не знает». В файлах hardware.c и hardware.h этого проекта дополнительно содержатся, соответственно, функция-обработчик прерывания по приему байта через UART0 и объявление этой функции. Файл hardware.c этого проекта приведен далее, а фрагмент исходного текста, который необходимо добавить в файл hardware.h, выглядит следующим образом:
static void UARTOInterrupt(); //объявление функции обработчика
//прерываний от UART0
Файл hardware.c программы обслуживания UART0
//------------------------------------------------------------------------
// Специальные функции (с учетом обслуживания UART0)
//------------------------------------------------------------------------
tinclude "hardware.h" // подключение специальных заголовков и определений
tinclude "uart.h" // подключение специальных заголовков и определений
volatile extern U8 rx_byte; //принятый байт через UARTO static U8 i=0; //адрес в ОЗУ ЖКИ (адрес индикации)
//Константы инициализации системы
tdefine FOSC 14745600 //Частота кварцевого резонатора в Гц
tdefine VALUEOFM 4 //соответствует PLLCFG_bit.MSEL=3
tdefine CCLK (FOSC*VALUEOFM) //CCLK = 58.9824 МГц
tdefine PCLK (CCLK/4) //соответствует VPBDIV_bit.VPBDIV=0;
tdefine PLOCK 0x0400
//FCCO = CCLK*2*P = 156...320 МГц, значит, P=2, что соответствует PLLCFG_bit.PSEL=l;
tdefine VIC_TIMER0_bit (1 « VIC_TIMER0) tdefine VIC_UART0_bit (1 « VIC_UART0)
//Инициализация системы -------------------------------------------------
void CPUinit(void) {
//Настройка PLL (ФАПЧ)
PLLCFG_bit.MSEL=3; //См. расчет PLL в секции tdefine этого файла PLLCFG,_bit.PSEL=l; //См. расчет PLL в секции tdefine этого файла PLLFEED=0xAA; PLLFEED=0x55;
| НА ГЛАВНУЮ | | ЧТО ТАКОЕ PIC ? | | ПРОГРАММАТОР | | ПРОЕКТЫ | | СТАТЬИ | | ССЫЛКИ | | КАРТА САЙТА |