//задание направлений линий GPIO
TO0DTR=0x3000000; 304
Р0.10...Р0.16 Р0.24, Р0.25 -
входы выходы
Р1.16...Р1.23 - выходы
.Р1.23
//ОЬОООО ООН 0000 0000 0000 0000 0000 0000 //
IOlDIR=0xFF0000;
//ОЬОООО 0000 1111 1111 0000 0000 0000 0000 //задание начальных уровней на выходах IO0CLR=0x3000000; // сброс выходов Р0.24, Р0.25 IOlCLR=0xFF0000;
//ОЬОООО 0000 1111 1111 0000 0000 0000 0000 сброс выходов Р1.16 }
//-----------------------------------------------------------------------
// Инициализация прерываний
//-----------------------------------------------------------------------
void INTERRUPTSinit(void) {
// МЕММАР =2; // Переотобразит векторы прерыв в SRAM в случае
// выполнения кода в SRAM //Установки контроллера прерываний
VICProtection =0; //К регистрам VIC можно обращаться i
// пользовательском режиме VICIntEnClear = Oxffffffff; // Запретить все прерывания
VICDefVectAddr = (U16)&TimerInterrupt; // Адрес сервисной подпрограммы
VICIntSelect &= ~VIC_TIMERO_bit; VICVectAddrl = (Ul6)&TimerInterrupt;
VICVectCntll = 0x20 I VIC_TIMER0;
VICIntEnable = VIC_TTMER0_bit; }
//----------------------------------
#pragma vector=0xl8
_irq _arm void irq_handler(void)
{
void (*interrupt_function)(); U16 vector;
vector = VICVectAddr; / interrupt_function = (void(*)())\ (*interrupt_function)(); VICVectAddr = 0;
// обработки прерываний
// Линия IRQ от Таймера 0
// Адрес сервисной подпрограммы
// обработки прерываний
// Разрешить вектор прерывания от // Таймера 0
// Разрешить прерывание от Таймера 0
// Поместить адрес вектора в контроллер VIC ))vector;
// Вызов функции вектора прерывания // Сброс прерывания в VIC
}
// функция-обработчик прерывания от TIMERO -------------
static void Timerlnterrupt() {
opros_kn0(); //опрос кнопки 0 opros_knl(); //опрос кнопки 1 opros_kn2(); //опрос кнопки 2 opros_kn3(); //опрос кнопки 3 static U8 old_state;
// генерация импульсной последовательности формирования if (old_state==OFF) {
OUT_U_LCD_UP; //начать импульс -U ЖКИ
-U для питания ЖКИ
old_state=ON; }
else {
OUT_U_LCD_DOWN; old_state=OFF; }
TOIR = Oxff; }
//Инициализация и запуск TIMERO
void TIMEROinitstart()
{
TOTCR = 0
//закончить импульс -U ЖКИ
// Сброс линии прерывания от Таймера О
T0CCR = 0; T0EMR = 0; ТОРС = 0;
T0MR0 = PCLK/1000; TOMCR = 3; TOTCR = 1; }
//----------------
Файл hardware.h
//----------------
// Отключить Таймер 0 (первый бит регистра!) // Запретить все типы захвата // Запретить все типы совпадения // Предделитель не делит (коэффициент деления =1). // Считать до этого значения. Вых. частота таймера 1000 Гц // Сброс и прерывание от MR0 (регистр совпадения 0). // Включить Таймер 0 (первый бит регистра!)
//Специальные заголовки и определения //------------------------------------
#include <inarm.h> // подключение стандартных заголовков и определений
#include <iolpc2129.h> // подключение стандартных заголовков и определений //Определения типов величин
НА ГЛАВНУЮ | | ЧТО ТАКОЕ PIC ? | | ПРОГРАММАТОР | | ПРОЕКТЫ | | СТАТЬИ | | ССЫЛКИ | | КАРТА САЙТА |