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

📄 n6221c.asm

📁 学林电子实验箱源码 完整板
💻 ASM
字号:
 ;30路遥控开关,按0-30个键分别点亮p0.0-p3.5的灯,32键全灭.
;可以用此外接驱动后控制30路开关!
;***************************************************************************
;*  sxj1974@163.com		     (51c51 test web)     www.8951.com     *
;*  Create by :石学军      www.51c51.com 更多例程请登陆网站        	   *
;***************************************************************************
	org 00h
	ORG 30H
    MOV P1,#0FFH
	MOV P2,#0FFH
	MOV P3,#0FFH
START:


	JB P3.7,$	;等待遥控信号出现
SB:
    MOV R4,#8   	;8毫秒为高电平错误
SBA:
    MOV R5,#250
SBB:
    JB P3.7,SXB1
    DJNZ R5,SBB
    DJNZ R4,SBA
    MOV R4,#2
    JMP SBC
SXB1:
    MOV R5,#5
SXB2:             	;去掉20US的尖峰干扰信号
    JNB P3.7,SBB
    DJNZ R5,SXB2
    JMP START
SBC:
    MOV R5,#250
SB1:
	JB P3.7,SB2 	;2MS内不为高电平错误(监测9MS的低电平引导码)
    DJNZ R5,SB1
    DJNZ R4,SBC
    JMP START
SB2:                	;去掉20US的尖峰干扰信号
    MOV R5,#5
SB2_A:
    JNB P3.7,SB1
    DJNZ R5,SB2_A
    MOV R4,#3
SB2_1:
    MOV R5,#250
SB3:                 ;监测4.5MS高电平,如3MS内出现低电平错误
    JNB P3.7,SXC
    DJNZ R5,SB3
    DJNZ R4,SB2_1
    MOV R4,#2
    JMP SB3_1
SXC:                 ;去掉20US的尖峰干扰信号
    MOV R5,#5
SXC1:
    JB P3.7,SB3
    DJNZ R5,SXC1
    JMP START
SB3_1:                ;监测4.5MS高电平,如5MS内不为低电平错误
    MOV R5,#250
SB3_2:
    JNB P3.7,SB4
    DJNZ R5,SB3_2
    DJNZ R4,SB3_1
    JMP START
SB4:                   ;去掉20US的尖峰干扰信号
    MOV R5,#5
SB4_1:
    JB P3.7,SB3_2
    DJNZ R5,SB4_1
	MOV R1,#1AH 	;设定1AH为起始RAM区
	MOV R2,#4
PP: MOV R3,#8
JJJJ:
    MOV R5,#250
JJJJ2:               ;1MS内不为低电平错误
    JB P3.7,JJJJ3
    DJNZ R5,JJJJ2
    JMP START
JJJJ3:
	LCALL YS1 	;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
	MOV C,P3.7  	;将P3.7引脚此时的电平状态0或1存入C中
	JNC UUU     	;如果为0就跳转到UUU
    MOV R5,#250
JJJJ4:
    JNB P3.7,UUU
    NOP
    DJNZ R5,JJJJ4
    JMP START
UUU:	MOV A,@R1 	;将R1中地址的给A
	RRC A            ;将C中的值0或1移入A中的最低位
	MOV @R1,A       ;将A中的数暂时存放在R1中
	DJNZ R3,JJJJ    ;接收地址码的高8位
	INC R1      	;对R1中的值加1,换成下一个RAM
	DJNZ R2,PP  	;接收完16位地址码和8位数据码和8位数据反码,存放在1AH/1BH/1CH/1DH的RAM中
;以下对代码是否正确和定义进行识别
	MOV A,1AH	;比较高8位地址码
	XRL A,#00000000B ;判断1AH的值是否等于00000000,相等的话A为0
	JNZ EXIT	;如果不相等说明解码失败退出解码程序
	MOV A,1BH	;比较低8位地址
	XRL A,#11111111B ;再判断高8位地址是否正确
	JNZ EXIT	;如果不相等说明解码失败退出解码程序
	LCALL YS3
	MOV A,1CH	;比较数据码和数据反码是否正确?
	CPL A
	XRL A,1DH 	;将1CH的值取反后和1DH比较 不同则无效丢弃,核对数据是否准确
	JNZ EXIT	;如果不相等说明解码失败退出解码程序
	LCALL YS3
	AJMP BIJIAO
;判断在118毫秒内是否有连发码
AA:	MOV R1,#25
XX:	ACALL YS2
	JNB P3.7,HH	;跳转到判断连发代码是否正确的程序段
	DJNZ R1,XX
EXIT: 	;对所有端口清零

	AJMP START
;连发码判断程序段-----------
HH:	MOV R6,#4
S: 	ACALL YS1	;调用882微秒延时子程序
	JB P3.7,EXIT	;延时882微秒后判断P3.7脚是否出现高电平如果有就退出解码程序
	DJNZ R6, S	;重复4次,目的是确认连发码的低电平信号波形
	JNB P3.7, $ 	;等待高电?
	LCALL YS3
	AJMP AA

BIJIAO:	MOV A,1CH	;按键数值判断执
	CJNE A,#10h,TT1
	 clr p0.0
TT1: 	CJNE A,#03h,T2
mov p0,#0ffh
  mov p1,#0ffh
  mov p2,#0ffh
  mov p3,#0ffh

	 clr p0.1
T2: 	CJNE A,#01h,T3
mov p0,#0ffh
  mov p1,#0ffh
  mov p2,#0ffh
  mov p3,#0ffh

	 clr p0.2
T3: 	CJNE A,#06h,T4
mov p0,#0ffh
  mov p1,#0ffh
  mov p2,#0ffh
  mov p3,#0ffh

 clr p0.3
T4: 	CJNE A,#09h,T5
mov p0,#0ffh
  mov p1,#0ffh
  mov p2,#0ffh
  mov p3,#0ffh

  clr p0.4
T5: 	CJNE A,#1dh,T6
mov p0,#0ffh
  mov p1,#0ffh
  mov p2,#0ffh
  mov p3,#0ffh

  clr p0.5
T6:	CJNE A,#1fh,T7
mov p0,#0ffh
  mov p1,#0ffh
  mov p2,#0ffh
  mov p3,#0ffh

  clr p0.6
T7:	 CJNE A,#0dh,T8
mov p0,#0ffh
  mov p1,#0ffh
  mov p2,#0ffh
  mov p3,#0ffh

  clr p0.7
T8:	CJNE A,#19h,t9
mov p0,#0ffh
  mov p1,#0ffh
  mov p2,#0ffh
  mov p3,#0ffh

  clr p1.0
 T9:	CJNE A,#1bh,t10
 mov p0,#0ffh
  mov p1,#0ffh
  mov p2,#0ffh
  mov p3,#0ffh

  clr p1.1
 T10: 	CJNE A,#11h,t11
mov p0,#0ffh
  mov p1,#0ffh
  mov p2,#0ffh
  mov p3,#0ffh

  clr p1.2
T11: 	CJNE A,#15h,t12
mov p0,#0ffh
  mov p1,#0ffh
  mov p2,#0ffh
  mov p3,#0ffh

  clr p1.3
T12: 	CJNE A,#17h,t13
mov p0,#0ffh
  mov p1,#0ffh
  mov p2,#0ffh
  mov p3,#0ffh

  clr p1.4
T13: 	CJNE A,#12h,t14
mov p0,#0ffh
  mov p1,#0ffh
  mov p2,#0ffh
  mov p3,#0ffh

  clr p1.5
T14: 	CJNE A,#16h,t15
mov p0,#0ffh
  mov p1,#0ffh
  mov p2,#0ffh
  mov p3,#0ffh

  clr p1.6
 T15: 	CJNE A,#4ch,t16
 mov p0,#0ffh
  mov p1,#0ffh
  mov p2,#0ffh
  mov p3,#0ffh

  clr p1.7
 T16: 	CJNE A,#40h,t17
 mov p0,#0ffh
  mov p1,#0ffh
  mov p2,#0ffh
  mov p3,#0ffh

  clr p2.0
  T17: 	CJNE A,#48h,t18
  mov p0,#0ffh
  mov p1,#0ffh
  mov p2,#0ffh
  mov p3,#0ffh

  clr p2.1
  T18: 	CJNE A,#04h,t19
  mov p0,#0ffh
  mov p1,#0ffh
  mov p2,#0ffh
  mov p3,#0ffh

  clr p2.2
  T19: 	CJNE A,#00h,t20
 mov p0,#0ffh
  mov p1,#0ffh
  mov p2,#0ffh
  mov p3,#0ffh

  clr p2.3
  T20: 	CJNE A,#02h,t21
  mov p0,#0ffh
  mov p1,#0ffh
  mov p2,#0ffh
  mov p3,#0ffh

  clr p2.4
  T21: 	CJNE A,#05h,t22
 mov p0,#0ffh
  mov p1,#0ffh
  mov p2,#0ffh
  mov p3,#0ffh

  clr p2.5
  T22: 	CJNE A,#54h,t23
 mov p0,#0ffh
  mov p1,#0ffh
  mov p2,#0ffh
  mov p3,#0ffh

  clr p2.6
  T23: 	CJNE A,#4dh,t24
 mov p0,#0ffh
  mov p1,#0ffh
  mov p2,#0ffh
  mov p3,#0ffh

  clr p2.7
  T24: 	CJNE A,#0ah,t25
 mov p0,#0ffh
  mov p1,#0ffh
  mov p2,#0ffh
  mov p3,#0ffh

  clr p3.0
  T25: 	CJNE A,#1eh,t26
mov p0,#0ffh
  mov p1,#0ffh
  mov p2,#0ffh
  mov p3,#0ffh

  clr p3.1
  T26: 	CJNE A,#0eh,t27
 mov p0,#0ffh
  mov p1,#0ffh
  mov p2,#0ffh
  mov p3,#0ffh

  clr p3.2
  T27: 	CJNE A,#1ah,t28
mov p0,#0ffh
  mov p1,#0ffh
  mov p2,#0ffh
  mov p3,#0ffh

  clr p3.3
  T28: 	CJNE A,#1ch,t29
 mov p0,#0ffh
  mov p1,#0ffh
  mov p2,#0ffh
  mov p3,#0ffh

  clr p3.4
  T29: 	CJNE A,#14h,t31
mov p0,#0ffh
  mov p1,#0ffh
  mov p2,#0ffh
  mov p3,#0ffh

  clr p3.5
  T31: 	CJNE A,#0ch,t32
  mov p0,#0ffh
  mov p1,#0ffh
  mov p2,#0ffh
  mov p3,#0ffh

t32:	AJMP AA
YS1:	 MOV R4,#20	 ;延时子程序1,精确延时882微秒
	D1: MOV R5,#20
	DJNZ R5,$
	DJNZ R4,D1
	RET
YS2: MOV R4,#10 	;延时子程序2,精确延时4740微秒
	D2: MOV R5,#235
	DJNZ R5,$
	DJNZ R4,D2
	RET
YS3:	MOV R4,#2	;延时程序3,精确延时1000微秒
	D3:MOV R5,#248
	DJNZ R5,$
	DJNZ R4,D3
	RET
	END


⌨️ 快捷键说明

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