SC1621摇控器-PIC单片机解码程序(已测试OK)

发布者:TranquilDreams最新更新时间:2017-12-10 来源: eefocus关键字:SC1621  摇控器  PIC单片机  解码程序 手机看文章 扫描二维码
随时随地手机看文章

;*APPLICATION NOTE  E6000 ICEXPLORER ******************
;* Title:                                             ;

;SC6121的遥控器发射码依次为:同步头(引导码)+32位数据码 ;
;(用户码低8位+用户码高8位+键码+键码的反码)            ;
;引导码是由9MS的高电平加4.5MS的低电平构成,            ;
;我们接收到的刚好反相为9MS的低电平加4.5MS的高电平.    ;
;数据码'0'是由560US的高电平加560US的低电平构成        ;
;接收时反相为560US的低电平加560US的高电平构成=1.125mS ;
;数据码'1'是由560US的高电平加1.69MS的高电平构成       ;
;接收时反相为560US的低电平加1.69MS的高电平构成=2.25mS ;
;* Version:         00                                ;
;* Last Updated:    2006.06.09                        ;
;* MCU:             PIC16C74                          ;
;* FOR:             www.picavr.com                     ;
;******************************************************
;***ROM  PCLATH.D3=0  000H-7FFH                       ;
;  PCLATH.D3=1  800H-FFFH                       ;
;******************************************************
;** RAM    BANK0=20H---7FH STATUS RP0=0,RP1=0    ;
;**        BANK1=A0H---FFH STATUS RP0=1,RP1=0    ;
;**        BANK2=100H--17FH     STATUS RP1=1,RP0=0    ;
;**        BANK3=180H--1FFH     STATUS RP1=1,RP0=1    ;
;******************************************************
;               ________________
;    MCLR/VPP/TH-| 1           40 |-RB7/PGD
;        RA0/AN0-| 2           39 |-RB6/PGC
;        RA1/AN1-| 3           38 |-RB5
; RA2/AN2/VRref--| 4           37 |-RB4
; RA3/AN3/VRref+-| 5           36 |-RB3/PGM
;      RA4/TOCKI-| 6           35 |-RB2
;     RA5/AN4/SS-| 7           34 |-RB1
;     RE0/RD/AN5-| 8           33 |-RB0/INT
;     RE1/WR.AN6-| 9           32 |-VDD
;     RE2/CS/AN7-| 10          31 |-VSS
;            VDD-| 11          30 |-RD7/PSP7
;            VSS-| 12          29 |-RD6/PSP6
;     OSC1/CLKIN-| 13          28 |-RD5/PSP5
;    OSC2/CLKOUT-| 14          27 |-RD4/PSP4
; RC0/TISO/TICKI-| 15          26 |-RC7/RX/DT
; RC1/T1OSI/CCP2-| 16          25 |-RC6/TX/CK
;       RC2/CCP1-| 17          24 |-RC5/SDO
;    RC3/SCK/SCL-| 18          23 |-RC4/SDA
;       RD0/PSP0-| 19          22 |-RD3/PSP3
;       RD1/PSP1-| 20          21 |-RD2/PSP2
;                 ~~~~~~~~~~~~~~~
;         16F74A
;****************************************************
RMT          EQU  0          ;遥控接收输入脚位地址(RB。0)
;-------------------------------------------------
BITIN        EQU  7          ;遥控接收数据位位标志
;-------------------------------------------------
CNT0         EQU 20H         ;用户临时寄存器1
CNT1         EQU 21H         ;用户临时寄存器2
CNT2         EQU 22H         ;用户临时寄存器3
CNT3         EQU 23H         ;用户临时寄存器4
TABADD       EQU 24H         ;数码管显示码取码用寄存器
FLAGS        EQU 25H         ;显示位选标志位
DISPBUF_H    EQU 26H         ;显示器高位
DISPBUF_L    EQU 27H         ;显示器低位


FLAGS2       EQU 28H         ;临时寄存器

W_TEMP       EQU 2AH         ;W现场保护寄存器
STATUS_TEMP  EQU 2BH         ;STATUS现场保护寄存器

CSR0         EQU 2CH         ;遥控键码反码寄存器
CSR1         EQU 2DH         ;遥控器键码寄存器
CSR2         EQU 2EH         ;遥控器用户码高8位寄存器
CSR3         EQU 2FH         ;遥控器用户码低8位寄存器

CSR0A        EQU 30H         ;遥控接收32位数据暂存寄存器
CSR1A        EQU 31H         ;遥控接收32位数据暂存寄存器
CSR2A        EQU 32H         ;遥控接收32位数据暂存寄存器
CSR3A        EQU 33H         ;遥控接收32位数据暂存寄存器
;**************************************************
CONT1        EQU 7FH         ;
;**************************************************
            ORG 0000H
            GOTO MAIN
            ORG  0004H
            RETFIE           ;
            ORG  0008H
;************************************************
MAIN:
 CALL    RESET_       ;BANK0--BANK1清0

 CLRF STATUS       ;清状态寄存器口
        BSF     STATUS,RP0   ;BANK-1
;------------------------------------------------
        MOVLW   0FH          ;00001111设定:RB口不用上拉,分频器配给WDT
        MOVWF   OPTION_      ;分频比设为1:256
        MOVLW   02H          ;00000010转换结果左对齐,只选3个A/D通道RA0/AN0,RA1,RA3
        MOVWF   ADCON1       ;选择VDD和VSS作参考源
;------------------------------------------------
        MOVLW   00H
        MOVWF   TRISC        ;PORTC所有管脚设为输出
        MOVLW   01H          ;
        MOVWF   TRISB        ;RB0=输入
        MOVLW   0FFH         ;
        MOVWF   TRISA        ;
;------------------------------------------------
        BCF     STATUS,RP0   ;BANK-0
;------------------------------------------------
        MOVLW   01001001B    ;01001001选择:时钟时钟源为FOSC/8,允许ADC工作
        MOVWF   ADCON0       ;通道AN1,暂时不启动转换过程
        BCF     PIR1,  ADIF  ;清除A/D中断标志位
;------------------------------------------------
        MOVLW   00H          ;
        MOVWF   PORTC        ;
        MOVLW   0FFH         ;
        MOVWF   PORTB        ;
;*****************************************************
LOOP:
        NOP                  ;
        NOP                  ;
;*****************************************************
RCV:
        BTFSC      PORTB,RMT
        GOTO       LOOP           ;是干扰退出
        MOVLW      4
        MOVWF      CNT1           ;4*256*10us
        CLRF       CNT2
        CLRF       CNT0
RCV1:                             ;先检测引导码的9MS低电平
        GOTO       $+1            ;每一个循环10US
        NOP                       ;
        BTFSC      PORTB,RMT      ;
        INCF       CNT2,1         ;
        BTFSS      PORTB,RMT      ;
        CLRF       CNT2           ;
        BTFSC      CNT2,3         ;高电平大于8*10US=80US则为有效高电平,否则是一些干扰信号
        GOTO       RCV2           ;

        DECFSZ     CNT0,1         ;
        GOTO       RCV1           ;
        DECFSZ     CNT1,1         ;
        GOTO       RCV1           ;
        GOTO       LOOP           ;低电平大于4*256*10US=10.24MS则是错误脉冲
RCV2:
        MOVLW      3
        SUBWF      CNT1,0         ;低电平小于2*256*10US=5.12MS则是错误脉冲
        BTFSC      STATUS,C       ;
        GOTO       LOOP           ;

        MOVLW       3             ;
        MOVWF      CNT1           ;3*256*10us
        CLRF       CNT2           ;
        CLRF       CNT0           ;
;*************************************************
RCV3:
        GOTO       $+1            ;每一个循环10US
        NOP
        BTFSS      PORTB,RMT
        INCF       CNT2,1
        BTFSC      PORTB,RMT
        CLRF       CNT2
        BTFSC      CNT2,3          ; 低电平大于8*10US=80US则为有效低电平,否则是一些干扰信号
        GOTO       RCV4
        DECFSZ     CNT0,1
        GOTO       RCV3
        DECFSZ     CNT1,1
        GOTO       RCV3
        GOTO       LOOP            ;高电平大于3*256*10US=7.68MS则是错误的
;**************************************************
RCV4:
        MOVLW      3
        SUBWF      CNT1,0          ;高电平小于1*256*10US=2.56MS则是错误的
        BTFSC      STATUS,C        ;
        GOTO       LOOP

        MOVLW      32
        MOVWF      CNT2            ;接收数据共32位,16位用户码,8位控制码加8位控制码的反码
RCV5:
        CLRF       CNT3
        MOVLW      170             ;低电平大于256-170=86*10US=860US错误
        MOVWF      CNT0
        MOVLW      56
        MOVWF      CNT1            ;高电平大于256-56=200*10US=2MS错误
RCV5_HI:
        GOTO       $+1
        NOP
        BTFSC      PORTB,RMT
        INCF       CNT3,1
        BTFSS      PORTB,RMT
        CLRF       CNT3
        BTFSC      CNT3,2          ;高电平大于8*10US=80US则为有效高电平
        GOTO       RCV6
        INCFSZ     CNT0,1
        GOTO       RCV5_HI         ;低电平大于860US则是错误的
        GOTO       LOOP
RCV6:
        CLRF       CNT3
RCV6_LO:
        GOTO       $+1
        NOP
        BTFSS      PORTB,RMT
        INCF       CNT3,1
        BTFSC      PORTB,RMT
        CLRF       CNT3
        BTFSC      CNT3,3          ;低电平大于10*8US=80US则是有效低电平
        GOTO       COMPARE
        INCFSZ     CNT1,1
        GOTO       RCV6_LO         ;高电平大于256-56=200*10US=2MS错误
        GOTO       LOOP
COMPARE:
        MOVLW      170
        SUBWF      CNT0,1          ;CNT0的值减初始值等于实际低电平计数值
        MOVLW      56
        SUBWF      CNT1,1          ;CNT1的值减初始值等于实际高电平计数值
        MOVFW      CNT1
        ADDWF      CNT0,1          ;将高低电平的计数加在一起并存入CNT0,通过比较高低电平总的时间来确定是1还是0
        BTFSC      STATUS,C        ;
        GOTO       LOOP            ;总的值大于255(即时间大于255*10US=2.55MS)则错误
        MOVLW      70
        SUBWF      CNT0,0
        BTFSS      STATUS,C        ;
        GOTO       LOOP            ;总的时间小于70*10US=700US则是错误的
        MOVLW      130             ;130*10=1.3MS
        SUBWF      CNT0,0
        BTFSC      STATUS,C        ;
        GOTO       COMPARE_H       ;时间大于1.3MS转去确定是否1
        BCF        FLAGS2,BITIN    ;时间在700US-1.3MS之间则是0
        GOTO       MOVDATA         ;送数
COMPARE_H:
        MOVLW      160
        SUBWF      CNT0,0
        BTFSS      STATUS,C        ;
        GOTO       LOOP            ;小于160*10US=1.6MS,则错误
        MOVLW      230
        SUBWF      CNT0,0
        BTFSC      STATUS,C        ;
        GOTO       LOOP            ;大于230*10US=2.3MS,则错误
        BSF        FLAGS2,BITIN    ;时间在1.6MS-2.3MS之间则是1
MOVDATA:
        RRF        CSR0A,1         ;将每一位移入相应寄存器
        RRF        CSR1A,1
        RRF        CSR2A,1
        RRF        CSR3A,1
        BCF        CSR0A,7
        BTFSC      FLAGS2,BITIN    ;接收当前位送入CSR0.7
        BSF        CSR0A,7
        DECFSZ     CNT2,1          ;是否接收完32位
        GOTO       RCV5


        MOVFW      CSR0A           ;将临时寄存器中的数存回相应寄存器
        MOVWF      CSR0
        MOVFW      CSR1A
        MOVWF      CSR1
        MOVFW      CSR2A
        MOVWF      CSR2
        MOVFW      CSR3A
        MOVWF      CSR3

        COMF       CSR0,0          ;比较键码的反码取反后是否等于键码
        XORWF      CSR1,0
        BTFSS      STATUS,2        ;
        GOTO       LOOP            ;不等于则接收到的是错误的信息
                                   ;将键码送显示
;**********************************************
        MOVLW      03H             ;
        SUBWF      CSR1,W          ;
        BTFSC      STATUS,Z        ;
        GOTO       S2              ;
        
        MOVLW      02H             ;
        SUBWF      CSR1,W          ;
        BTFSC      STATUS,Z        ;
        GOTO       S3              ;
        
        MOVLW      01H             ;
        SUBWF      CSR1,W          ;
        BTFSC      STATUS,Z        ;
        GOTO       S4              ;
        
        MOVLW      00H             ;
        SUBWF      CSR1,W          ;
        BTFSC      STATUS,Z        ;
        GOTO       S5              ;
        
        MOVLW      07H             ;
        SUBWF      CSR1,W          ;
        BTFSC      STATUS,Z        ;
        GOTO       S6              ;
        
        MOVLW      06H             ;
        SUBWF      CSR1,W          ;
        BTFSC      STATUS,Z        ;
        GOTO       S7              ;
        
        MOVLW      05H             ;
        SUBWF      CSR1,W          ;
        BTFSC      STATUS,Z        ;
        GOTO       S8              ;

        MOVLW      04H             ;
        SUBWF      CSR1,W          ;
        BTFSC      STATUS,Z        ;
        GOTO       S9              ;

        MOVLW      08H             ;
        SUBWF      CSR1,W          ;
        BTFSC      STATUS,Z        ;
        GOTO       S10             ;                   
        
        GOTO       LOOP            ;
S2:     BSF        PORTC,0         ;
        GOTO       LOOP            ;
S3:     BSF        PORTC,1         ;
        GOTO       LOOP            ;
S4:     BSF        PORTC,2         ;
        GOTO       LOOP            ;
S5:     BSF        PORTC,3         ;
        GOTO       LOOP            ;
S6:     BSF        PORTC,4         ;
        GOTO       LOOP            ;
S7:     BSF        PORTC,5         ;
        GOTO       LOOP            ;
S8:     BSF        PORTC,6         ;
        GOTO       LOOP            ;
S9:     BSF        PORTC,7         ;
        GOTO       LOOP            ;
S10:    CLRF       PORTC           ;
        GOTO       LOOP            ;                                       
;---------------------------------------------                                        
;        SWAPF      CSR1,W          ;显示值高低位交换,先处理高位
;        ANDLW      0FH             ;屏蔽掉高位
;        MOVWF      DISPBUF_H       ;存入寄存器
;        MOVFW      CSR1            ;显示值低位处理
;        ANDLW      0FH             ;屏蔽掉高位
;        MOVWF      DISPBUF_L       ;存入寄存器
;        GOTO       LOOP            ;
;*********************************************
;******        这是清零子程式 **************
;*********************************************
RESET_:
         BCF     STATUS,RP0        ;
         MOVLW   90                ;
         MOVWF   CONT1             ;
         MOVLW   20H               ;
         MOVWF   FSR               ;
PORTBM0: CLRF    INDF              ;
         CLRWDT                    ;
         INCF    FSR,F             ;
         DECFSZ  CONT1,F           ;
         GOTO    PORTBM0           ;

         MOVLW   90                ;
         MOVWF   CONT1             ;
         MOVLW   0A0H              ;
         MOVWF   FSR               ;
PORTBM1: BSF     STATUS,RP0        ;
         CLRF    INDF              ;
         CLRWDT                    ;
         INCF    FSR,F             ;
         BCF     STATUS,RP0        ;
         DECFSZ  CONT1,F           ;
         GOTO    PORTBM1           ;
         RETLW   0                 ;
;-----------------------------------------------
         END                       ;
;*************************************************************
;S2=FC03 0000  S3=FD02 0000  S4=FE01 0000  S5=FF00 0000     ;CSR0=FC CSR1=03 CSR2=00 CSR3=00 (S2)
;S6=F807 0000  S7=F906 0000  S8=FA05 0000  S9=FB04 0000     ;
;S10=F40B 0000  S11=F50A 0000  S12=F609 0000  S13=F708 0000 ;
;S14=F00F 0000  S15=F10E 0000  S16=F20D 0000  S17=F30C 0000 ;
;S18=EC13 0000  S19=ED12 0000  S20=EE11 0000  S21=EF10 0000 ;
;S22=E817 0000  S23=E916 0000  S24=EA15 0000  S25=EB14 0000 ;
;S26=E41B 0000  S27=E51A 0000  S28=E619 0000  S29=E718 0000 ;
;S30=E01F 0000  S31=E11E 0000  S32=E21D 0000  S33=E31C 0000 ;
;*************************************************************


关键字:SC1621  摇控器  PIC单片机  解码程序 引用地址:SC1621摇控器-PIC单片机解码程序(已测试OK)

上一篇:PIC编的数字钟
下一篇:M50462AP摇控器-PIC解码程序(已测试OK)

推荐阅读最新更新时间:2024-03-16 15:49

PIC单片机的振荡器应该如何配置
  PIC系列单片机可工作于不同的振荡器方式。用户可以根据其系统设计的需要,选择下述四种振荡方式中的一种,其振荡的频率范围在DC~20/25MHz之间。   用户可以根据不同的应用场合,从表1所示的四种振荡方式中选择一种(使用PIC编程器时也需作这种选择的操作),以获得最佳的性能价格比。其中,LP振荡器方式可以降低系统功耗,RC振荡器方式可节省成本。   建立PIC源程序时,其振荡器方式由配置寄存器CONFIG的D1位和D0位来决定,如表2所示。   1内部晶体振荡器/陶瓷振荡器   在LP、XT和HS这三种方式下,需要在微控制器引脚OSC1/CLKIN和OSC2/CLKOUT的两端接一石英晶体或陶瓷谐振器。如图1中,只
[单片机]
<font color='red'>PIC单片机</font>的振荡器应该如何配置
基于PIC单片机的厨房设备智能组合控制设计
随着智能家电控制技术的不断发展,具有多功能和智能化的厨房控制器成为厨房电器设备发展的主流。和传统单一厨房设备控制器相比,多功能厨房控制器具有占用空间小、成本低、功能多、便于设备统一管理,使用安全、方便等优点。 系统以PIC单片机作为主控制芯片,选用VFD(Vacuum Fluorescent Display)真空荧光屏为显示器,结合气敏传感器,热敏电阻,高压点火器,继电器等受控对象,通过检测外部信号以及内部定时时间状态可以控制各种受控对象工作状态之间的相互转换,实现对厨房电器设备的智能控制。系统结构框图如图1所示。 1 各单元电路硬件设计 1.1 电源电路设计 设计所需的6组工作电源均由如图2所示的电路提供。6组电源分别为
[单片机]
基于<font color='red'>PIC单片机</font>的厨房设备智能组合控制设计
PIC单片机开发的一些经验和技巧解析
PIC单片机在国内日益流行,本文介绍MicroChipPIC系列单片机开发过程中软、硬件设计的一些经验、技巧。 由美国Microchip公司生产的PIC系列单片机,由于其超小型、低功耗、低成本、多品种等特点,已广泛应用于工业控制、仪器、仪表、通信、家电、玩具等领域,本文总结了作者在PIC单片机开发过程中的一些经验、技巧,供同行参考。 1 怎样进一步降低功耗 功耗,在电池供电的仪器仪表中是一个重要的考虑因素。PIC16C××系列单片机本身的功耗较低(在5V,4MHz振荡频率时工作电流小于2mA)。为进一步降低功耗,在保证满足工作要求的前提下,可采用降低工作频率的方法,工作频率的下降可大大降低功耗(如PIC16C××在3V,3
[单片机]
<font color='red'>PIC单片机</font>开发的一些经验和技巧解析
基于STM32的红外遥控和解码遥控程序解析
文本主要包含两个内容:一、红外遥控协议的的讲解;二、解码程序解析(参考正点原子的代码) 红外的介绍、优点、缺点就不给大家说了,网上书上都有,下面进入正题 一、红外遥控协议的的讲解 红外遥控的编码目前广泛使用的是:NEC Protocol的PWM(脉冲宽度调制)和Philips RC-5 Protocol的PPM(脉冲位置调制) 本文将以NEC协议实现红外遥控。 NEC协议的特征: 1、8位地址和8位指令长度; 2、地址和命令两次传输(确保可靠性); 3、PWM脉冲宽度调制,以发射红外载波的占空比代表 0 和 1 ; 4、载波频率为38KHz; 5、位时间为1.125ms和2.25ms; NEC 码位的定义:一个脉
[单片机]
基于STM32的红外遥控和<font color='red'>解码</font>遥控<font color='red'>程序</font>解析
基于PIC单片机的多功能厨房控制系统设计
本文介绍了真空荧光屏显示器在多功能厨房控制系统中的软硬件设计方法。系统以PIC16F72单片机为主控制芯片,对外围传感器检测模块和按键扫描电路等采集信号进行处理,发送指令驱动继电器控制天然气灶、抽油烟机、消毒柜、烘干机等多种厨房设备进行工作。该系统采用真空荧光屏显示各种工作状态。具有漏气报警、按键童锁等功能。 随着智能家电控制技术的不断发展,具有多功能和智能化的厨房控制器成为厨房电器设备发展的主流。和传统单一厨房设备控制器相比,多功能厨房控制器具有占用空间小、成本低、功能多、便于设备统一管理,使用安全、方便等优点。 系统以PIC单片机作为主控制芯片,选用VFD(Vacuum Fluorescent Display)真空荧光
[单片机]
基于<font color='red'>PIC单片机</font>的多功能厨房控制系统设计
PIC单片机新手快速入门
  为了给前一段时间学习PIC16F616型单片机的一个总结和方便大家的交流,专家写了这篇关于PIC单片机的学习心得,都是在看了手册和编程调试后用自己的语言组织的,其中有不足或者有疑问的地方希望大家能及时的给予纠正和批评,提出宝贵的意见.   1.PIC单片机的概述   PIC16F616是一款14引脚、8位的CMOS单片机.采用精简指令集,仅有35条指令,由于采用了数据总线和指令总线分离的哈佛总线结构,使得除少量指令不是单周期之外,大部分的指令都是单周期指令.这样有利于提高单片机的运行速度和执行效率.   PIC16F616这款单片机供电电压可以在2V到5.5V之间,内部集成了一个RC振荡器,频率可以配置成8MHZ或者4MHZ
[单片机]
PIC单片机设计的SPWM控制技术
本文采用软硬件结合设计的方法,利用面积等效法,并且基于PIC单片机实现对试验逆变系统的SPWM控制。 目前SPWM的产生方法很多,汇总如下: 1)利用分立元件,采用模拟、数字混和电路生成SPWM波。此方法电路复杂,实现困难且不易改进; 2)由SPWM专用芯片SA828系列与微处理器直接连接生成SPWM波,SA828是由规则采样法产生SPWM波的,相对谐波较大且无法实现闭环控制; 3)利用CPLD(复杂可编程逻辑器件)设计,实现数字式SPWM发生器; 4)基于单片机实现SPWM,此方法控制电路简单可靠,利用软件产生SPWM波,减轻了对硬件的要求,且成本低,受外界干扰小。 在UPS等电力电子设备中,控制方法是核心技术。早期的
[单片机]
<font color='red'>PIC单片机</font>设计的SPWM控制技术
Microchip的新型通用小型PIC单片机系列又添新成员
 PIC16F88X系列成本最低的新成员兼具高性能和易于移植两大特点 全球领先的单片机和模拟半导体供应商——Microchip Technology Inc.(美国微芯科技公司)近日宣布推出全新PIC16F882器件。新器件是PIC16F88X系列28、40和44引脚单片机中成本最低的产品,适用于众多应用领域。PIC16F882有助于设计工程师在代码开发稳定以后选用成本更低的器件。 PIC16F88X系列的五款器件均可兼容其他28和40引脚PIC单片机,易于进行移植;还增了许多新的特性,可为用户节省设计阶段和设计完成后的时间和资金。这些增强特性包括具有时钟切换及故障排除时钟模式的双内置振荡器,更多(多达14个)模数转换通道
[新品]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved