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

📄 xiaoche.lst

📁 电子设计红外遥控很好用,是用红外控制小车的程序
💻 LST
字号:
                        ;=================================================
                        ; 红外遥控接收
                        ;=================================================
                        	ORG 0000H
0000                    MAIN:
0000  30A203            	JNB P2.2,IR ;遥控扫描
0003  020000            	LJMP MAIN ;在正常无遥控信号时,一体化红外接收头输出是高电平,程序一直在循环。
                        ;=================================================
                        ; 解码程序
0006                    IR:
                        ;以下对遥控信号的9000微秒的初始低电平信号的识别,波形见图5。
0006  7E0A              	MOV R6,#10
0008                    IR_SB:
0008  1167              	ACALL DELAY882    ;调用882微秒延时子程序(0.882ms)
000A  20A22D            	JB P2.2,IR_ERROR  ;延时882微秒后判断P2.2脚是否出现高电平如果有就退出解码程序
000D  DEF9              	DJNZ R6,IR_SB     ;重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序(0.882*10=882ms)
                        ;识别连发码,和跳过4.5ma的高电平。
000F  30A2FD            	JNB P2.2, $       ;等待高电平避开9毫秒低电平引导脉冲
0012  1175              	ACALL DELAY2400
0014  30A220            	JNB P2.2,IR_Rp    ;这里为低电平,认为是连发码信号,见图6。
0017  1175              	ACALL DELAY2400   ;延时4.74毫秒避开4.5毫秒的结果码
                         
                        ;以下32数据码的读取,0和1的识别 请看图2
0019  791A              	MOV R1,#1AH       ;设定1AH为起始RAM区(系统码1)
001B  7A04              	MOV R2,#4
001D                    IR_4BYTE:
001D  7B08              	MOV R3,#8         ;用于读取8位数据

001F                    IR_8BIT:
001F  30A2FD            	JNB P2.2,$ 		  ;等待地址码第一位的高电平信号
0022  120067            	LCALL DELAY882    ;高电平开始后用882微秒(0.882ms)的时间尺去判断信号此时的高低电平状态
0025  A2A2              	MOV C,P2.2        ;将P2.2引脚此时的电平状态0或1存入C中
0027  5003              	JNC IR_8BIT_0     ;如果为0就跳转到IR_8BIT_0
0029  12006E            	LCALL DELAY1000   ; 调用1 ms延时
002C                    IR_8BIT_0:
002C  E7                	MOV A,@R1         ;将R1中地址的给A
002D  13                	RRC A             ;将C中的值0或1移入A中的最低位
002E  F7                	MOV @R1,A         ;将A中的数暂时存放在R1中
002F  DBEE              	DJNZ R3,IR_8BIT   ;接收地址码的高8位

0031  09                	INC R1            ;对R1中的值加1,换下一个RAM
0032  DAE9              	DJNZ R2,IR_4BYTE  ;接收完16位地址码和8位数据码和8位数据,

                        ;存放在1AH        /1BH/         1CH/          1DH的RAM中
                        ;      系统码1     系统码2       数据码        数据反码

                        ;解码成功
0034  02003D            	JMP IR_GOTO

0037                    IR_Rp:
                        ;这里为重复码执行处
                        ;按住遥控按键时,每过108ms就到这里来
0037  02003D            	JMP IR_GOTO

003A                    IR_ERROR:              ;错语退出

003A  020000            	LJMP MAIN              ;退出解码子程序

                        ;=================================================
003D                    IR_GOTO:
                        ;遥控执行部份
                        ;这里还要判断1AH和1BH 两个系统码或用户码,用于识别不同的遥控器
                        ;MOV A,1AH
                        ;CJNE A,#xxH,IR_ERROR ;用户码1不对则退出
                        ;MOV A,1BH
                        ;CJNE A,#xxH,IR_ERROR ;用户码2不对则退出


                        ;判断两个数据码是否相反
003D  E51C              	MOV A,1CH             ;1CH=数据正码*******1DH=数码反码(遥控器接收部分用反码)
003F  F4                	CPL A
0040  B51DF7            	CJNE A,1DH,IR_ERROR   ;两个数据码不相反则退出
0043  C2A3              	CLR P2.3              ;蜂鸣器鸣响-嘀嘀嘀-的声音,表示解码成功????????????
0045  120075            	LCALL DELAY2400
0048  120075            	LCALL DELAY2400
004B  120075            	LCALL DELAY2400
004E  D2A3              	SETB P2.3             ;蜂鸣器停止?????????
0050  E51D              	MOV A,1DH             
0052  900081            	MOV DPTR,#TAB   ;功能键处理
0055  E0                    MOVX A,@DPTR
0056  F590                  MOV  P1,A

                        ;遥控执行部份
                        ;MOV A,1DH ;判断对应按键
                        ;CJNE A,#xxH,$+6
                        ;LJMP -à跳到对应按键执行处
                        ;CJNE A,#xxH,$+6
                        ;LJMP -à跳到对应按键执行处
                        ;.
                        ;清除遥控值使连按失效
0058  751A00            	MOV 1AH,#00H
005B  751B00            	MOV 1BH,#00H
005E  751C00            	MOV 1CH,#00H
0061  751D00            	MOV 1DH,#00H
0064  020000            	LJMP MAIN
                        ;=================================================
                        ; 延时子程序
                        ;=============================882us
0067                    DELAY882: ;1.085x ((202x4)+5)=882
0067  7FCA              	MOV R7,#202
0069                    DELAY882_A:
0069  00                	NOP
006A  00                	NOP
006B  DFFC              	DJNZ R7,DELAY882_A
006D  22                	RET
                        ;=============================1000us
006E                    DELAY1000: ;1.085x ((229x4)+5)=999.285
006E  7FE5              	MOV R7,#229
0070                    DELAY1000_A:
0070  00                	NOP
0071  00                	NOP
0072  DFFC              	DJNZ R7,DELAY1000_A
0074  22                	RET
                        ;=============================2400us
0075                    DELAY2400: ;1.085x ((245x9)+5)=2397.85
0075  7FF5              	MOV R7,#245
0077                    DELAY2400_A:
0077  00                	NOP
0078  00                	NOP
0079  00                	NOP
007A  00                	NOP
007B  00                	NOP
007C  00                	NOP
007D  00                	NOP
007E  DFF7              	DJNZ R7,DELAY2400_A
0080  22                	RET

                        ;         0   1    2    3   4  5   6    7   8    9
                        ;          
0081  0A0E06FFFF0F      TAB: DB 0AH 0EH 06H 0FFH 0FFH 0FH 0FFH 0FFH 09H 0DH
      FFFF090D

                        END

		 ;;******  红外遥控器键值表  ******

		 ;;  16                     14
		 ;;  00     01      02      03
		 ;;  04     05      06      07
		 ;;  08     09      0A      0B
		 ;;  0C     0D      19      1A
		 ;;  12         15          10
		 ;;  13         18          11
		 ;;  1E     1C      1D      0F
		 ;;  0E     1F      17      1B
		 ;;==========================
		 ;;***************************************  小车的动作参数  ****************************************
		 ;;   P1.3      P1.2      P1.1     P1.0
		 ;;  IOB11    IOB10     IOB9     IOB8      后轮电机  前轮电机
		 ;;    1         1         1        1            停      停            停止(0F)
		 ;;    1         1         1        0            正转    停            前进(0E)
		 ;;    1         1         0        1            反转    停            后退(0D)
		 ;;**********************************************************************************************
		 ;;    1         0         1        0             正      正          左前转(0A)
		 ;;    0         1         1        0             正      反          右前转(06)
		 ;;***********************************************************************************************
		 ;;    1         0         0        1             反      正          左后转(09)
		 ;;    0         1         0        1             反      反          右后转(05)
		 ;;;=====================================================================


⌨️ 快捷键说明

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