⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1527.asm

📁 用pic单片机解码的1527遥控遥控接收程序
💻 ASM
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;  中断接收EV1527的程序,单片机选用89C2051
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLOW       EQU    20H
CHIGH      EQU    21H
CDATA      EQU    22H
DATA1_1    EQU    23H ;数据储存寄存器
DATA1_2    EQU    24H
DATA1_3    EQU    25H
FLAGS_RF   EQU    26H  ;信号接收标志位寄存器
    RF_P   EQU    P3.2               ;高频信号接收口
HEAD_OK    EQU    FLAGS_RF.0  ;同步信号接收成功标志位,1为成功0为失败
SIGANLHL   EQU    FLAGS_RF.1 ;信号高低标志位
SIGNAL_OK  EQU    FLAGS_RF.2 ;信号接收ok标志位
     KEY_S EQU 2FH
     KEY_V EQU 2EH
       K1  BIT P3.7
           ORG  00H
           AJMP start
           ORG 00BH 
           AJMP IT0P
           ORG 30H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;            主程序           ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
start: MOV P1,#0FFH ;关闭所有灯
       MOV R0,#00H
       MOV TMOD,#02H ;
       MOV TH0,#9bH  ;这是晶振为12M的定时中断
       MOV TL0,#9bH
       SETB EA  ;启动总中断
       SETB ET0 ;设定定时中断0
       SETB TR0 ;开启中断
       MOV KEY_V,#80H ;按键设置初始值
start1:LCALL KEY    
       JB 25H.0,KK1
       AJMP start1
KK1:   MOV P1,#7FH
       jb 25h.1,kk2
       AJMP start1
kk2:   mov p1,#0bfh
       jb 25h.2,kk3
       ajmp start1  
kk3:   mov p1,#6fh
       jb 25h.3,kk4
       ajmp start1 
kk4:   mov p1,#0efh
       ajmp start1
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;            中断子程序             ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
IT0P:   PUSH  ACC                        
        PUSH  PSW                      
        JB    RF_P,SIGNAL_H ;检测信号接收端是否为一,
                            ;是则跳转到数居高处理程序,否则则继续
SIGNAL_L:
        JB    SIGANLHL,gaoqing ;检测数据低位是否为1高低电位标志?
Lowsignalcounterincrease:
        INC   CLOW     ;计时低电位时间
        JNB   HEAD_OK,IT0P_EXIT1  ;同步信号接收成功?
        MOV   A,CLOW                          
        SUBB  A,#18H   ;2.0MS 17
        JNC   jieshoucuo ;检测c位是否为零,是则表示接收错误
        AJMP  zdtuichu
gaoqing:  ;高标志清除
        CLR   SIGANLHL
        MOV   CLOW,#00H
        AJMP  zdtuichu
;=================================================
SIGNAL_H:
        JB   SIGANLHL,Highsignalcounterincreasc  ;测试信号高低标志位是否为高电位
catchsynchronization:
        jb   HEAD_OK,Signalanalysis
        mov  A,CLOW
        subb A,#95H  ;
        jnc  checkdataeffective
        mov  C,CLOW
        subb A,#14H  ;2.4MS
        jc   checkdataeffective
        setb HEAD_OK   ;设同步信号成功标志
        setb SIGANLHL
        MOV  CDATA,#18H  ;接收信号的位数
IT0P_EXIT1:
       ajmp  zdtuichu ;退出中断
Signalanalysis:
        MOV  A,CHIGH   ;信号的分辩
        SUBB A,#08H         ;07
        JC  L_datazerosignal
        MOV A,CHIGH
        SUBB A,#18H
        JNC checkdataeffective
L_dataonesignal:
        MOV A,CHIGH
        SUBB A,#08H         ;08
        JC checkdataeffective
dataonesignal:   ;信号数据为1
        SETB  C
        AJMP addonesignal
L_datazerosignal:
        MOV A,CHIGH
        SUBB A,#01H
        JC checkdataeffective
datazerosignal:   ;信号数据为0
        CLR  C
addonesignal:
        MOV  A,DATA1_1  ;存储数据
        RLC A
        MOV  DATA1_1,A
        MOV  A,DATA1_2
        RLC  A
        MOV DATA1_2,A
        MOV A,DATA1_3
        RLC A
        MOV DATA1_3,A
        DJNZ CDATA,reselighsignalcounter
        SETB SIGNAL_OK  ;设接收成功标志
        CLR HEAD_OK
        AJMP IT0P_EXIT2
reselighsignalcounter:
        setb SIGANLHL  ;复位       
        mov CHIGH,#00H
        ajmp zdtuichu ;中断退出
Highsignalcounterincreasc:
        INC CHIGH
        AJMP zdtuichu ;中断退出
checkdataeffective:
        SETB SIGANLHL
;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;接收信号错误程序;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;
jieshoucuo:
        clr SIGNAL_OK ;接收信号错误
        CLR HEAD_OK
        MOV DATA1_1,#00H
        MOV DATA1_2,#00H
        MOV DATA1_3,#00H
IT0P_EXIT2:
        MOV CHIGH,#00H  ;清除返回
        MOV CLOW,#00H
        MOV CDATA,#00H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;中断退出;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
zdtuichu:
        POP PSW                      
        POP ACC 
        RETI ;中断返回 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;       按键扫描处理程序        ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEY:   LCALL KEY_CHKSW ;调用按键扫描处理程序'有键按下R0加一
       MOV A,R0
       MOV R1,A
       CJNE R1,#03H,KEY1  ;对码按键次数比较,按建按四次确认对码
       MOV R3,#05H  ;对码LED闪烁次数符值
start2:LCALL DESHAN
       mov R0,#00h  ;重置按键次数
KEY1:  RET
KEY_CHKSW:ACALL SCAN_KEY
       MOV KEY_S,A
       XRL A,KEY_V
       JZ KEY_CHKSW1
       MOV R7,#10
       LCALL DELAYMS
       MOV KEY_V,KEY_S
       LCALL PROC_KEY		;
KEY_CHKSW1:RET
;jiema: SETB TR0
;       ajmp JJ
;===============================================================================
; 扫描按键
; 返回值:A --- 按键状态
SCAN_KEY:CLR A
	 MOV C,K1
	 MOV ACC.7,C
      	 RET
;===============================================================================	
PROC_KEY:
; 按键处理子程序
; 传入参数: KEY_V --- 按键值
	MOV A,KEY_V
	JNB ACC.0,PROC_K1
	RET
PROC_K1:				; 按键K1处理程序
        JB P3.7,PROC_K11
        INC R0
PROC_K11:RET
;===============================================================================	
DELAYMS:
; 延时子程序
	MOV A,R7
	JZ END_DLYMS	
DLY_LP1:
	MOV R6,#185
DLY_LP2:
	DJNZ R6,DLY_LP2
	DJNZ R7,DLY_LP1
END_DLYMS:RET 
DESHAN:CLR P3.5
       ACALL DELAY
       SETB P3.5
       ACALL DELAY
       DJNZ R3,DESHAN
       RET
DELAY: MOV R4,#0FFH
DELAY1:MOV R5,#0FFH
       DJNZ R5,$
       DJNZ R4,DELAY1
       RET  
       END                              

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -