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

📄 智能电源插座.asm

📁 51常用子程序-4.0M.zip
💻 ASM
字号:
;FILE NAME:GJ01.ASM 智能电源插座程序清单

          	ORG  0000H
          	AJMP MAIN
          	ORG  0003H           	;INT0中断入口    
          	AJMP WINT0
          	ORG  000BH          		 ;T0中断入口    
          	AJMP WT0
	ORG  30H
MAIN:     MOV SP,#40H         	;栈指针
	 MOV 30H,#0	      	;显示缓冲区
          	CLR 00H             		;设定/等待 状态标志:
                CLR 01H             		;工作/停止状态标志: 
                CLR 02H             		;通/断状态标志
          	CLR 03H             		;秒标志 T0定时1s时置位
          	CLR 04H             		;分标志 T0定时1m时置位
          	CLR 05H             		;时标志 T0定时1h时置位
	MOV 21H,#0      		;0.5ms定时中断计数器初值
	MOV 22H,#0      		;100ms定时器初值 
	MOV 23H,#0    		 ;1s定时器初值
	MOV 24H,#0    		 ;1m定时器初值 
	MOV 25H,#0     		;1h定时器初值 
                                                         
	MOV 26H,#5     		;设定“间开”时间
	MOV 27H,#2    		;设定“间关”时间
	MOV 28H,#4    		;设定“延时”时间
          	MOV TH0,#05H       	;T0 0.5ms 初值
          	MOV TL0,#05H        	;T0 0.5ms 自动装入初值
          	MOV TMOD,#02H       	;T0  方式2设定 
          	SETB EA             		;开CPU中断
          	SETB ET0            		;允许T0中断  
          	SETB TR0           		;允许T0计数  
          	SETB IT0            		;INT0触发方式设置
          	SETB EX0            		;INT0请求中断
STAR:	 NOP
          	ACALL DM
          	ACALL DH
          	MOV A,28H           		; 28H 为设定的延时时间
          	MOV 30H,A           		; 30H是显示缓冲区
          	JNB 01H,WEND        	; 01H=0  转移到循环等待状态
          	ACALL DSP3          	; 调用“时”显示子程序 
          	JB 02H,WON          	; 02H=1 转“间通”
          	SETB P3.7           		; 
          	AJMP STAR      		;循环
WON:	CLR P3.7            		;
          	AJMP STAR           	;循环
WEND:	CLR P3.1            		;点亮LED2
          	MOV P1,#0FFH        	;数码管熄灭
          	JB 00H,STAR         	;延时结束后可按K1再设置
          	AJMP WEND           	;循环等待状态

DM: 	JNB 04H,MRET  		;04H=0  T0 定时器1min时间未到 
        	CLR 04H       		;04H=1  T0 定时器1min时间到 清分标志
          	DJNZ 29H,MRET 		;判通断控制时间是否到 未到即转
          	JB 02H,M01    		;判现在状态, 若是通状态,即转为断状态设定
          	SETB 02H      		; 判现在状态, 若是断状态,即转为通状态设定
         	 MOV A,26H		
          	MOV 29H,A		
          	AJMP MRET		
M01:  	CLR 02H			
          	MOV A,27H		
          	MOV 29H,A		
MRET:	 RET			
				
DH:   	JNB 05H,MRET  		;05H=0  T0 定时器1h时间未到 即转
          	DJNZ 28H,MRET 		;延时时间是否到 未到即转
          	CLR 01H       		;01H=0  清延时工作标志
          	CLR TR0       		;延时控制时间到, 关T0
          	RET
;
DSP1:	  MOV A,26H       		;“间开”显示子程序
          	MOV 30H,A 
          	ACALL DSP
          	RET
DSP2:	 MOV A,27H       		;“间关”显示子程序
         	 MOV 30H,A 
          	ACALL DSP
          	RET
DSP3:	MOV A,28H      		 ;“工作”显示子程序
          	MOV 30H,A 
          	ACALL DSP
          	RET
        ;
DSP:	MOV R0,#30H      		;30H  为显示数据缓冲器
	MOV DPTR,#TAB    	;笔划段码表指针
	MOV A,@R0
	MOVC A,@A+DPTR
	MOV P1,A
	ACALL DL
	RET
;
DL:	MOV R7,#02H
DL1:	MOV R6,#0FFH
DL2:	DJNZ R6,DL2
	DJNZ R7,DL1
	RET
;DELAY:  MOV 36H,#64H
;DELAY1: MOV 37H,#31H
;DELAY2: DJNZ 37H,DELAY2
;        DJNZ 36H,DELAY1
;        RET
;
TAB:      DB 0C0H,0F9H,0A4H,0B0H,99H ;0,1,2,3,4
          DB 92H,82H,0F8H,80H,90H    ;5,6,7,8,9
          DB 88H,83H,0C6H,0A1H,0F3H  ;A,b,C,d,E,F

WT0:      PUSH ACC
          PUSH PSW
	  INC 21H			;0.5ms   21H中为0.5ms的倍数
	  MOV A,21H
	  CJNE A,#0C8H,TORETI 	;200D=C8H    0.5msX200=100ms
	  MOV 21H,#0
	  INC 22H  		;100ms     22H中为 100ms 的倍数
	  MOV A,22H
	  CJNE A,#10,TORETI       ;100msX10=1s 
	  MOV 22H,#0		
	  INC 23H  		; 23H中为 1s 的倍数
          SETB 03H                ;每隔1秒钟 03H置位,为系统提供秒信号
	  MOV A,23H
	  CJNE A,#60,TORETI
	  MOV 23H,#0
	  INC 24H			;1m
	  SETB 04H                ;每隔1分钟 04H 置位,为系统提供分信号   
	  MOV A,24H               
	  CJNE A,#60,TORETI
	  MOV 24H,#0
	  INC 25H  		;1h
	  SETB 05H                ;每隔1小时 05H 置位,为系统提供时信号   
	  MOV A,25H
	  CJNE A,#24,TORETI
	  MOV 25H,#0		
TORETI:   POP PSW
          POP ACC
          RETI
WINT0:    PUSH ACC
          PUSH PSW
          SETB 00H
          CLR EX0          ;关中断
          CLR TR0          ;关计数器
          ACALL DL         ;调延时子程序
          SETB 00H

PK:       JB P3.2,PK3      ;判K1按下否,未按则转到“待启动状态”(判K3)
          CLR P3.0         ;LED1 点亮   
          SETB P3.1
          JNB P3.2,$       ;待K1(P3.2)释放    
          JB P3.2,PK2O     ;判K1(P3.2)按下否,未按则转到“间开”设定(判K2)
          ACALL PK2F       ;K1按下,进入“间关”设定(判K2),
PK1:      JB P3.2,PK3      ;判K1按下否,未按则转到“待启动状态”(判K3)   
          JNB P3.2,$       ;待K1释放    
          ACALL SH         ;设定延时时间    
PK3:      JB P3.4,PK       ;判K3按下否,未按则转到判K1状态   
          CLR P3.7         ;K3按下,系统启动
          SETB P3.0        
          SETB P3.1        
          CLR  00H
          SETB TR0          ;开计数器
          SETB EX0          ;开中断
          CLR 00H
          POP PSW           ;恢复现场  
          POP ACC
          RETI
SH:       CLR P3.0         ;点亮LED1
          CLR P3.1         ;点亮LED2
          ACALL DL
          MOV R0,#20H
PK2H1:    JB P3.3,PK2H2    ;判K2(P3.3)按下否,未按下再读
          MOV A,28H
          CJNE A,#9,PK2H3
          MOV 28,#0
PK2H3:    INC 28H
          ACALL DSP3
          JNB P3.3,$        ;等待K3释放
          AJMP PK2H1
PK2H2:    DJNZ R0,PK2H1
          RET

PK2F:     SETB P3.0        ;LED1灭
          CLR P3.1         ;LED2亮
          ACALL DL
          MOV R0,#20H
PK2F1:    JB P3.3,PK2F2    ;判K2(P3.3)按下否,未按下再读
          INC 27H
          ACALL DSP1
          JNB P3.3,$        ;等待K2释放
          AJMP PK2F1
PK2F2:    DJNZ R0,PK2F1
          RET
          
PK2O:     ACALL DL          ;“间开”时间设定
          MOV R0,#20H         
PK2O1:    JB P3.3,PK2O2     ;判K2(P3.3)按下否,未按下再读
          INC 26H           ;K2按下,“间开”时间加1  
          ACALL DSP1        ;  
          JNB P3.3,$        ;等待K2释放
          AJMP PK2O1         ;再读K2  
PK2O2:    DJNZ R0,PK2O1
          AJMP PK

          END



;                                   ---  王爱廉 ---

⌨️ 快捷键说明

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