Программа для самодельного ИК-пульта

Здесь обсуждаем устройства на МК и программы для них
Ответить
Aleks44
Читатель
Читатель
Сообщения: 6
Зарегистрирован: 27 сен 2022, 21:09

Программа для самодельного ИК-пульта

Сообщение Aleks44 »

Уважаемые мастера! Помогите переделать 15-битную программу в 12-битную. Статья https://radiohlam.ru/ikpult_pic12_prg_s ... v772131777
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: Программа для самодельного ИК-пульта

Сообщение rhf-admin »

Ну а в чём, собственно, проблема? У вас просто команда должна занимать не 10 бит, а 7. Адрес по прежнему 5 бит, здесь ничего не меняется.
С уважением, администрация сайта.
Aleks44
Читатель
Читатель
Сообщения: 6
Зарегистрирован: 27 сен 2022, 21:09

Re: Программа для самодельного ИК-пульта

Сообщение Aleks44 »

Это я понял. Я пытался понять, что, где и как надо поменять, но программирование для меня темный лес. Если не трудно, подскажите, где и что нужно поменять в исходнике, а далее я сам попытаюсь.
P.S. Лет 50 назад такие бы возможности, можно было бы вникнуть. А сейчас мозгов хватает только копировать.
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: Программа для самодельного ИК-пульта

Сообщение rhf-admin »

Команды теперь занимают 7 бит вместо 10, поэтому заменяем:

Код: Выделить всё

 CMD_11       equ         10h         ; код команды 1 (младшие 8 бит)
 CMD_12       equ         0h          ; код команды 1 (старшие 2 бита)
 CMD_21       equ         11h         ; код команды 2 (младшие 8 бит)
 CMD_22       equ         0h          ; код команды 2 (старшие 2 бита)
 CMD_31       equ         12h         ; код команды 3 (младшие 8 бит)
 CMD_32       equ         0h          ; код команды 3 (старшие 2 бита)
 CMD_41       equ         13h         ; код команды 4 (младшие 8 бит)
 CMD_42       equ         0h          ; код команды 4 (старшие 2 бита)
на

Код: Выделить всё

CMD_11       equ         10h         ; код команды 1 (7 бит)
 CMD_21       equ         11h         ; код команды 2 (7 бит)
 CMD_31       equ         12h         ; код команды 3 (7 бит)
 CMD_41       equ         13h         ; код команды 4 (7 бит)
Адрес устройства (AL) прописываем без сдвига (в статье он уже сдвинут на 2 бита влево)
То есть для телека будет

Код: Выделить всё

AL    equ  b'00000001' ; адрес 01h (заданный байт адреса)
После меток TX_CMDx убираем команды movlw CMD_x2 (у нас теперь команда вся в один байт влезла)
Код после метки Form_Com переделываем так:
Вот это удаляем:

Код: Выделить всё

	movwf  Byte2
	movlw  AL         ; перед старшими битами команды дописываем 5
	iorwf  Byte2,1    ; бит адреса - получаем второй байт для передачи
И вместо этого пишем:

Код: Выделить всё

	movlw AL
	movwf Byte2
	rrf   Byte2,1
	btfss Status,0   ; проверяем carry flag
	goto  Form_End
	movlw 0x80
	iorwf Byte1,1
Form_End
Ну и наконец, находим вот эту команду:

Код: Выделить всё

	movlw  .31
и заменяем её на

Код: Выделить всё

	movlw  .25
Поскольку у нас теперь 12 бит вместо 15.
Вроде всё.
С уважением, администрация сайта.
Aleks44
Читатель
Читатель
Сообщения: 6
Зарегистрирован: 27 сен 2022, 21:09

Re: Программа для самодельного ИК-пульта

Сообщение Aleks44 »

Спасибо за ответ! Вроде все правильно сделал, а чего то не работает. Вот проект приемника https://radioparty.ru/device/microchip/ ... 4u57516720. Проверял его с телефона, все работает. Но приемник 12-битный. Вот что я переделал
;--

Код: Выделить всё

[table];------------------------------------------------------------------
 list    p = 12f629
 __config 01FE4h          ;  01111 11 1 1 0 0 100 - (7,8)защиты памяти нет, (6)сброс по питанию разрешен,
                          ;  (5)GP3/-MCLR работает как -MCLR, (4)PWRT включен, (3)сторожевой таймер - выключен, (2-0)генератор - внутренний
;********* Переменные ************************************
         CBLOCK 0x20      ;Начальный адрес блока констант
         T_Cr             ;таймер несущей
         C_imp            ;счетчик кол-ва импульсов. если 0-й бит (C_imp-1) равен 0 - последним посылали единичный полубит,
                          ;если единице - нулевой. биты 1-3 - номер посылаемого бита. биты 4-7 -  номер посылаемого байта
         Nbit             ;номер посылаемого бита
         Byte1            ;первый байт
         Byte2            ;второй байт
         ENDC
;******** Константы ***************************************
P1          equ         .200        ; константа для паузы
P2          equ         .200        ; константа для паузы
Cr1         equ         .2          ; длительность 1 несущей
Cr0         equ         .4          ; длительность 0 несущей
Tl    equ  .238        ; 255-длительность низкого уровня
Th1   equ  .219        ; 255-длительность высокого уровня 1-го бита
Th0   equ  .238        ; 255-длительность высокого уровня 0-го бита
Tsl   equ  .238        ; 255-длит-ть низкого уровня в старт. последов-ти
Tsh   equ  .182        ; 255-длит-ть высокого уровня в старт. последов-ти
;--- Адрес возьмём от телевизора 01 ---
AL    equ  b'00000001' ; адрес 01h (заданный байт адреса)
;--- Команды возьмём 16,17,18,19 ---
CMD_11       equ         10h         ; код команды 1 (7 бит)
CMD_21       equ         11h         ; код команды 2 (7 бит)
CMD_31       equ         12h         ; код команды 3 (7 бит)
CMD_41       equ         13h         ; код команды 4 (7 бит)
;----------------------------------------------------------
Status      equ         03h         ; Регистр выбора банка
GPIO        equ         05h         ; Регистр управления защелками порта
Cmcon       equ         19h         ; Регистр Cmcon - компаратора
TrisIO      equ         05h         ; Регистр выбора направления работы выводов порта
OPT_REG     equ         01h         ; Настройка таймера (банк 1)
TMR0        equ         01h         ; Регистр таймера (банк 0)
INTCON      equ         0Bh         ; Регистр разрешения(1)/запрета(0) прерываний
INDF        equ          0h         ; регистр косвенной адресации
FSR         equ         04h         ; регистр адреса при косвенной адресации
OSCCAL      equ         10h         ; Регистр хранения калибровочной константы
F           equ         1           ; Результат направить в регистр.
;********************************************************
; Пусть у нас GP0 - выход на транзистор управления светодиода, GP1, GP2, GP4, GP5 - входы
;********************************************************

          org 0
;******** КОНФИГУРИРОВАНИЕ КОНТРОЛЛЕРА *************************************
;****** Калибровка Генератора **********************************************
            bsf         Status,5    ;
            Call        3FFh        ; Загрузить калибровочную константу в w
            movwf       OSCCAL      ;
            goto start
;*****************************************
;*** ПОДПРОГРАММА ПРЕРЫВАНИЯ *************
            bcf   GPIO,0        ; выключить выход, если он был включен
            bcf   INTCON,2      ; сбросить флаг переполнения TMR0
          ;--------------------
            movf  C_imp,1       ; проверяем счётчик импульсов на ноль
            btfsc Status,2      ; если счётчик равен 0 (предыдущая команда установила флаг Z) - переход на Send_Start0
            goto  Send_Start0
          ;--------------------
      btfss  C_imp,0    ; проверяем 0-й бит счётчика, если 
                        ; он = 0 - посылаем низкий уровень,
      goto   Send_LL    ; который у нас всегда одинаковой длины
;--- если передали 30 имп-сов (т.е. должны перед. 31-й) - передача окончена
      movlw  .25
      xorwf  C_imp,0
      btfss  Status,2   ; если флаг Z установился - пропускаем переход
                        ; к передаче высокого уровня и завершаем передачу
      goto   Send_HH
;-------------------
Send_end
      clrf   INTCON     ; сбрасываем все прерывания и флаги
      call   Pause      ; выдерживаем паузу
      goto   Scan       ; переходим к сканированию клавиш
;--- посылаем высокий уровень ---
Send_HH
      movf   INDF,0     ; читаем передаваемый байт
      andwf  Nbit,0     ; "И" передаваемого байта с указ.передаваем. бита
      btfss  Status,2   ; если Z=1 - в передаваемом байте, в поз.Nbit у нас 0
      goto   Send_H1
;--- загружаем длит-ть высокого уровня, соответствующую нулевому биту ---
Send_H0
      movlw  Th0
      movwf  TMR0       ; загружаем Th0 в TMR0
      goto   Next
;--- загружаем длит-ть низкого уровня, соответствующую единичному биту ---
Send_H1
      movlw  Th1
      movwf  TMR0       ; загружаем Th1 в TMR0
Next  incf   C_imp,1    ; увеличить счётчик импульсов
      bsf    INTCON,7   ; разрешить немаскированные прерывания
      goto   Hlevel
;--------------------
Send_LL
      movlw  Tl
      movwf  TMR0       ; загрузить Th в TMR0
      incf   C_imp,1    ; увеличить счётчик импульсов
      bcf    Status,0   ; сбросить флаг переноса
      rlf    Nbit,1     ; сдвинуть указатель передаваемого бита
      btfss  Status,0   ; если С=1 - ещё раз сдв.влево указ.бита и увелич.FSR
      goto   Next2
      rlf    Nbit,1
      incf   FSR,1
Next2 bsf    INTCON,7   ; разрешить немаскированные прерывания
      goto   Llevel
          ;--------------------
Send_Start0 clrf  Nbit      ; очищаем указатель позиции передаваемого бита
            bsf   Nbit,0    ; поднимаем в указателе 0-й бит
            movlw Byte1
            movwf FSR       ; адрес косвенной адресации ставим на первый байт
            movlw Tsl
            movwf TMR0      ; загрузить Tsl в TMR0
            incf  C_imp,1   ; увеличить счётчик импульсов
            bsf   INTCON,7  ; разрешить немаскированные прерывания
            goto  Llevel
;*** КОНЕЦ ПРЕРЫВАНИЯ ********************


;******** ИНИЦИАЛИЗАЦИЯ ****************************************
start       bcf         Status,5    ; перейти в банк 0
            clrf        GPIO        ; инициализация защелок (нули на всех защелках)
            movlw       .7          ; биты 0..2 поднять
            movwf       Cmcon       ; компаратор выключен, GP0, GP1, GP2 - цифровые вх/вых
            bsf         Status,5    ; Перейти в 1-й банк (установить в 1 5-й бит регистра Status)
            movlw       .62         ; Записать конфигурацию GPIO в аккумулятор (W)    .62=00 111110 GP0 - выход, остальные - входы
            movwf       TrisIO      ; Скопировать конфигурацию GPIO из W в регистр TrisIO.
;--- Настраиваем предделитель таймера ---
            movlw  b'00000100'      ; настройка предделителя 1:32, 32*256=8,192 мс
            movwf   OPT_REG
            bcf     Status,5        ; Перейти в 0-й банк (установить в 0 5-й бит регистра Status)
;*** КОНЕЦ ИНИЦИАЛИЗАЦИИ ********************************


;****** ЦИКЛ СКАНИРОВАНИЯ КЛАВИАТУРЫ *******************************************************
Scan       btfss   GPIO,5           ; если на входе GP5 низкий уровень - нажата клавиша 1
           goto    Tx_CMD1          ;
           btfss   GPIO,2           ; если на входе GP2 низкий уровень - нажата клавиша 2
           goto    Tx_CMD2          ;
           btfss   GPIO,4           ; если на входе GP4 низкий уровень - нажата клавиша 3
           goto    Tx_CMD3          ;
           btfss   GPIO,1           ; если на входе GP1 низкий уровень - нажата клавиша 4
           goto    Tx_CMD4          ;
           goto Scan                ;
;****** КОНЕЦ ЦИКЛА СКАНИРОВАНИЯ ***********************************************************


;****** ФОРМИРУЕМ 2 БАЙТА КОМАНДЫ И ВКЛЮЧАЕМ ТАЙМЕР ****************************************
;*** ПОДГОТОВКА К НАЧАЛУ ПЕРЕДАЧИ ************************
Tx_CMD1
      movlw  CMD_11
      movwf  Byte1
      goto   Form_Com
;------------------------
Tx_CMD2
      movlw  CMD_21
      movwf  Byte1
      goto   Form_Com
;------------------------
Tx_CMD3
      movlw  CMD_31
      movwf  Byte1
      goto   Form_Com
;------------------------
Tx_CMD4
      movlw  CMD_41
      movwf  Byte1
Form_Com
      movlw AL
	  movwf Byte2
	  rrf   Byte2,1
	  btfss Status,0   ; проверяем carry flag
	  goto  Form_End
	  movlw 0x80
	  iorwf Byte1,1
Form_End
;--- Сбрасываем счётчик импульсов, загружаем в таймер время передачи ---
;--- высокого уровня первого полубита и включаем прерывания от таймера ---
         clrf  C_imp            ; сбросить счётчик импульсов
         movlw Tsh
         movwf TMR0             ; загрузить Tsh в таймер
         bcf  INTCON,2          ; сбросить флаг переполнения таймера
         bsf  INTCON,5          ; разрешить прерывание от таймера
         bsf  INTCON,7          ; разрешить немаскированные прерывания
;--- goto Hlevel - эту команду не пишем, поскольку переход и так происходит на Hlevel
;*** КОНЕЦ ФОРМИРОВАНИЯ **********************************************


;***** ПОДПРОГРАММЫ ПЕРЕДАЧИ ЛОГИЧЕСКОЙ 1 И ЛОГИЧЕСКОГО 0 ************
;***** Передача логической единицы ***
Hlevel
      movlw  Cr1        ; поместить константу Cr1 в аккумулятор
      movwf  T_Cr       ; скопир-ть аккум-р в регистр T_Cr (таймер несущей)
      bsf    GPIO,0     ; установить на выходе GP0 единицу
Cr1_Y decfsz T_Cr,F     ; декремент содержимого регистра T_Cr с ветвлением
      goto   Cr1_Y      ; переход на метку Cr1_Y
      bcf    GPIO,0     ; Установить на выходе GP0 ноль
      movlw  Cr0        ; поместить константу Cr0 в аккумулятор
      movwf  T_Cr       ; скопировать содержимое аккум-ра в регистр T_Cr
Cr0_Y decfsz T_Cr,F
      goto   Cr0_Y
      nop               ; для точной подстройки времени низкого уровня
      goto   Hlevel
;***** Передача логического нуля ***
Llevel   nop
         goto Llevel
;***** КОНЕЦ ПОДПРОГРАММ ПЕРЕДАЧИ ************************************


;*** ПОДПРОГРАММА ПАУЗЫ ************
Pause      movlw  P1
           movwf  T_Cr
cikl2      movlw  P2
           movwf  C_imp
cikl1      nop
           decfsz C_imp,1
           goto   cikl1
           decfsz T_Cr,1
           goto   cikl2
           return
;***********************************
        end[/table]
Спасибо за помощь!
Aleks44
Читатель
Читатель
Сообщения: 6
Зарегистрирован: 27 сен 2022, 21:09

Re: Программа для самодельного ИК-пульта

Сообщение Aleks44 »

Спасибо Уважаемый админ!!! Ятаганы засверкали при луне. Все заработало. Ламповые телевизоры было проще ремонтировать :clapping: . Насколько я понял, здесь нет режима sleep?
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: Программа для самодельного ИК-пульта

Сообщение rhf-admin »

Пожалуйста. :D
Да, режима sleep нет.
С уважением, администрация сайта.
Aleks44
Читатель
Читатель
Сообщения: 6
Зарегистрирован: 27 сен 2022, 21:09

Re: Программа для самодельного ИК-пульта

Сообщение Aleks44 »

Привет! Здесь на форуме уже пытались реализовать в этом проекте режим sleep, да что то не задалось. Я нашел проект с реализованным режимом. Если у Вас будет время и желание, гляньте его и можно ли встроить это режим в Ваш проект. Спасибо.

Код: Выделить всё

;------------------------------------------------------
; PROJECT : 3 CHANNEL TX IR REMOTE
; CRYSTAL 4 MHz
; MPLAB : 7.11 , Assembly
; RC5 FORMAT @38KHz , 35% DUTY CYCLE
; ADDRESS = 0X0B  0000 1011 you may change
; CH1  = 0X01
; CH2  = 0X02
; CH3  = 0X03
; NOT USE TOGGLE ALWAY = 0
; www.joyta.ru


;------------------------------------------------------

	list P=12F629
	#include <P12F629.INC>
	__config _WDT_OFF & _XT_OSC & _CP_ON & _CPD_ON & _BODEN_OFF & _MCLRE_OFF & _PWRTE_ON


#DEFINE CH1	GPIO,0	; CONNECT WITH TX SWITCH CHANNEL 1
#DEFINE CH2	GPIO,1	; CONNECT WITH TX SWITCH CHANNEL 2
#DEFINE CH3	GPIO,3	; CONNECT WITH TX SWITCH CHANNEL 3
#DEFINE IR	GPIO,2	; CONNECT WITH IR LED WITH TRANSISTOR DRIVES
#DEFINE TOG_BIT TOGGLE,0 ; TOGLE BIT NOT USE FOR THIS PROJECT	
#DEFINE CH1_CMD	0X01	; CHANNEL 1 COMMAND
#DEFINE CH2_CMD	0X02	; CHANNEL 2 COMMAND
#DEFINE CH3_CMD	0X03	; CHANNEL 3 COMMAND


CNT1	EQU	20H
CNT2	EQU	21H
CNT3	EQU	22H
CNT4	EQU	23H
TOGGLE	EQU	24H
CMD	EQU	25H	; IR COMMAND BUFFER



	ORG	000
	
	BCF	IR
	;BSF	STATUS,RP0
	;CALL	0X3FF
	;MOVWF	OSCCAL
	;BCF	STATUS,RP0
	CALL	DEBOUNCE
	;
	MOVLW	0X07
	MOVWF	CMCON	; MAKE ALL GPIO TO DIGITAL I/O
	BSF	STATUS,RP0
	BCF	OPTION_REG,7    ; ENABLE WEAK PULL-UP
	BCF	WPU,2		; DISABLE WEAK PULL-UP FOR GPIO2
	MOVLW	B'00001011'	; GPIO<0,1,3> = INPUT , GPIO 2 = OUTPUT
	MOVWF	TRISIO
	BSF	IOCB,0
	BSF	IOCB,1
	BSF	IOCB,3
	BSF	INTCON,GPIE
	BCF	STATUS,RP0	
	BCF	INTCON,GIE	
	BCF	TOG_BIT
	
;------------------------------------
; MAIN LOOP	
MAIN:	
;         SLEEP	; GOTO SLEEP MODE(I a sleepy! and need to save my energy)
	BTFSS	CH1
	GOTO	DO_CH1
	BTFSS	CH2
	GOTO	DO_CH2
	BTFSS	CH3
	GOTO	DO_CH3
	GOTO	MAIN	

;------------------------------------
DO_CH1:	CALL	DEBOUNCE
	BTFSC	CH1
	GOTO	MAIN
	MOVLW	CH1_CMD	; LOAD COMMANE FOR CHANNEL 1
	MOVWF	CMD
	CALL	SEND_RC5
	;
	BTFSS	CH1
	GOTO	$-1	; WAIT FOR SWITCH RELEASED
	;
	CALL	DEBOUNCE	; DELAY AFTER SWITCH RELEASED
	GOTO	MAIN

;------------------------------------	
DO_CH2:	CALL	DEBOUNCE
	BTFSC	CH2
	GOTO	MAIN
	MOVLW	CH2_CMD	; LOAD COMMANE FOR CHANNEL 1
	MOVWF	CMD
	CALL	SEND_RC5
	;
	BTFSS	CH2
	GOTO	$-1	; WAIT FOR SWITCH RELEASED
	;
	CALL	DEBOUNCE	; DELAY AFTER SWITCH RELEASED
	GOTO	MAIN
	;
;------------------------------------	
DO_CH3:	CALL	DEBOUNCE
	BTFSC	CH3
	GOTO	MAIN
	MOVLW	CH3_CMD	; LOAD COMMANE FOR CHANNEL 1
	MOVWF	CMD
	CALL	SEND_RC5
	;
	BTFSS	CH3
	GOTO	$-1	; WAIT FOR SWITCH RELEASED
	;
	CALL	DEBOUNCE	; DELAY AFTER SWITCH RELEASED
	GOTO	MAIN
	;	
;======================================
; SEND LOGIC 0
;======================================
LOGIC0:	MOVLW	.32		; 1
	MOVWF	CNT1		; 1
	;
LOG0_1:	BSF	IR		; 1 MAKE IR HIGH 35% Duty cycle = 9 uS
	GOTO	$+1
	GOTO	$+1
	GOTO	$+1
	GOTO	$+1
	;
	;===================================
	BCF	IR		; 1 MAKE IR LOW 17 uS
	GOTO	$+1
	GOTO	$+1
	GOTO	$+1
	GOTO	$+1
	GOTO	$+1
	GOTO	$+1
	NOP			; 1
	;
	DECFSZ	CNT1,F		; 1/2
	GOTO	LOG0_1		; 2    26 uS
	;
	CALL	DELAY_OFF
	RETURN			; 2
	;
;======================================
; SEND LOGIC 1
;======================================
LOGIC1:	CALL	DELAY_OFF	; DELAY 899 uS
	MOVLW	.32		; 1
	MOVWF	CNT1		; 1
	;
LOG1_1:	BSF	IR		; 1 MAKE IR HIGH 35% Duty cycle = 9 uS
	GOTO	$+1
	GOTO	$+1
	GOTO	$+1
	GOTO	$+1
	;
	;===================================
	BCF	IR		; 1 MAKE IR LOW 17 uS
	GOTO	$+1
	GOTO	$+1
	GOTO	$+1
	GOTO	$+1
	GOTO	$+1
	GOTO	$+1
	NOP			; 1
	;
	DECFSZ	CNT1,F		; 1/2
	GOTO	LOG1_1		; 2
	;
	RETURN			; 2
	;
;======================================
; DELAY FOR NO CARRAIR
; DELAY ABOUT 835 uS
;======================================
DELAY_OFF:
	MOVLW	5		; 1
	MOVWF	CNT3		; 1	
	MOVLW	.54		; 1
	MOVWF	CNT4		; 1
	DECFSZ	CNT4,F		; 1/2
	GOTO	$-1		; 2	
	DECFSZ	CNT3,F  	; 1/2
	GOTO	$-5		; 2
	RETURN			; 2
	
;======================================
; SEND RC5 TO REMOTE
; INPUT : CMD (6 BIT IR COMMAND)
;======================================
SEND_RC5:
	; SEND 2 START  BIT
	CALL	LOGIC1
	CALL	LOGIC1
	; SEND TOGGLE BIT
	BTFSS	TOG_BIT
	GOTO	$+3
	CALL	LOGIC1
	GOTO	$+2
	CALL	LOGIC0

	; SEND ADDRESS 5 BIT FIX AT 01011 (0X0B) IT MAY BE CHANGED BY YOU
	CALL	LOGIC0	; 0  MSB FIRST BIT 4
	CALL	LOGIC1	; 1
	CALL	LOGIC0	; 0
	CALL	LOGIC1	; 1
	CALL	LOGIC1	; 1  LSB BIT 0
	;
	; SEND COMMAND 6 BIT(00HH LLLL) MSB FIRST
	BCF	STATUS,C
	RLF	CMD,F	; AFTER FIRST ROTAGE 0HHL LLL0
	RLF	CMD,F	; AFTER SECOND ROTAGE HHLL LL00
	;
	MOVLW	6
	MOVWF	CNT2
	;
	RLF	CMD,F    	; SEND MSB FIRST
	BTFSS	STATUS,C
	GOTO	$+3
	CALL	LOGIC1
	GOTO	$+2
	;
	CALL	LOGIC0
	DECFSZ	CNT2,F
	GOTO	$-7
	;
	RETLW	0		
	;	
	
;======================================
; DEBOUNCE SWITCH
; DELAY 15 mS
;======================================
DEBOUNCE:
	MOVLW	.1		; 1
	MOVWF	CNT1		; 1
DEL_1:	MOVLW	.20
	MOVWF	CNT2		; 1
DEL_2:	CLRF	CNT3		; 1
DEL_3:	DECFSZ	CNT3,F		; 1/2
	GOTO	DEL_3		; 2
	DECFSZ	CNT2,F		; 1/2
	GOTO	DEL_2		; 2
	DECFSZ	CNT1,F		; 1/2
	GOTO	DEL_1		; 2
	RETLW	0		; 2
	
	END
	
	
		
Aleks44
Читатель
Читатель
Сообщения: 6
Зарегистрирован: 27 сен 2022, 21:09

Re: Программа для самодельного ИК-пульта

Сообщение Aleks44 »

Вопрос с режимом sleep решен. Еще раз спасибо за программу.
Ответить

Вернуться в «Устройства на микроконтроллерах»