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

volatile U16 I2C_addr = 0; //адрес ячейки 24LC64

static U8 I2Crd_byte = 0; //байт данных, прочитанный из 24LC64

U16 I2C_addr_i; //значение адреса ячейки 24LC64 для индикации

на жки

U8 г1000=0; //-------------------------------------------

U8 г100=0; // разряды десятичного числа

U8 г10=0; //

U8 rl=0; //-------------------------------------------

//------------------------------------------------------------------------

void main(void) {

CPUinit(); //инициализация системы

_disable_interrupt(); //запрет прерываний

INTERRUPTSinit(); //инициализация прерываний

TIMEROinitstart(); //инициализация ТО

_enable_interrupt(); //разрешение прерываний

delay(1000000); //задержка на сброс жки

lcd_init(); //инициализация жки

delay(1000000); //

lcd_clear(); //очистка экрана жки

lcd_pro_data(I2C_data, 0); //вывести на жки с адреса 0 ОЗУ жки I2Cinit(); //инициализация модуля I2C

A_LED1_0FF; //погасить светодиоды 1, 2

A_LED2_OFF;

while(1) //Начало основного цикла

{

if • (flagn_kn0==l) //нажималась ли кнопка 0

{

flagn_kn0=0; //да, сбросить флаг нажатия

//выбор байта данных для записи в 241С64

I2C_data++;

if (I2C_data > 'z") I2C_data = '!';

lcd_pro_data(I2Ci_data, 0); //вывести на жки с адреса 0 ОЗУ жки

}

if (flagn_knl==l) //нажималась ли кнопка 1

{

flagn_knl=0; //да, сбросить флаг нажатия

I2C_addr += 50;

if (l2C_addr > 8150) I2C_addr =0; ^

//преобразование в десятичное представление и индикация I2C_addr_i = l2C_addr;

rlOOO = I2C_addr_i / 1000; I2C_addr_i = I2C_addr_i % 1000; rlOO = I2C_addr_i / 100; I2C_addr_i = I2C_addr_i % 100; rlO = I2C_addr_i / 10; rl = I2C_addr_i % 10; lcd_pro_data(rl000,5); lcd_tek_data(rlOO); lcd_tek_data(rlO); lcd_tek_data(rl);

}

if (flagn_kn2==l) //нажималась ли кнопка 2

{

flagn_kn2=0; //да, сбросить флаг нажатия

//Запись байта данных в 24LC64 по произвольному адресу wr_byte24LC64(I2C_data, I2C_addr); A_LEDl_ON; //зажечь светодиод 1

delay(100000); //задержка A_LED1_0FF; //погасить светодиод 1

}

if (flagn_kn3==l) //нажималась ли кнопка 3

{

flagn_kn3=0; //да, сбросить флаг нажатия

//Чтение байта данных в 24LC64 по произвольному адресу I2Crd_byte = rd_byte24LC64(I2C_addr);

lcd_pro_data(I2Crd_byte,64); //индикация прочитанного байта A_LED1_0N; //зажечь светодиод 1

delay(100000); //задержка A_LED1_0FF; //погасить светодиод 1

}

} }

//------------------------------------------------------------------------

В отличие от большинства предыдущих проектов, программа обслуживания I2C LPC2129 использует прерывания от 12С, которые аппаратно генерируются при наступлении одного из 25 возможных активных состояний интерфейса 12С.

В файлах hardware.c и hardware.h этого проекта дополнительно содержатся, соответственно, функция-обработчик прерывания от 12С и объявление этой функции. Файл hardware.c этого проекта приведен ниже, а фрагмент исходного текста, который необходимо добавить в файл hardware.h, выглядит следующим образом:


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



НА ГЛАВНУЮ | ЧТО ТАКОЕ PIC ? | ПРОГРАММАТОР | ПРОЕКТЫ | СТАТЬИ | ССЫЛКИ | КАРТА САЙТА
Hosted by uCoz