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

📄 rx.asm

📁 遥控接收器遥控接收器遥控接收器遥控接收器的汇编程序
💻 ASM
字号:
;***************************************
;*   接收控制系统软件程序(RX.ASM)
;***************************************
;
;*************************************************
LAMPBLAK EQU    P1.4         ;背光灯控制,=0时开,=1时关.
CS	 EQU	P1.5         ;液晶使能,=1操作,=0禁止.
SID      EQU	P1.6          ;液晶串行数据输入口
SCLK	 EQU	P1.7         ;液晶串行操作时钟口
;***************************************
; 主程序和中断程序入口
; ***************************************
ORG            0000H          ; 复位地址
LJMP           START
ORG            0003H          ; 外中断0中断入口地址
RETI
ORG            000BH          ; 定时器T0中断入口地址
RETI
ORG            0013H          ; 外中断1中断入口地址
RETI
ORG            001BH          ; 定时器T1中断入口地址
RETI
ORG            0023H          ; 串行口中断入口地址
RETI
ORG            002BH          ; 定时器T2中断入口地址
RETI
;
;***************************************
;   主程序
; ***************************************
START:        MOV     SP,#60H        ;设堆栈
              CLR     CS                      ;液晶操
              LCALL   SETUP                   ;LCD初始化
              LCALL   LOGON                   ;开机显示画面
              NOP
MAIN:         JNB            P3.7,RX      ;
              AJMP           MAIN
              NOP
              NOP
LJMP          START           ;设置软件陷阱
;
;***************************************
; 红外线遥控信号接收程序
; ***************************************
RX:            JNB            P3.7,INT0SERVE1;确认中断
RXOUT  :       LJMP          MAIN
INT0SERVE1:    CLR            A
               MOV            DPH,A          ;清DPTR
               MOV            DPL,A
INT0SERVE2:    JB             P3.7,INT0SERVE3;用DPTR对第一个低电平计时   2
               INC            DPTR            ;                          2
               NOP                            ;                          1
               NOP                            ;                          1
               AJMP           INT0SERVE2     ;循环周期是8US              2
INT0SERVE3:    MOV            A,DPH          ;DPTR的高8位放入A中
               JZ             RXOUT        ;不为0,说明DPL有进位则8*255=2MS,即是第一个脉冲。为0,说明小于2MS是一干扰。
               CLR            A
INT0SERVE4:    INC            A              ;脉冲个数加1
INT0SERVE5:    JNB            P3.7,INT0SERVE5;等待低电平
               MOV            R1,#06H        ;帧间高电平宽度判断定时值,即一帧结束的判断
INT0SERVE6:    JNB            P3.7,INT0SERVE4;低电平时转脉冲个数加1
               LCALL          DELAY513US     ;延时513US
               DJNZ           R1,INT0SERVE6
               DEC            A              ;超过3MS判定为一帧结束
               DEC            A
               JZ             FUNCTION0      ;为0则转功能0
               DEC            A
               JZ             FUNCTION1      ;为0则转功能1
               DEC            A
               JZ             FUNCTION2      ;为0则转功能2
               DEC            A
               JZ             FUNCTION3      ;为0则转功能3
               DEC            A
               JZ             FUNCTION4      ;为0则转功能4
               DEC            A
               JZ             FUNCTION5      ;为0则转功能5
               NOP
               NOP
               LJMP           RXOUT       ;返回
FUNCTION0:     CPL           P0.2
               LJMP           RXOUT        ;返回
FUNCTION1:     CPL           P3.3
               LJMP           RXOUT         ;返回
FUNCTION2:     CPL            P3.4
               LJMP           RXOUT        ;返回
FUNCTION3:     CPL            P0.2
               LJMP           RXOUT        ;返回
FUNCTION4:     CPL           P3.3
               LJMP           RXOUT        ;返回
FUNCTION5:     CPL            P3.4
               LJMP           RXOUT
;
;***************************************
; 延时513US程序
; ***************************************
DELAY513US:     MOV            R5,#254
DELAY513US1:    DJNZ           R4,DELAY513US1
RET
;**********以下液晶开机显示程序**************
;
;***************开机显示画面***********************
LOGON:	MOV  A,#80H	       ;第一行左第一个字开始
	LCALL WRITE_COM
	MOV  DPTR,#CHINESE     ;WORD 16*16点阵TEST
	LCALL WRITE_HZ
        MOV  A,#90H	       ;第二行左第一个字开始
	LCALL WRITE_COM
	MOV  DPTR,#CHINESE1    ;WORD 16*16点阵TEST
	LCALL WRITE_HZ
        CLR   LAMPBLAK         ;开背光灯
        LCALL DELAY5S          ;显示5秒
        SETB  LAMPBLAK         ;关背光灯
        RET
;**********初始化程序*************
SETUP:
	MOV  A,#01H		;CLEAR DISPLAY
	LCALL WRITE_COM
	MOV  A,#00110000B	;FUNCTION SETTING
	LCALL WRITE_COM
	MOV  A,#00000010B	;DDRAM SET TO '00H'
	LCALL WRITE_COM
	MOV  A,#00000100B	;
	LCALL WRITE_COM
	MOV  A,#00001100B	;DISPLAY ON
	LCALL WRITE_COM
	MOV  A,#00000001B	;CLEARING SCREEN
	LCALL WRITE_COM
	MOV  A,#10000000B	;SET DDRAM ADDRESS
	LCALL WRITE_COM
        LCALL DELAY
	LCALL DELAY
	LCALL DELAY
        LCALL DELAY
	RET
;************串行命令写入子程序****************
;写入命令字在A中
WRITE_COM:
	        LCALL DELAY1		;
                SETB  CS
		PUSH  ACC
		MOV  R0,#8
		MOV  A,#11111000B
COMM1:
                CLR  C
		RLC  A
		MOV  SID,C
		CLR  SCLK
                SETB SCLK
 		DJNZ R0,COMM1
		POP  ACC
		MOV  R5,A
		ANL  A,#0F0H
		MOV  R0,#8
COMM2:	        CLR  C
		RLC  A
		MOV  SID,C
		CLR  SCLK
		SETB SCLK
		DJNZ R0,COMM2
		MOV  A,R5
		SWAP A
		ANL  A,#0F0H
		MOV  R0,#8
COMM3:	        CLR  C
		RLC  A
		MOV  SID,C
		CLR  SCLK
		SETB SCLK
		DJNZ R0,COMM3
		CLR  CS
	        RET
;
;***********串行数据写入子程序****************
;写入数据字在A中
WRITE_DAT:
		LCALL DELAY1
                SETB CS
		PUSH  ACC
		MOV  R0,#8
		MOV  A,#11111010B
DATA1:	        CLR  C
		RLC  A
		MOV  SID,C
		CLR  SCLK
		SETB SCLK
		DJNZ R0,DATA1
		POP  ACC
		MOV  R5,A
		ANL  A,#0F0H
		MOV  R0,#8
DATA2:	        CLR  C
		RLC  A
		MOV  SID,C
		CLR  SCLK
		SETB SCLK
		DJNZ R0,DATA2
		MOV  A,R5
		SWAP A
		ANL  A,#0F0H
		MOV  R0,#8
DATA3:	        CLR  C
		RLC  A
		MOV  SID,C
		CLR  SCLK
		SETB SCLK
		DJNZ R0,DATA3
		CLR  CS
	        RET
;
;**************延时子程序**********************
;0.544ms
DELAY1:
	MOV  R7,#010H
D11:	MOV  R6,#010H
	DJNZ R6,$
	DJNZ R7,D11
	RET
;0.13s
DELAY:
	MOV  R1,#00H
D2:	MOV  R2,#00H
	DJNZ R2,$
	DJNZ R1,D2
	RET
;5.2s
DELAY5S:MOV  R3,#28H
DE5S:   LCALL DELAY
        DJNZ R3,DE5S
        RET
;
;************16*8点阵字写入子程序共16个******************
WRITE_ASCII:
		MOV  R4,#16
DDDD:	        CLR  A
		MOVC A,@A+DPTR
		LCALL WRITE_DAT
		INC  DPTR
		DJNZ R4,DDDD
		RET
;************16*8点阵字写入子程序共7个******************
WRITE_ASCII7:
		MOV  R4,#7
DDDD7:	        MOV  A,@R0
		LCALL WRITE_DAT
		INC  R0
                DJNZ R4,DDDD7
		RET
;************16*16点阵汉字写入子程序共7个***********
WRITE_HZ:		;WRITE 7 CHINESE TO LCD
		MOV  R4,#7
DD:	        CLR  A
		MOVC A,@A+DPTR
		INC  DPTR
		LCALL WRITE_DAT
		CLR  A
		MOVC A,@A+DPTR
		INC DPTR
		LCALL WRITE_DAT
		DJNZ R4,DD
		RET
;************16*16点阵汉字写入子程序共2个***********
WRITE_HZ2:		;WRITE 8 CHINESE TO LCD
		MOV  R4,#2
DD4:	        CLR  A
		MOVC A,@A+DPTR
		INC  DPTR
		LCALL WRITE_DAT
		CLR  A
		MOVC A,@A+DPTR
		INC DPTR
		LCALL WRITE_DAT
		DJNZ R4,DD4
		RET
;
;*****************************16*8点阵的字符代码表**********************************
TABLE1: DB     30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,3AH,3BH,3CH,3DH,3EH,20H
;               0   1   2   3   4   5   6   7   8   9   :   ;   <   =   > "不显"
;**********************************自造字符地址表***********************************
;
;******************"这里是16*16点阵的汉字代码表"************************************
CHINESE:  DW 0DBA0H,0D5E3H,0BDADH,0BAA3H,0D1F3H,0D1A7H,0D4BAH,0DBA0H;—浙江海洋学院—
CHINESE1: DB "遥控接收器----        ";单片机实验—
;;;;;;;;;;;;;;;;;;;;;;
                END

⌨️ 快捷键说明

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