Файлы  •  Ссылки  •  Прошивки  •  Правила  •  Архив  •   FAQ  •  Участники  •  Поиск
Регистрация  •  Вход

Уменьшенная библиотека IR-Remote для МК ATmega8

Список форумов » Разработка цифровых устройств
АвторСообщение
Arduino_ATmega8
Новичок
Сообщения: 5




20-12-2016 20:00

Привет!
Долго рыл интернет, чтобы запихать библиотеку IRremote в мегу8, с 8 кб памяти. Наконец нашел способ!
В библиотеке есть Файл IRremote.h
Удаляем из него все не нужные пульты, кроме той модели что будет использоваться для управления и сохраняем. После этих действий скетч влезет в 8 мегу!)
В чем плюс её использование- код становится до безобразия простой, не нужно настраивать регистра меги!
Может кому пригодится!

#include <IRremote.h>

int RECV_PIN = 2; //вход ИК приемника
IRrecv irrecv(RECV_PIN);
decode_results results;
int LED = 9;


void setup()

{
irrecv.enableIRIn(); // включить приемник
pinMode(LED, OUTPUT);

}

void loop() {



if (irrecv.decode(&results))
{
if (results.value == 0x20DF8E7) //код моей кнопки "2FD807F". У Вас он будет дугой
{
digitalWrite(LED, HIGH);
}
if (results.value == 0x20DF4EB)//код моей кнопки "2FD40BF". У Вас он будет дугой
{
digitalWrite(LED, LOW);
}




irrecv.resume();
}
}


Измененный файл (в этом примере под пульт от LG & RC5-6)


//******************************************************************************
// IRremote
// Version 2.0.1 June, 2015
// Copyright 2009 Ken Shirriff
// For details, see http://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html
// Edited by Mitra to add new controller SANYO
//
// Interrupt code based on NECIRrcv by Joe Knapp
// http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1210243556
// Also influenced by http://zovirl.com/2008/11/12/building-a-universal-remote-with-an-ardui ...
//
// JVC and Panasonic protocol added by Kristian Lauszus (Thanks to zenwheel and other people at the original blog post)
// LG added by Darryl Smith (based on the JVC protocol)
// Whynter A/C ARC-110WD added by Francesco Meschia
//******************************************************************************

#ifndef IRremote_h
#define IRremote_h

//------------------------------------------------------------------------------
// The ISR header contains several useful macros the user may wish to use
//
#include "IRremoteInt.h"

//------------------------------------------------------------------------------
// Supported IR protocols
// Each protocol you include costs memory and, during decode, costs time
// Disable (set to 0) all the protocols you do not need/want!
//
#define DECODE_RC5 1
#define SEND_RC5 1

#define DECODE_RC6 1
#define SEND_RC6 1


#define DECODE_LG 1
#define SEND_LG 1







//
#define PRONTO_ONCE false
#define PRONTO_REPEAT true
#define PRONTO_FALLBACK true
#define PRONTO_NOFALLBACK false

//------------------------------------------------------------------------------
// An enumerated list of all supported formats
// You do NOT need to remove entries from this list when disabling protocols!
//
typedef
enum {
UNKNOWN = -1,
UNUSED = 0,
RC5,
RC6,

LG,




}
decode_type_t;

//------------------------------------------------------------------------------
// Set DEBUG to 1 for lots of lovely debug output
//
#define DEBUG 0

//------------------------------------------------------------------------------
// Debug directives
//
#if DEBUG
# define DBG_PRINT(...) Serial.print(__VA_ARGS__)
# define DBG_PRINTLN(...) Serial.println(__VA_ARGS__)
#else
# define DBG_PRINT(...)
# define DBG_PRINTLN(...)
#endif

//------------------------------------------------------------------------------
// Mark & Space matching functions
//
int MATCH (int measured, int desired) ;
int MATCH_MARK (int measured_ticks, int desired_us) ;
int MATCH_SPACE (int measured_ticks, int desired_us) ;

//------------------------------------------------------------------------------
// Results returned from the decoder
//
class decode_results
{
public:
decode_type_t decode_type; // UNKNOWN, NEC, SONY, RC5, ...
unsigned int address; // Used by Panasonic & Sharp [16-bits]
unsigned long value; // Decoded value [max 32-bits]
int bits; // Number of bits in decoded value
volatile unsigned int *rawbuf; // Raw intervals in 50uS ticks
int rawlen; // Number of records in rawbuf
int overflow; // true iff IR raw code too long
};

//------------------------------------------------------------------------------
// Decoded value for NEC when a repeat code is received
//
#define REPEAT 0xFFFFFFFF

//------------------------------------------------------------------------------
// Main class for receiving IR
//
class IRrecv
{
public:
IRrecv (int recvpin) ;
IRrecv (int recvpin, int blinkpin);

void blink13 (int blinkflag) ;
int decode (decode_results *results) ;
void enableIRIn ( ) ;
bool isIdle ( ) ;
void resume ( ) ;

private:
long decodeHash (decode_results *results) ;
int compare (unsigned int oldval, unsigned int newval) ;

//......................................................................
# if (DECODE_RC5 || DECODE_RC6)
// This helper function is shared by RC5 and RC6
int getRClevel (decode_results *results, int *offset, int *used, int t1) ;
# endif
# if DECODE_RC5
bool decodeRC5 (decode_results *results) ;
# endif
# if DECODE_RC6
bool decodeRC6 (decode_results *results) ;
# endif

//......................................................................
# if DECODE_LG
bool decodeLG (decode_results *results) ;
# endif
//......................................................................


} ;

//------------------------------------------------------------------------------
// Main class for sending IR
//
class IRsend
{
public:
IRsend () { }

void custom_delay_usec (unsigned long uSecs);
void enableIROut (int khz) ;
void mark (unsigned int usec) ;
void space (unsigned int usec) ;
void sendRaw (const unsigned int buf[], unsigned int len, unsigned int hz) ;

//......................................................................
# if SEND_RC5
void sendRC5 (unsigned long data, int nbits) ;
# endif
# if SEND_RC6
void sendRC6 (unsigned long data, int nbits) ;
# endif

# if SEND_LG
void sendLG (unsigned long data, int nbits) ;
# endif


} ;

#
endif

https://www.youtube.com/watch?v=yGugg9aF50E
Arduino_ATmega8
Новичок
Сообщения: 5




02-01-2017 17:23

Никому не интересно? недовольство, огорчение
Васисуалий
monitor.net.ru
monitor.net.ru
Сообщения: 6061




03-01-2017 00:27

Ну дык если никто ничего не написал...

А вот у меня возник вопрос ...

Помнится как то давно уже, лет может быть пятнадцать назад меня вштырило сделать собственную магнитолу с управлением на ИК и прочими премудростями. Ничего кроме PIC16F84 под рукой не было и я написал два кода. Один для процессора в магнитоле. Нужно было обеспечить параллельное управление механизмом, например счетчик импульсов автостопа, и конечно же "ловить" посылки с пульта при условии, что с приемника всегда лезет какая то хрень типа помех и шумов, воспринятых приемником "за свое".

В общем что в один процессор, что в другой все влезло без всяких проблем. Я даже не задумывался, что одной тысячи команд кода мне не хватит!

Так в чем заключается подвиг?

Я в принципе человек не злобный, но когда мне говорят, что из этого векового дуба может получиться не один, а целых два коробки спичек, у меня начинаются вопросы!

img.bibo.kz.jpg



dsp155
Участник
Сообщения: 1674




03-01-2017 15:56

Васисуалий, Мню бы постигнуть arduinu... Писал сразу на bascom avr... Для пиков написал код декодера rc5 все работало...
В ардуине дохрена лишнего как я понял кроме загрузчика и отладчика
улыбка

Хотя это не всегда является минусом. При отладке вроде плюс. Пару раз выручало. Но на платах discovery от STm.. Все гораздо проще.. улыбка

Про ардуину. Ну как то так типа это все и работает... шок гы-гы
Васисуалий
monitor.net.ru
monitor.net.ru
Сообщения: 6061




04-01-2017 01:00

dsp155 писал:
Для пиков написал код декодера rc5 все работало...


Ну и вот? Смог С ТРУДОМ запихать это ЧУДО-ИЗОБРЕТЕНИЕ в восемь килобайт? помираю со смеху!

Или просто все залезло в килограмм пиковской Гарвардской памяти и даже не задумался об объеме?

Добавлено 04-01-2017 01:14

dsp155, я счас могу ляпнуть одну мысль, за которую меня тапками закидают! Но я считаю, что использование языков типа СИ и прочих универсальных или узкоспец подставлялок машинного кода вместо стихов А.С. Пушкина, должно быть очень осторожным и по возможности оправданным! А использование чужих библиотек, да еще и каких то там типа "универсальных" особенно случайно скачанных с тырнета за бесплатно, да еще и без всякой вразумительной документации и приводит к ситуации, когда в доме уже просто нет вообще ни одного устройства, в котором не обнаружены глюки! А когда становишься сам автором такого глюка потому, что вместо вдумчивой проработки задачи и написания пары десятков строк на АСМе тупо "лепишь горбатого на костылях" используя неизвестно чью библиотеку без описания и в результате вместо экономии времени получаешь головомойку в несколько бессонных ночей, то понимаешь простую истину - хочешь сделать хорошо, сделай сам!
Konstantin_18
Участник
Сообщения: 3286




04-01-2017 09:01

Васисуалий писал:
использование чужих библиотек, да еще и каких то там типа "универсальных" особенно случайно скачанных с тырнета за бесплатно, да еще и без всякой вразумительной документации и приводит к ситуации, когда в доме уже просто нет вообще ни одного устройства, в котором не обнаружены глюки!

одобряю стопудово
Чужие библиотеки нужно использовать только как пример написания собственного кода.

А вот насчет С - не согласен.
Правильный компилятор не делает ПОЧТИ ничего лишнего, а жизнь сильно облегчает.
Насчет ПОЧТИ смотрим сгенерированный им ассемблерный промежуточный текст и делаем выводы, а если нужно - правим.

С ругают люди плохо его знающие. улыбка
ПС. Я его тоже плохо знаю, но пытаюсь узнать получше.
dsp155
Участник
Сообщения: 1674




04-01-2017 23:57

Васисуалий писал:
dsp155 писал:
Для пиков написал код декодера rc5 все работало...


Ну и вот? Смог С ТРУДОМ запихать это ЧУДО-ИЗОБРЕТЕНИЕ в восемь килобайт? помираю со смеху!

Или просто все залезло в килограмм пиковской Гарвардской памяти и даже не задумался об объеме?

Добавлено 04-01-2017 01:14

dsp155, - хочешь сделать хорошо, сделай сам!


Rc5 декодировал просто
Основная программа работает, разрешаем прерывания от rb0 .

После возникновения прерывания
Запрещаем прерывания.

принимаем
И записываем 2 стартовых бита
Адрес устройства и код кнопки каждое в свой регистр.
Если адрес сошелся.. То выполняем команду.
Проц был pic16f873. 4 kb flash.
В проге часы и термометр с двумя ds18b20.
С выводом на 4разрядный индикатор .индикация
Динамическая. Ещё килобайта полтора Флеша осталось...
подшучивать, дразнить

В использовании чужих библиотек
Нет ничего зазорного, но если глючат приходится писать своё.

Писалось это в микро c.
В принципе если не проверять ошибки передачи
То в пол килобайта влезет.
Васисуалий
monitor.net.ru
monitor.net.ru
Сообщения: 6061




05-01-2017 01:00

dsp155 писал:
если не проверять ошибки передачи
То в пол килобайта влезет.


А в RC5 чексумм передается? В прочем я не заморачивался. Ведь даже если вдруг примется что то не так, то это же не команда пуска баллистической ракеты! Ну сработает механизм не на перемотку, а на старт воспроизведения. В прочем я такого не заметил ни разу! Чаще бывало просто неприем команды, но это у любого телика или видака как за "здрассте". Короче мой код получился не лучше и не хуже любого кода в любом процессоре любого телика, а если брать современные шедевры программирования, так и лучше иных вышло! Главное сама программа декодирования занимала комманд двести или триста на АСМе. Программа для пульта вообще оказалась и того меньше, комманд до двухсот. Ну, понятно, что у меня всего то использовалось не более десятка команд, но даже если бы я их добавил, пусть даже и пару десятков, а больше и не надо, то все равно каждая новая команда, это от силы пара команд в опросе клавиш и еще пара команд в кодере посылки. Все равно за килограмм пиковсской памяти вылезти трудно.
Murka
Профессор
Сообщения: 2761




05-01-2017 02:07

Васисуалий, Чек сума нету, но условие включения/выключения прохождение двух подряд пакетов одной команды маркированных чёт/нечет ну или нечет/чёт.
dsp155
Участник
Сообщения: 1674




05-01-2017 06:26

Васисуалий, Murka, там каждый бит передаётся нулем и единицей. Если в каком то принятом бите два нуля или две единицы то ошибка и команду не выполняем.

http://digit-el.com/files/open/rc5/rc5.html

pic4.gif


  pic2.gif  8,87 КБ  Скачано: 20 раз(а)

Васисуалий
monitor.net.ru
monitor.net.ru
Сообщения: 6061




05-01-2017 13:49

dsp155, вспомнил. Давно было, разбирался.... гы-гы
Arduino_ATmega8
Новичок
Сообщения: 5




07-01-2017 13:33

Прелесть библиотеки IR remote в том, что это готовая библиотека. там уже всё написано. Ненужно играть с регистрами счётчиками и прочим. Программный код получается до безумия простой. Но в самую распространенную 8-ю мегу он не влазил. Я долго искал путь как уменьшить и уменьшил. Вот решил поделится, тк в свое время весь русский и английский интернет перерыл в поисках таковой, т.к не смог настроить стетчики таймеры меги для декодирования ИР команд с пульта. И действительно примеров создания ик управления на 8 меги на СИ в интренете НЕТ улыбка
Если есть кидайте ссылки, но их пока нет)
LDZ
Участник
Сообщения: 975




07-01-2017 21:29

Arduino_ATmega8, СИ есть СИ... тут заморачиваться нечего...
берем любой линукс проект на СИ за основу и пишем на любой проц...
как угодно... хоть на СИ, хоть на АСМ... хто на что горазд...
искать конкретно на 8 мегу - глупо...
все давно придумано до нас...
Arduino_ATmega8
Новичок
Сообщения: 5




08-01-2017 09:54

LDZ писал:
Arduino_ATmega8, СИ есть СИ... тут заморачиваться нечего...
берем любой линукс проект на СИ за основу и пишем на любой проц...
как угодно... хоть на СИ, хоть на АСМ... хто на что горазд...
искать конкретно на 8 мегу - глупо...
все давно придумано до нас...


Регистры и счётчики у всех МК разные. И обращятся ним нужно по разному. А код и будет основан в в основном на управлении счётчиков. Это значит весь когд нужно переделывать под конкретно Мегу8.
Не все это сделают, а потом ещй компилятор на непонятные мелочи начнет ругатся.
А тут получается очень простой когд, из-за библиотеки IR Remote. Тут для нас уже годовая переменная с полученным кодом.

Добавлено 08-01-2017 09:56

Это как собирать УНЧ на транзисторах с кучей обвязки и расчётов, либо взять TDA2030 готовую. Что удобней?)
LDZ
Участник
Сообщения: 975




08-01-2017 10:36

ну, сделал и сделал... молодец... улыбка
я чего влез то, восьмая мега для меня умерла просто... давно...
в паре проектов на ней, со временем перестал запускаться тактовый... на температуре чуть отличной от комнатной...
посему твое упорство позабавило... я бегу от нее, а ты наоборот в нее лезешь... улыбка
Васисуалий
monitor.net.ru
monitor.net.ru
Сообщения: 6061




08-01-2017 13:51

LDZ писал:
ну, сделал и сделал... молодец... улыбка


Таки да! Я в таких случаях люблю говорить - победителей не судят! Работает, значит прав!

Однако остаются и вопросы и замечания!

Добавлено 08-01-2017 14:09

Arduino_ATmega8 писал:


Регистры и счётчики у всех МК разные. И обращятся ним нужно по разному. А код и будет основан в в основном на управлении счётчиков. Это значит весь код нужно переделывать под конкретно Мегу8.


И чего ты уперся в Мегу8? А если взять ПИК или СТМ8? Что изменится?

А с другой стороны, что значит разные регистры? Да у всех повально контроллеров примерно одинаковое строение регистров! Тут большую сумятицу в дело вносят не разные "принципы", потому что они одинаковые, а скорее разное название регистров по собственной классификации производителя. Но в сути все регистры во всех процессорах выглядят одинаково:

1. сам регистр
2. маска регистра вход\выход
3. маска регистра подтягивающих резисторов (или один общий бит, включающий сразу все резики на всех ногах регистра)
4. маска режимов "наложенных" на регистры разных спец-портов, АЦП, ЦАП, УАРТ, И2Ц, и прочих.

Последние три пункта как правило устанавливаются в первых строках программы еще на этапе инициализации после жесткого ресета, а первый пункт и есть сам регистр. Им пользуйся согласно задачи. Что тут разного или уникального?

Сложнее? Ну в чем? У СТМ32Ф4... регистров больше? Да! Потому, что мало того, что самих портов много, так еще на каждый порт наложены самые разные дополнительные периферийные интерфейсы. Но это только в начале! Просто при инициализации надо вдумчиво определиться со всеми параметрами всех регистров и потом "очистив" процессор от излишеств пиши себе что угодно!

Счетчики? Посмотри на фотку великого и ужасного Билла Гейтса чуть выше в этой теме! Постарайся написать программу так, что бы потом тебе не пришлось обьяснять принцип ее действия с таким же лицом!

помираю со смеху!

bill.jpg



dsp155
Участник
Сообщения: 1674




08-01-2017 20:03

Arduino_ATmega8, вопрос сколько килобайт занял код ?
Arduino_ATmega8
Новичок
Сообщения: 5




12-01-2017 08:56

dsp155, 5 068 байт
https://youtu.be/yGugg9aF50E
dsp155
Участник
Сообщения: 1674




15-01-2017 14:02

Arduino_ATmega8 писал:
dsp155, 5 068 байт
https://youtu.be/yGugg9aF50E

слишком большой обьем кода. так в килобайт влезает если на асме или C писать. Интересно спасибо!
Васисуалий
monitor.net.ru
monitor.net.ru
Сообщения: 6061




18-01-2017 01:24

dsp155 писал:
в килобайт влезает


Я уже писАл, что не только влезет, но еще и место останется! Вот мой собственный пример АСМ для ПИК, декодер команд пульта от видеокамеры Сони, модель не помню, кому интересно, заливайте в чип и пробуйте.

Причем это декодер, кодер сделать еще проще!

Код:
list     p=16c84


status   equ     03h      ; STATUS register F3
porta    equ     05h      ; portregister-A
portb    equ     06h      ; portregister-B
;--------------------------------------------------------------------------
trisa    equ     85h      ;
trisb    equ     86h      ;
;--------------------------------------------------------------------------
inda     equ     08h      ; indication segments
indb     equ     09h      ;
indc     equ     10h      ;
indd     equ     11h      ;
;--------------------------------------------------------------------------
byte1    equ     12h      ; worc byte's for any operation
byte2    equ     13h      ;
byte4    equ     14h      ;
;--------------------------------------------------------------------------
timeind  equ     15h      ; indication time
;--------------------------------------------------------------------------
loop1    equ     16h      ; time of looped timer
loop2    equ     17h      ;
;--------------------------------------------------------------------------
remote1  equ     18h      ;
remote2  equ     19h      ;
remote3  equ     1Ah      ;
remote4  equ     1Bh      ;
;--------------------------------------------------------------------------
w        equ     0        ; TRANSCRIPTION WECTOR
f        equ     1        ;
;-------------------------------bit----------------------------------------
c        equ     00h      ;carry
dc       equ     01h      ;digit carry
z        equ     02h      ;zero
rp0      equ     05h
;--------------------------------------------------------------------------
ra0      equ     00h      ;porta bit0
ra1      equ     01h      ;porta bit1
ra2      equ     02h      ;porta bit2
ra3      equ     03h      ;porta bit3
ra4      equ     04h      ;porta bit4

;        equ     00h      ;
;        equ     01h      ;
;        equ     02h      ;
;        equ     03h      ;
;------------------------------symbolgenerator-----------------------------
                                  ;               
bi0      equ     b'11010111'      ; symbolgenerator for maket n1/0.00Beta
bi1      equ     b'00010001'      ;
bi2      equ     b'01110110'      ;
bi3      equ     b'01110011'      ;
bi4      equ     b'10110001'      ;
bi5      equ     b'11100011'      ;
bi6      equ     b'11100111'      ;
bi7      equ     b'01010001'      ;
bi8      equ     b'11110111'      ;
bi9      equ     b'11110011'      ;
bia      equ     b'11110101'      ;A
bib      equ     b'10100111'      ;B
bic      equ     b'11000110'      ;C
bid      equ     b'00110111'      ;D
bio      equ     b'00100111'      ;O
bie      equ     b'11100110'      ;E
bif      equ     b'11100100'      ;F
bip      equ     b'11110100'      ;P
bil      equ     b'10000110'      ;L
biy      equ     b'10110011'      ;Y
bis      equ     b'11100011'      ;S
bit      equ     b'10100110'      ;T
bir      equ     b'00100100'      ;R
;---------------------------------+----------------------------------------
;
;
;--------------------------------------------------------------------------
org0
goto start
;--------------------------------------------------------------------------
;
;
;-------------------------------start module-------------------------------
     start                           ;
     clrf     porta                  ;
     clrf     portb                  ;
     bsf      status, rp0            ;
     movlw    b'00010000'            ; set tris register's
     movwf    trisa                  ;
     movlw    b'00000000'            ;
     movwf    trisb                  ;
     bcf      status, rp0            ;
                                     ;

;----------------------------end of start module---------------------------
;
;     
;-------------------------------PROGRAM MODULE-----------------------------       
program   
           btfsc         porta,ra4     ;
           goto          program       ; bit low
           movlw         b'00000111'   ;
           movwf         timeind       ;
           clrf          byte1         ; l
           clrf          byte2         ; l
           clrf          remote1       ; l
           clrf          remote2       ; l
           clrf          remote3       ; l
           clrf          remote4       ; l

test1                                  ; l
           btfss         porta,ra4     ; h
           goto          test1         ; h
test1a     incfsz        byte1         ; h
           goto          endtest1      ; h
           incfsz        byte2         ; h
           goto          endtest1      ; h
           goto          program       ; h
endtest1                               ; h
           btfsc         porta,ra4     ; l
           goto          test1a        ; l
;--------------------------------------------------------------------------

           call          bytereader
           movlw         21h
           subwf         remote1,f
           btfss         status,z
           goto          program
           movlw         21h
           subwf         remote2,f
           btfss         status,z
           goto          program

decoder    movlw         16h
           subwf         remote3,w
           btfsc         status,z
           goto          cstill
           
           movlw         24h
           subwf         remote3,w
           btfsc         status,z
           goto          cstart

           movlw         19h
           subwf         remote3,w
           btfsc         status,z
           goto          cplay

           movlw         18h
           subwf         remote3,w
           btfsc         status,z
           goto          crewers

           movlw         15h
           subwf         remote3,w
           btfsc         status,z
           goto          cstop

           movlw         1Eh
           subwf         remote3,w
           btfsc         status,z
           goto          cdispl

           movlw         22h
           subwf         remote3,w
           btfsc         status,z
           goto          czoomw

           movlw         1Ah
           subwf         remote3,w
           btfsc         status,z
           goto          cfor

           movlw         21h
           subwf         remote3,w
           btfsc         status,z
           goto          czoomt

           goto          program
;--------------------------------------------------------------------------
cplay      movlw         bip
           movwf         inda
           movlw         bil
           movwf         indb
           movlw         bia
           movwf         indc
           movlw         biy
           movwf         indd
           call          indicate
           goto          program

cstill     movlw         bis
           movwf         inda
           movlw         bit
           movwf         indb
           movlw         bi1
           movwf         indc
           movlw         bil
           movwf         indd
           call          indicate
           goto          program
           
cstart     movlw         bis
           movwf         inda
           movlw         bit
           movwf         indb
           movlw         bia
           movwf         indc
           movlw         bit
           movwf         indd
           call          indicate
           goto          program

crewers    movlw         bir
           movwf         inda
           movlw         bie
           movwf         indb
           movlw         bir
           movwf         indc
           movlw         bis
           movwf         indd
           call          indicate
           goto          program

cstop      movlw         bis
           movwf         inda
           movlw         bit
           movwf         indb
           movlw         bi0
           movwf         indc
           movlw         bip
           movwf         indd
           call          indicate
           goto          program

cdispl     movlw         bid
           movwf         inda
           movlw         bi1
           movwf         indb
           movlw         bis
           movwf         indc
           movlw         bip
           movwf         indd
           call          indicate
           goto          program

czoomw     movlw         bia
           movwf         inda
           movlw         bib
           movwf         indb
           movlw         bia
           movwf         indc
           movlw         bic
           movwf         indd
           call          indicate
           goto          program

cfor       movlw         bif
           movwf         inda
           movlw         bio
           movwf         indb
           movlw         bir
           movwf         indc
           movlw         bid
           movwf         indd
           call          indicate
           goto          program

czoomt     movlw         bia
           movwf         inda
           movlw         bib
           movwf         indb
           movlw         bia
           movwf         indc
           movlw         bic
           movwf         indd
           call          indicate
           goto          program

;--------------------------------------------------------------------------
;--------------------------------------------------------------------------
;
;--------------------------end of program module---------------------------

;--------------------------------------------------------------------------
;                                 indicate
;--------------------------------------------------------------------------
indicate   
     movf     inda,0                 ;
     movwf    portb                  ;
     bcf      porta,ra0              ; 1-digit in indicator
     bsf      porta,ra1              ;
     bsf      porta,ra2              ;
     bsf      porta,ra3              ;
     call     loop                   ;
     movf     indb,0                 ;
     movwf    portb                  ;
     bsf      porta,ra0              ; 2-digit in indicator
     bcf      porta,ra1              ;
     bsf      porta,ra2              ;
     bsf      porta,ra3              ;
     call     loop                   ;
     movf     indc,0                 ;
     movwf    portb                  ;
     bsf      porta,ra0              ; 3-digit in indicator
     bsf      porta,ra1              ;
     bcf      porta,ra2              ;
     bsf      porta,ra3              ;
     call     loop                   ;
     movf     indd,0                 ;
     movwf    portb                  ;
     bsf      porta,ra0              ; 4-digit in indicator
     bsf      porta,ra1              ;
     bsf      porta,ra2              ;
     bcf      porta,ra3              ;
     call     loop                   ;
     decfsz   timeind,f              ;
     goto     indicate               ;
     bsf      porta,ra0              ;  no digit in indicator
     bsf      porta,ra1              ;
     bsf      porta,ra2              ;
     bsf      porta,ra3              ;
     
     return
;--------------------------------------------------------------------------
;                            loop subroutine
;--------------------------------------------------------------------------
loop                                 ;
                                     ;
           movlw    b'00000111'      ;
           movwf    loop2            ;
loopb      movlw    b'11111111'      ;
           movwf    loop1            ;
loopa      decfsz   loop1,1          ;
           goto     loopa            ;
           decfsz   loop2,1          ;
           goto     loopb            ;
return                               ;

;--------------------------------------------------------------------------
;                           subroutine bittest
;--------------------------------------------------------------------------

bittest    clrf          byte1
test2      btfss         porta,ra4     ; h
           goto          test2         ; h
test2a     incfsz        byte1         ; h
           goto          endtest2      ; h
           return
endtest2   
           nop
           nop
           nop
           nop
           nop
           nop
           nop
           nop
           nop
           btfsc         porta,ra4     ; l
           goto          test2a        ; l
bitanaliz  bcf           byte1,00h
           bcf           byte1,01h
           bcf           byte1,02h
           bcf           byte1,03h
return


;--------------------------------------------------------------------------
;                          bytereader subroutine 
;--------------------------------------------------------------------------
bytereader           
           clrf          byte4
           call          byterd1
           movf          byte4,w
           movwf         remote1
           clrf          byte4
           call          byterd1
           movf          byte4,w
           movwf         remote2
           clrf          byte4
           call          byterd1
           movf          byte4,w
           movwf         remote3
return
;--------------------------------------------------------------------------
byterd1           
           clrf          byte1
bit1       call          bittest       ;
           movlw         b'00100000'
           subwf         byte1,f           
           btfsc         status,z
           goto          bit2
           bsf           byte4,00h

bit2       call          bittest       ;
           movlw         b'00100000'
           subwf         byte1,f           
           btfsc         status,z
           goto          bit3
           bsf           byte4,01h
           
bit3       call          bittest       ;
           movlw         b'00100000'
           subwf         byte1,f           
           btfsc         status,z
           goto          bit4
           bsf           byte4,02h

bit4       call          bittest       ;
           movlw         b'00100000'
           subwf         byte1,f           
           btfsc         status,z
           goto          bit5
           bsf           byte4,03h

bit5       call          bittest       ;
           movlw         b'00100000'
           subwf         byte1,f           
           btfsc         status,z
           goto          bit6
           bsf           byte4,04h

bit6       call          bittest       ;
           movlw         b'00100000'
           subwf         byte1,f           
           btfsc         status,z
           goto          bit7
           bsf           byte4,05h

bit7       call          bittest       ;
           movlw         b'00100000'
           subwf         byte1,f           
           btfsc         status,z
           goto          bit8
           bsf           byte4,06h

bit8       call          bittest       ;
           movlw         b'00100000'
           subwf         byte1,f           
           btfsc         status,z
           goto          endbit
           bsf           byte4,07h
endbit     return

;--------------------------------------------------------------------------
end

Список форумов » Разработка цифровых устройств » Уменьшенная библиотека IR-Remote для МК ATmega8
Перейти:  
Текущий раздел » Разработка цифровых устройств (FPGA, CPLD, PLD, ARM, AVR и т.д.)







Электроника
Прошивки и схемы на телевизоры, мониторы, dvd, телефоны. Schematic, Service Manual (mode), eeprom dumps Информация по ремонту для специалистов - справочники, инструкции, энциклопедия, советы и секреты ремонта,  настройка, сервисные режимы поиск и продажа электронных компонентов, магазины, datasheet, pdf, размещение в интернете рекламы на сайтах электронной тематики
Powered by phpBB 2.0.18 © 2001, 2002 phpBB Group!