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

📄 6r.asm

📁 用单片机做的多路遥控,接收控制板,很好用的.
💻 ASM
字号:
	;*************************************
	;*	(INCEPT3.ASM)	*
	;*	十五路遥控接收板	*
	;*	2001.7.18	*
	;*	*
	;*************************************
	;
	;**********************************************************************
	;*	*
	;*	A	P1.0	1	40	VCC	*
	;*	B	P1.1	2	39	P0.0	LED0	*
	;*	C	P1.2	3	38	P0.1	LED1	*
	;*	P1.3	4	37	P0.2	LED2	*
	;*	P1.4	5	36	P0.3	LED3	*
	;*	P1.5	6	35	P0.4	LED4	*
	;*	P1.6	7	34	P0.5	LED5	*
	;*	P1.7	8	33	P0.6	LED6	*
	;*	100HZ	RST	9	32	P0.7	LED7	*
	;*	P3.0	10	MCS-51	31	EA	VDD	*
	;*	P3.1	11	30	ALE	*
	;*	REMOTEIN	P3.2	12	29	PSEN	*
	;*	P3.3	13	28	P2.7	调光脉冲	*
	;*	P3.4	14	27	P2.6	LED8	*
	;*	P3.5	15	26	P2.5	LED9	*
	;*	P3.6	16	25	P2.4	LED10	*
	;*	P3.7	17	24	P2.3	LED11	*
	;*	XTAL2	18	23	P2.2	LED12	*
	;*	XTAL1	19	22	P2.1	LED13	*
	;*	VSS	20	21	P2.0	DEV14(灯泡)	*
	;*	*
	;*	*
	;**********************************************************************
;注:	P3.0为100HZ的交流电源过零点相位参考输入
	;
	;
	;*************************************
	;*	*
	;*	主程序和中断程序入口	*
	;*	*
	;*************************************
	ORG	0000H	;程序开始地址
	LJMP	START	;跳至START执行
	ORG	0003H	;外中断0中断入口
	LJMP	INTEX0	;跳至INTEX0执行中断服务程序
	ORG	000BH	;定时器T0中断入口地址
	RETI	;中断返回(不开中断)
	ORG	0013H	;外中断1中断入口地址
	RETI	;中断返回(不开中断)
	ORG	001BH	;定时器T1中断入口地址
	RETI	;中断返回(不开中断)
	ORG	0023H	;串行口中断入口地址
	RETI	;中断返回(不开中断)
	ORG	002BH	;定时器T2中断入口地址
	RETI	;中断返回(不开中断)
	;
	;***************************
	;*	*
	;*	初始化程序	*
	;*	*
	;****************************
CLEARMEMIO:	CLR	A	;
	DEC	A	;A为#0FFH
	MOV	P0,A	;P1-P3口置1
	MOV	P1,A	;
	MOV	P2,A	;
	MOV	P3,A	;
CLEARMEM:	MOV	IE,#00H	;关所有中断
	SETB	EX0	;开外中断
	SETB	EA	;总中断允许
	RET	;子程序返回
	;
	;*************************************
	;*	*
	;*	主程序	*
	;*	*
	;*************************************
START:	LCALL	CLEARMEMIO	;上电初始化
	LCALL	LOOP	;调用调光控制程序
	;
MAIN:	JB	P3.0,MAIN	;50HZ交流电未过零转MAIN
	LCALL	DLX	;过零点时调用延时子程序(延时可变)
	CLR	P2.7	;发调光脉冲
	LCALL	DELAY	;持续512微秒
	SETB	P2.7	;关调光脉冲
	LJMP	MAIN	;转MAIN循环
	NOP	;PC值出错处理
	NOP
	LJMP	START	;出错时重新初始化
	;******************************
	;遥控接收程序
	;******************************
	;采用中断接收
INTEX0:	CLR	EX0	;关外中断
	JNB	P3.1,READ1	;P3.1口为低电平转READ1
READOUTT0:	SETB	EX0	;P3.1口为高电平开中断(系干扰)
	RETI	;退出中断
	;
READ1:	CLR	A	;清A
	MOV	DPH,A	;清DPTR
	MOV	DPL,A	;
HARD1:	JB	P3.1,HARD11	;P3.1变高电平转HARD11
	INC	DPTR	;用DPTR对低电平计数
	NOP	;1微秒延时
	NOP
	AJMP	HARD1	;转HARD1循环(循环周期为8微秒)
HARD11:	MOV	A,DPH	;DPTR高8位放入A
	JZ	READOUTT0	;为0(脉宽小于8*255=2毫秒)退出
	CLR	A	;不为0,说明是第一个宽脉冲(3毫秒)
READ11:	INC	A	;脉冲个数计1
READ12:	JNB	P3.1,READ12	;低电平时等待
	MOV	R1,#06H	;高电平宽度判断定时值
READ13:	JNB	P3.1,READ11	;变低电平时转READ11脉冲计数
	LCALL	DELAY	;延时(512微秒)
	DJNZ	R1,READ13	;6次延时不到转READ13再延时
	DEC	A	;超过3毫秒判为结束,减1
	DEC	A	;减1
	JZ	FUN0	;为0执行FUN0(2个脉冲)
	DEC	A	;减1
	JZ	FUN1	;为0执行FUN1(3个脉冲)
	DEC	A	;
	JZ	FUN2	;为0执行FUN2(4个脉冲)
	DEC	A	;
	JZ	FUN3	;为0执行FUN3(5个脉冲)
	DEC	A	;
	JZ	FUN4	;为0执行FUN4(6个脉冲)
	DEC	A	;
	JZ	FUN5	;为0执行FUN5(7个脉冲)
	DEC	A	;
	JZ	FUN6	;为0执行FUN6(8个脉冲)
	DEC	A	;
	JZ	FUN7	;为0执行FUN7(9个脉冲)
	DEC	A	;
	JZ	FUN8	;为0执行FUN8(10个脉冲)
	DEC	A	;
	JZ	FUN9	;为0执行FUN9(11个脉冲)
	DEC	A	;
	JZ	FUN10	;为0执行FUN10(12个脉冲)
	DEC	A	;
	JZ	FUN11	;为0执行FUN11(13个脉冲)
	DEC	A	;
	JZ	FUN12	;为0执行FUN12(14个脉冲)
	DEC	A	;
	JZ	FUN13	;为0执行FUN13(15个脉冲)
	DEC	A	;
	JZ	FUN14	;为0执行FUN14(16个脉冲)
	DEC	A	;
	JZ	FUN15	;为0执行FUN15(17个脉冲)
	NOP	;
	NOP	;
	LJMP	READOUTT0	;出错退出
	;
FUN0:	CPL	P0.0	;P0口各端口开关输出控制
	LJMP	READOUTT0	;转中断退出
FUN1:	CPL	P0.1	;
	LJMP	READOUTT0	;
FUN2:	CPL	P0.2
	LJMP	READOUTT0
FUN3:	CPL	P0.3
	LJMP	READOUTT0
FUN4:	CPL	P0.4
	LJMP	READOUTT0
FUN5:	CPL	P0.5
	LJMP	READOUTT0
FUN6:	CPL	P0.6
	LJMP	READOUTT0
FUN7:	CPL	P0.7
	LJMP	READOUTT0
FUN8:	CPL	P2.6	;P2口各端口开关输出控制
	LJMP	READOUTT0	;转中断退出
FUN9:	CPL	P2.5
	LJMP	READOUTT0
FUN10:	CPL	P2.4
	LJMP	READOUTT0
FUN11:	CPL	P2.3
	LJMP	READOUTT0
FUN12:	CPL	P2.2
	LJMP	READOUTT0
FUN13:	CPL	P2.1
	LJMP	READOUTT0
FUN14:	CPL	P2.0	;P2.0口开关控制
	LJMP	READOUTT0	;转中断退出
FUN15:	DEC	P1	;P1口值减1
	MOV	A,P1	;移入A
	CJNE	A,#0F7H,OUTT0	;不等转OUTT0(显示值小于7)
	CLR	A	;相等清A
	DEC	A	;A为#0FFH
	MOV	P1,A	;放回P1(显示值为7)
OUTT0:	LCALL	LOOP	;亮度调整
	LJMP	READOUTT0	;中断退出
	;
	;*************************************
	;*	延时	255	X	2	=	512	US	*
	;*************************************
	;
DELAY:	MOV	R0,#0FFH
DELAY1:	DJNZ	R0,DELAY1
	RET
	;
	;*************************************
	;*	延时10	MS	*
	;*************************************
	;
DL10MS:	MOV	R1,#14H
DL10MS1:	LCALL	DELAY
	DJNZ	R1,DL10MS1
	RET
	;
	;*************************************
	;*	调光延时时间控制	*
	;*************************************
	;
DLX:	MOV	R2,B	;置延时初值
DLX1:	LCALL	DELAY	;调512微秒延时子程序
	DJNZ	R2,DLX1	;循环控制
	RET	;返回
	;
	;*************************************
	;*	调光控制程序	*
	;*************************************
	;根据数码管指示值设置调光脉冲延时值
LOOP:	MOV	A,P1	;读入P1口值
	SUBB	A,#0FFH	;比较
	JZ	LOOP7	;值为#0FFH(显示7)时转LOOP7
	MOV	A,P1	;
	SUBB	A,#0FEH	;
	JZ	LOOP6	;值为#0FEH(显示6)时转LOOP6
	MOV	A,P1	;
	SUBB	A,#0FDH	;
	JZ	LOOP5	;值为#0FDH(显示5)时转LOOP5
	MOV	A,P1	;
	SUBB	A,#0FCH	;
	JZ	LOOP4	;值为#0FCH(显示4)时转LOOP4
	MOV	A,P1	;
	SUBB	A,#0FBH	;
	JZ	LOOP3	;值为#0FBH(显示3)时转LOOP3
	MOV	A,P1	;
	SUBB	A,#0FAH	;
	JZ	LOOP2	;值为#0FAH(显示2)时转LOOP2
	MOV	A,P1	;
	SUBB	A,#0F9H	;
	JZ	LOOP1	;值为#0F9H(显示1)时转LOOP1
	MOV	A,P1	;
	SUBB	A,#0F8H	;
	JZ	LOOP0	;值为#0F8H(显示0)时转LOOP0
	RET	;返回
	;
LOOP7:	MOV	B,#01H	;设置延时值#01H(最亮)
	RET	;返回
LOOP6:	MOV	B,#02H	;设置延时值#02H(次亮)
	RET	;返回
LOOP5:	MOV	B,#04H	;
	RET
LOOP4:	MOV	B,#06H	;
	RET
LOOP3:	MOV	B,#08H	;
	RET
LOOP2:	MOV	B,#0AH	;
	RET
LOOP1:	MOV	B,#0CH	;设置延时值#0CH(次暗)
	RET	;返回
LOOP0:	MOV	B,#0DH	;设置延时值#0DH(最暗)
	RET	;返回
	;
	END	;程序结束
	END

⌨️ 快捷键说明

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