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

📄 hearter.dt

📁 这是一个小程序! 这是一个小程序! 这是一个小程序!
💻 DT
📖 第 1 页 / 共 2 页
字号:
;*******************************************************************************
; FILENAME	:NAIL.DT FOR EM78P153E
; AUTHOR	: ELEN
; PURPOSE	: CONTROL FOR MOTOR
;				
; REVISION	: 11/15/2006 V1.0
;*******************************************************************************
;*  (c) Copyright 2005, ELEN TEC CO., LTD.
;*******************************************************************************
;*******************************************************************************
													;SYSTEM  REG  DEFINE
;*******************************************************************************		sk_07A
r0			equ			0x00    ;说明间接地址寄存器地址 
r1			equ			0x01    ;说明定时寄存器地址 
r2			equ			0x02    ;说明程序计数器地址 
r3			equ			0x03    ;说明状态寄存器地址 
r4			equ			0x04    ;说明数据存储器选择寄存器地址 
r5			equ			0x05    ;说明P5寄存器地址 
r6			equ			0x06    ;说明P6寄存器地址 
rf			equ			0x0f    ;说明中断状态寄存器地址 

ioc5		equ			0x05      ;用符号代表地址 
ioc6  	  equ			0x06      ;用符号代表地址 
iocb		equ			0x0b      ;用符号代表地址 
iocc		equ			0x0c      ;用符号代表地址 
iocd		equ			0x0d      ;用符号代表地址 
ioce		equ			0x0e      ;用符号代表地址 
iocf		equ			0x0f      ;用符号代表地址 
;***********************************************************************************
;USER 	RAM
;***********************************************************************************
key_flag			equ		0x2f
;bit0 is  key release flag              开关键是否按住标志位 
;bit1 is  key ok flag                   开关键是否松开标志位 

;bit2 is  key1 release flag             菜单键是否按住标志位 
;bit3 is  key1 ok flag                  菜单键是否松开标志位 

;bit4 is
;bit5 is 
;bit6 is 
;bit7 is 


timer				equ		0x2e   ;
;bit0 is time 1s flag                  定时一秒标志位 
;bit1 is
;bit2 is
;bit3 is 
;bit4 is 
;bit5 is
;bit6 is
;bit7 is


mode_flag0	   equ		0x2d       ;
;bit0 is on/off mode flag              启动停止标志位 
;bit1 is duty on/off flag              轮流使用标志位 
;bit2 is
;bit3 is
;bit4 is 
;bit5 is
;bit6 is 
;bit7 is

del		  equ		0x2c           ;延时寄存器 

main_mode	equ		0x2b           ;档位控制寄存器 

acc_buf	  equ	    0x10		   ;累加器内容保护寄存器 
psw_buf	  equ		0x11           ;状态保护寄存器 

key_cnt0	 equ	    0x12           ;开关键的抖动控制寄存器
key_cnt1	 equ	    0x13           ;菜单键的抖动控制寄存器

duty_cnt	 equ		0x1a           ;时间控制寄存器 

time_1s_cnt  equ	    0x1d           ;一秒控制寄存器 
;标志位就是用来联系两个事物的纽带 
;*******************************************************************************
;			code 
;*******************************************************************************
			org		0000h           ;程序代码储存开始位置 
			jmp	   reset
			org		0008h           ;中断入口地址 
			jmp	   int_sever
			org		0010h
;*******************************************************************************
;			reset	program
;*******************************************************************************
reset:
			wdtc							 ;clr watch dog
			clr	 iocf					 ;disable interrupt
			mov	 a,@10h                   ;初始通用寄存器10H-2FH地址空间 
			mov	 r4,a
clr_ram:
			wdtc
			clr	 r0						;clr ram
			inc	 r4
			mov     a,r4
			sub	 a,@0xef
			jbs	 r3,2					;check zero flag
			jmp	 clr_ram
			clr	 r0                       ;

init_system:
			mov	a,@0x00				  ;tc0 init		500us int
			mov	r1,a                     ;给定时器赋初值			
			mov	a,@0x00
			mov	r5,a                     ;给P5口寄存器赋初值 
			mov	a,@0xff
			mov	r6,a                     ;给P6口寄存器赋初值 
								
			mov	a,@0x47			 	  ;time 1:256 设置总中断标志和选择分频 
			contw							;control register
			mov	a,@00h
			iow	 ioc5					;p5  as output mode 设置P5口为0即为输出 
			
			mov	a,@10000001B			  
			iow	 ioc6					;p6.7  p6.0 as input mode 设置P6.0 P6.7为1即为输入 
			
			mov	a,@11111111B             ;设置内部下拉禁止 
			iow	 iocb					;disable all  pull down function 
			
			mov	a,@00000000B             ;设置漏极开路输出禁止 
			iow	 iocc					;disable  open_drain function
			
			mov	a,@00000000B             ;设置内部上拉使能 
			iow	 iocd					;enable pull up function
			
			mov	a,@00000000B             ;设置看门狗禁止,设置P6.0为I/O状态 
			iow	 ioce					;disable watchdog
			
			mov	a,@00000001B             ;设置定时器中断使能 
			iow	 iocf					;enable tc0 and int  interrupt
						
			clr	  rf                     ;中断屏蔽寄存器初始化 
			eni                             ;启动定时器工作	
			
			wdtc
			mov	a,@15                    ;设置中断次数,实现一秒定时 
			mov	time_1s_cnt,a            ;
			bs	 mode_flag0,0             ;开关键状态判断位 0:按下 1:未按			
			
			
			
;************************************************************************************
;			main	program
;************************************************************************************			
main:
			
			call	key_scan              ;调用按键状态子程序 
			call	key_control           ;调用按键控制子程序 
			call	heat_control          ;调用档位控制子程序 
			
			jmp	 main
						
;*****************************************************************************************         
;*****************************************************************************************
int_sever:                               ;中断服务子程序:定时服务 
			mov	acc_buf,a			 ;65ms int
			mov	a,r3				  ;save psw reg
			mov	psw_buf,a             ;保护断点地址 压栈 
			
			jbs	rf,0				;check tc0 int flag
			jmp	exit_int
time_int:
			bc	 rf,0				;clr tc0 int flag 中断后清中断标志 
			
			djz	time_1s_cnt         ;判断15次是否结束即一秒是否完成      
			jmp	exit_int
			
			bs	 timer,0
			mov	a,@15
			mov	time_1s_cnt,a
				
exit_int:                              ;取出断点地址 出栈 
		    mov	a,psw_buf
		    mov	r3,a
		    mov	a,acc_buf			
		    reti				
;*********************************************************************************************		
key_scan:				
			wdtc
			jbc	  r6,0				  ;check power key 检查开关键是否按下 
			jmp	  key_000               ;按下开关键则r6,0为低电平,即输出0
			jbc	  key_flag,0			;check key release flag 判断开关按住位是否按住 
			ret
			call	 key_delay             ;调用延时子程序 
			jz	   key_cnt0              ;判断是否抖动造成 用256次来判断 大约 
			jmp	  key_meo		       ;
			bs	   key_flag,0			;set key release flag 实际按下则将开关标志位置1 
			bs	   key_flag,1			;set key ok flag      实际按下则将开关标志位置1
			ret                            ;开关键判断后将开关键标志位置1
key_000:
			bc	  key_flag,0			  ;reset key release flag
			bc	  key_flag,1			  ;reset key1 ok flag
			clr	 key_cnt0
key_meo:
			jbc	  r6,7
			jmp	  key_001
			jbc	  key_flag,2			;meo key release flag
			ret
			call	 key_delay
			jz	   key_cnt1              ;确认按下溢出为0,跳转到下一条指令 
			ret
			bs	   key_flag,2			;meo key release flag 菜单键按下后给标志位置1
			bs	   key_flag,3			;meo key ok flag 菜单键按下后给标志位置1
			ret
key_001:
			bc	  key_flag,2			 ;meo key release flag
			bc	  key_flag,3			 ;meo key1 ok flag
			clr	 key_cnt1
			ret						
;*************************************************************************************
key_control:
			wdtc
			jbc	   key_flag,1				;check key ok flag 开关键按下得OK位为1
			jmp  	 power_key_control
			jbc	   key_flag,3                ;菜单键按下得OK位为1 (两个按键进行两次判断)         
			jmp	   meo_key_control           ;每个按键置两个标志位,一个为排除抖动用,一个按下 
			ret
power_key_control:
			bc	 	key_flag,1			   ;clr key ok flag 标志位完成任务后需清0
			
		    mov	   a,@0x01                   ;偶次按下时标志位为1进行复位 
		    xor	   mode_flag0,a			  ;on/off mode flag 得出标志位的状态作为下面的判断依据 
		                                        ;同则0,异1,在这标志位为0,因为前面已经设置操作 
		    mov	   a,@0x00
		    mov	   main_mode,a               ;作为开关键第一次按下后进入第0档的设置		    

⌨️ 快捷键说明

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