Вторник, 21.11.2017, 15:00
Микроконтроллерная техника AVR
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
Меню сайта
Помоги сайту
Поддержи наш сайт
Через WebMoney
U222865683087
R391933670808
Z877043628365
E649133782052

или пополни нашу SMS копилку
SMS.копилка

Ссылки

 Каталог статей
Главная » Статьи » Учимся работать с AVR

Прием сигнала пульта ДУ, стандарт NEC
Файлы к статье nec.rar

Code

//Chip type : ATmega8
//AVR Core Clock frequency: 4.000000 MHz

#include <mega8.h>
#include <stdio.h>

typedef unsigned char byte;
typedef unsigned int word;

byte evt_cnt=0; //Счетчик событий
word pvkc; //CUSTOM code
byte pvk[3]; //DATA code

void keydown(word custom,byte data) { //Вызывается при нажатии

//Здесь пишим код, для события

printf("DOWN: %u,%u\r",custom,data);
}

void keypress(word custom,byte data) { //Вызывается при удержании

//Здесь пишим код, для события

printf("PRESS: %u,%u\r",custom,data);
}

void tmr_reset() {
TCCR0=0; //Выключаем счетчик
TCNT0=0; //Сбрасываем счетчик
evt_cnt=0;
}

interrupt [EXT_INT0] void ext_int0_isr(void) { //Внешнее прерывание
if (evt_cnt==0) TCCR0=4; //Если первое событие включаем счетчик, 15.625КГц
if (evt_cnt==1&&(TCNT0<130||TCNT0>150)) tmr_reset(); //Второе событие, если импульс не входит в интервал, выключаем счетчик
if (evt_cnt==2) {
if (TCNT0<60||TCNT0>80) { //Проверка на удержание клавиши
tmr_reset();
if (TCNT0<60&&pvk[2]!=0) keypress(pvkc,pvk[1]); //Вызываем функцию удержания клавиши
}else{ //Если первое нажатие сбрасываем значения
pvkc=0;
pvk[0]=0;
pvk[1]=0;
pvk[2]=0;
}
}
if (TCCR0!=0) { //Если счетчик включен
if (evt_cnt>3&&evt_cnt<67&&(evt_cnt&1)==0) {
if (evt_cnt<36) {
if (TCNT0>21) pvkc|=1<<(17-(evt_cnt>>1)); //Собираем по биту CUSTOM code
}else if(evt_cnt<52) {
if (TCNT0>21) pvk[1]|=1<<(25-(evt_cnt>>1)); //DATA code
}else{
if (TCNT0>21) pvk[0]|=1<<(33-(evt_cnt>>1)); //invert DATA code
}
}
evt_cnt++; //Инкриминируем счетчик событий
if (evt_cnt>67) {
tmr_reset(); //Выключам счетчик
if (pvk[1]==(pvk[0]^0xff)) { //Проверяем DATA code  
pvk[2]=1; //Значит Ок
keydown(pvkc,pvk[1]); //Вызываем функцию нажатия клавиши
}
}
TCNT0=0; //Сбрасываем счетчик
}
}

interrupt [TIM0_OVF] void timer0_ovf_isr(void) {
tmr_reset(); //Если счетчик переполнился, сбрасываем его
}

void main(void) {
DDRD=0;
PORTD=4;
TIMSK=1; //Разрешаем прерывание для таймера
//Разрешаем внешнее прерывание INT0, реагирует на любое изменение
GICR=0x40;
MCUCR=0x01;
GIFR=0x40;
tmr_reset();
//Инициализируем UART, 19200 бод 8 бит
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x0C;
//Выводим строку
putsf("TEST NEC RC:\r");
//Разрешаем прерывания
#asm("sei")
}
Категория: Учимся работать с AVR | Добавил: HiSER (01.03.2010) | Автор: Литвин Артём
Просмотров: 19200 | Комментарии: 2 | Теги: RC, ATmega8, nec, Ду | Рейтинг: 4.0/1 |
Всего комментариев: 2
1  
Люди поделитесь файликом а то не качается.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright My-AVR © 2017
Наша кнопка
У нас появилась кнопка, код кнопки:

Лаборатория самоделок на микроконтроллерах AVR

Форма входа
Наш опрос
Как вам материалы на сайте
Всего ответов: 851
Статистика/Друзья
CY-PR.com



Онлайн всего: 2
Гостей: 2
Пользователей: 0

РадиоКОТ - популярно об электронике. Авторские схемы, новые разработки. Обучение по электронике, микроконтроллерам, ПЛИС. Форум Сайт по радиоэлектронике. У нас все просто и интересно… ARV Reserch: Электроника — просто, полезно, увлекательно. Электронные устройства и программные средства для радиолюбителей и профессионалов, только авторские разработки, плагиата нет! Разработки на заказ. AVR projects Создание электронных роботов своими руками Схемы и программы на AVR http://ur5yfv.ucoz.ua/BANNER.gif Блог начинающего эмбеддера. Дай волю паяльнику! Самоделки на all-make.ru Принципиальные схемы Модулі автозапуску бензогенератора та системи АВР, електромонтажні роботи
Хостинг от uCoz