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

📄 接收.asm

📁 由AT89S52单片机编写的红处线摇控并送液晶显示。
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;*      主程序和中断程序入口         *
CS1     BIT     P2.3
CS2     BIT     P2.4
D_I     BIT     P3.6   ;4
R_W     BIT     P2.5   ;5
E       BIT     P2.6   ;6
DB0_DB7 EQU     P0
X       EQU     22H	;页地址
Y       EQU     23H	;列地址   
COM     EQU	    24H
DAT     EQU     24H
COUNT   EQU     25H  	    ;代码倒计数单元	        
CODE0   EQU     26H	    ;表格起始地址,赋0值后与DPTR合成查表指针地址
MUL_    EQU     26H		;显示数字时,暂存单元(要显示的数是几就在里面存几)  		
		
		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:     
        ACALL INT
        SETB  CS1
	    SETB  CS2
        ACALL CLEAR
	    ACALL DELAY1
        LCALL SY			 ;显示开机状态  
	    ACALL DELAY1
        SETB  CS1
	    SETB  CS2
        ACALL CLEAR
        MOV P2,#00H
          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      ;上电初始化
;
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:           MOV MUL_,#00H          		;P0口各端口开关输出控制
                ACALL DSPP
				LJMP    READOUTT0          	;转中断退出
FUN1:           MOV MUL_,#01H 
				ACALL DSPP
                LJMP    READOUTT0          	;
FUN2:           MOV MUL_,#02H 
				ACALL DSPP
                LJMP    READOUTT0          	;
FUN3:           MOV MUL_,#03H 
				ACALL DSPP
                LJMP    READOUTT0          	;
FUN4:           MOV MUL_,#04H 
				ACALL DSPP
                LJMP    READOUTT0          	;
FUN5:           MOV MUL_,#05H 
				ACALL DSPP
                LJMP    READOUTT0          	;
FUN6:           MOV MUL_,#06H 
				ACALL DSPP
                LJMP    READOUTT0          	;
FUN7:           MOV MUL_,#07H 
				ACALL DSPP
                LJMP    READOUTT0          	;
FUN8:           MOV MUL_,#08H 
				ACALL DSPP
                LJMP    READOUTT0          	;
FUN9:           MOV MUL_,#09H 
				ACALL DSPP
                LJMP    READOUTT0          	;
FUN10:           MOV MUL_,#0AH 
				ACALL DSPP
                LJMP    READOUTT0          	;
FUN11:           MOV MUL_,#0BH 
				ACALL DSPP
                LJMP    READOUTT0          	;
FUN12:           MOV MUL_,#0CH 
				ACALL DSPP
                LJMP    READOUTT0          	;
FUN13:           MOV MUL_,#0DH 
				ACALL DSPP
                LJMP    READOUTT0          	;
FUN14:           MOV MUL_,#0EH 
				ACALL DSPP
                LJMP    READOUTT0          	;
FUN15:           MOV MUL_,#0FH 
				ACALL DSPP
                LJMP    READOUTT0          	;转中断退出
DSPP:   SETB CS2
	    CLR  CS1
        MOV X,#0BAH	        	
        MOV Y,#40H		    		
        MOV     DPTR,#DDB   
        ACALL TU
	    ACALL DISP_
		RET
;***********************设置CODE0查表指针初值*********************   
TU:		MOV B,#10H	   ;要显示的数是几就用几乘以16,得到基址起始地址  
        MOV A,MUL_
		MUL AB
		MOV CODE0,A
		RET
;************************8位字宽显示子程序:  (CODE0待设)**********************
DISP_:  MOV 39H,#02H
	    MOV COUNT,#08H	    
LP_:    MOV COM,X	        ;设置页地址
	    LCALL INST
	    MOV COM,Y	        ;设置列地址
	    LCALL INST 
W_:     MOV A,CODE0		  	     
        MOVC A,@A+DPTR
	    MOV DAT,A
	    LCALL DATA_		
	    INC CODE0
	    DJNZ COUNT,W_
	    DJNZ 39H,LP1_
	    RET
LP1_:   INC X
	    MOV COUNT,#08H
	    AJMP LP_
;***************************16位字宽显示子程序**********************   
DISP:   MOV 39H,#02H
	    MOV CODE0,#00H

⌨️ 快捷键说明

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