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

📄 6r.bak

📁 非常实用的电子单片机设计程序
💻 BAK
字号:
;                 *************************************
;                 *        (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          			;程序结束

⌨️ 快捷键说明

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