Предыдущая Следующая

//задание направлений линий 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 ? | ПРОГРАММАТОР | ПРОЕКТЫ | СТАТЬИ | ССЫЛКИ | КАРТА САЙТА
Hosted by uCoz