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

📄 2040a.dt

📁 这是一款烘手机应用程序
💻 DT
字号:
;客  户:奥利奇
;适用机型:2050
;软体版本:01
;开发日期:2008-10-23 15:04
;版  权:与利达电子有限公司所有
;技术核心:       
;----------------------------------------------------------
R0			==	0X0
R1			==	0X1
PC			==	0x2
R3			==	0X3
R4			==	0X4
P5 			==	0x5
P6			==	0x6
p7			==	0x7
iocb			==	0xb
ioce			==	0XE
iocf			==	0xf
;----------------------------------------------------------

time_count		==	0x2e
time_count1		==	0x2f
error_count		==	0x30
time_check		==	0x31
key_flag		==	0x32
;----------------------------------------------------------
;key_flag,0=发射的标志(0为发射,1为停止)
;key_flag,1=第一次检测有反射的标志
;key_flag,2=两次检测间隔200ms到了的标志
;key_flag,3=马达输出的标志
;key_flag,4=一直有反射的标志
;key_flag,5=
;key_flag,6=
;key_flag,7=
;----------------------------------------------------------
fashe_count		==	0x33
time_motor		==	0x34
time_motor1		==	0x35
time_fashe		==	0x36		;发射的间隔时间
count_low		==	0x37		;低速检测计数,用于防抖
count_mid		==	0x38
count_high		==	0x39
disp_flag		==	0x3a
;----------------------------------------------------------
;disp_flag,0=低速按键状态标志
;disp_flag,1=中速按键状态标志
;disp_flag,2=高速按键状态标志
;disp_flag,3=数码管位选标志
;disp_flag,4=低速档的标志
;disp_flag,5=中速档的标志
;disp_flag,6=高速档的标志
;----------------------------------------------------------
data_disp1		==	0x3b
data_disp2		==	0x3c
a_buf			==	0x3d
r3_buf			==	0x3e
r3f			==	0x3f
;----------------------------------------------------------
			ORG	0x0fff
RESET:			JMP	Main
			
			ORG	0x000
			JMP	Main
			
			ORG	0X01
int_153:		
			mov	a_buf,a
			swap	a_buf
			swapa	r3
			mov	r3_buf,a
			bc	r3f,0
			MOV	A,	@0x6
			add	a,r1		;置计数器初值
			;----------------------------------
			;感应计时
			;----------------------------------
			jbs	key_flag,3
			jmp	int_2
			djz	time_count
			jmp	int_2
			mov	a,@0xfa
			mov	time_count,a
			
			djz	time_count1
			jmp	int_2
			mov	a,@0x78
			mov	time_count1,a
			bs	key_flag,4		;置马达工作时间达到60秒的标志
			bc	p6,0
			bc	p6,1
			bc	p6,2	
int_2:						
			;----------------------------------
			;延时关闭马达
			;----------------------------------
			jbs	key_flag,3
			jmp	int_3
			djz	time_motor
			jmp	int_3
			mov	a,@0x19
			mov	time_motor,a
			djz	time_motor1
			jmp	int_3
			bc	key_flag,3
			bc	key_flag,4		;清马达工作达到60秒的标志
			bc	p6,0
			bc	p6,1
			bc	p6,2	
						
			mov	a,@0xfa
			mov	time_count,a
			mov	a,@0x78
			mov	time_count1,a		;马达最长工作时间赋值	
int_3:				
			;----------------------------------
			;显示
			;----------------------------------
			jbc	disp_flag,3			;是否要显示第一位?
			jmp	int_4				;跳第二位显示
			bs	disp_flag,3
			bs	p6,3
			bc	p6,4
			mov	a,data_disp1
			mov	p7,a	
			jmp	int_6		
int_4:
			bc	disp_flag,3
			bc	p6,3
			bs	p6,4
			mov	a,data_disp2
			mov	p7,a						
int_6:	
			;----------------------------------
			;两次检测之间计时
			;----------------------------------
			jbs	key_flag,1
			jmp	int_7
			djz	time_check
			jmp	int_7
			bc	key_flag,1		;清第一次检测到的标志
			bs	key_flag,2		;置到了第二次检测时间的标志
			
int_7:			
			;----------------------------------
			;间隔发射计时
			;----------------------------------	
			djz	time_fashe
			jmp	int_8
			mov	a,@0x64
			mov	time_fashe,a
			bc	key_flag,0		;允许发射
int_8:
			;----------------------------------
			;解码开始
			;----------------------------------
			jbc	key_flag,2		;是否到了第二次检测的时间
			jmp	int_10
			jbc	key_flag,1		;是否检测到第一次
			jmp	int_9
			jbc	p5,3			;是否有感应(第一次检测)
			jmp	int_12			;无感应跳
			bs	key_flag,1		;置检测到第一次的标志
			mov	a,@0x64
			mov	time_check,a
			mov	a,@0xa
			mov	error_count,a
int_9:
			;----------------------------------
			;两次之间检测
			;----------------------------------
			jbc	p5,3			;是否有错误信号
			jmp	int_12
			djz	error_count		;错误信号计数
			jmp	int_12
			bc	key_flag,1		;出现10次错误信号,清第一次感应到的标志
			
			jmp	int_12
int_10:
			;----------------------------------
			;第二次检测
			;----------------------------------
			jbc	p5,3
			jmp	int_11		
			bs	key_flag,3		;置马达工作的标志
			mov	a,@0x19
			mov	time_motor,a
			mov	a,@0x10
			mov	time_motor1,a
			jbc	key_flag,4		;马达是否工作达到60秒
			jmp	int_11	
			bs	p6,0
			jbc	disp_flag,4		;是否在低速状态?
			jmp	int_11
			jbc	disp_flag,5
			jmp	int_high
			bs	p6,1
			jmp	int_11
int_high:
			bs	p6,2			
int_11:
			;----------------------------------
			;第二次没有检测到处理
			;----------------------------------
			bc	key_flag,2		;清到第二次检测时间的标志						
int_12:
			;----------------------------------
			;无感应处理
			;----------------------------------																																	
int_over:		
			nop
			swapa r3_buf
			mov		r3,a
			swapa a_buf
			reti
			
		;	jmp	int_153
;----------------------------------------------------------
;			RAM CLR
;----------------------------------------------------------
RAM_CLR:		MOV	A,@0X10
			MOV	r4,A
CLR_LOOP:		mov	a,@0x0
			mov	r0,a
			INC	r4
			MOV 	A,r4
			and	a,@0x3f
			xor	a,@0x3f	;判断是否到了3eh
			JBS	r3,2
			JMP	CLR_LOOP
			RET			
;==========================================================
;			Main Program
;==========================================================
Main:			disi
			clr	p5
			clr	p6
			clr	p7
			mov	a,@0xf			;p5输入
			iow	p5
			
			mov	a,@0x0			;p6输出
			iow	p6
			mov	a,@0x0
			iow	p7
			;----------------------------------
			;以上为i/o设置
			;----------------------------------
			call	ram_clr			;清ram	
			mov	a,@0xff
			iow	iocb		
			
			MOV	A,@0x31			;开watchdog
			iow	ioce
					
			MOV	A, @0X01		;允许中断	
			IOW	iocf
					
			MOV	A,@0X6			;置计数器初值
			MOV	R1,A	
			
			MOV	A,@0Xc2			;8分频给TCC,禁止唤醒
			CONTW	
			eni
			
			mov	a,@0x24
			mov	data_disp1,a
			mov	a,@0x49
			mov	data_disp2,a		;开机默认显示值
			
			bs	disp_flag,4		;开机默认低档
			
			mov	a,@0x64
			mov	time_fashe,a		;发射间隔时间赋值
			
			;----------------------------------	
			mov	a,@0x64	
			mov	time_check,a		;两次检测间隔时间
			
			mov	a,@0xa
			mov	error_count,a		;两次检测间隔之间再检测到10次表次解码错误
			
			mov	a,@0xfa
			mov	time_count,a
			mov	a,@0x78
			mov	time_count1,a		;马达最长工作时间赋值

;----------------------------------------------------------
;			主程序
;----------------------------------------------------------
loop:			
			call	key_low
			call	key_mid
			call	key_high
			call	fashe
			wdtc
			jmp	loop
;----------------------------------------------------------
;			发射
;----------------------------------------------------------
fashe:
			jbc	key_flag,0
			ret
			bs	key_flag,0
			mov	a,@0x9a
			mov	fashe_count,a
fashe_loop:		
			bs	p6,6
			nop			;1
			nop			;2
			nop			;3
			nop			;4
			nop			;5
			nop			;6
			nop			;7
			nop			;8
			nop			;9
			nop			;10
			nop			;11
			nop			;12
			bc	p6,6
			nop			;1
			nop			;2
			nop			;3
			nop			;4
			nop			;5
			nop			;6
			nop			;7
			nop			;8
			nop			;9
			djz	fashe_count		
			jmp	fashe_loop
			ret
;----------------------------------------------------------
;按键检测1
;----------------------------------------------------------
key_low:
			jbc	disp_flag,0		;按键检测之前是否松开过?
			jmp	low_end
			jbc	p5,0			;是否闭合?
			jmp	low_over
			inc	count_low
			jbs	count_low,4
			ret
			bs	disp_flag,0
			clr	count_low
			mov	a,@0x24
			mov	data_disp1,a
			mov	a,@0x49
			mov	data_disp2,a
			
			bc	p6,1			;关闭中速发热丝
			bc	p6,2			;关闭高速发热比
			bs	disp_flag,4		;置低速运行的标志
			ret
low_over:
			clr	count_low
			ret
low_end:
			jbc	p5,0
			bc	disp_flag,0
			ret						
;----------------------------------------------------------
;按键检测2
;----------------------------------------------------------
key_mid:
			jbc	disp_flag,1		;按键检测之前是否松开过?
			jmp	mid_end
			jbc	p5,1			;是否闭合?
			jmp	mid_over
			inc	count_mid
			jbs	count_mid,4
			ret
			bs	disp_flag,1
			clr	count_mid
			mov	a,@0x41
			mov	data_disp1,a
			mov	a,@0x2
			mov	data_disp2,a
			
			bc	p6,2			;关闭高速发热丝
			bc	disp_flag,4
			bc	disp_flag,5		;置为中速工作状态
			ret
mid_over:
			clr	count_mid
			ret
mid_end:
			jbc	p5,1
			bc	disp_flag,1
			ret	
;----------------------------------------------------------
;按键检测3
;----------------------------------------------------------
key_high:
			jbc	disp_flag,2		;按键检测之前是否松开过?
			jmp	high_end
			jbc	p5,2			;是否闭合?
			jmp	high_over
			inc	count_high
			jbs	count_high,4
			ret
			bs	disp_flag,2
			clr	count_high
			mov	a,@0x1
			mov	data_disp1,a
			mov	a,@0x49
			mov	data_disp2,a
			
			bc	p6,1			;关闭中速发热丝
			bc	disp_flag,4
			bs	disp_flag,5		;置为高速工作状态
			ret
high_over:
			clr	count_high
			ret
high_end:
			jbc	p5,2
			bc	disp_flag,2
			ret																																																							
;----------------------------------------------------------
;			中断2ms						
;----------------------------------------------------------									
/*
int_153:		
			mov	a_buf,a
			swap	a_buf
			swapa	r3
			mov	r3_buf,a
			bc	r3f,0
			MOV	A,	@0x6
			add	a,r1		;置计数器初值
			;----------------------------------
			;感应计时
			;----------------------------------
			jbs	key_flag,3
			jmp	int_2
			djz	time_count
			jmp	int_2
			mov	a,@0xfa
			mov	time_count,a
			
			djz	time_count1
			jmp	int_2
			mov	a,@0x78
			mov	time_count1,a
			bs	key_flag,4		;置马达工作时间达到60秒的标志
			bc	p6,0
			bc	p6,1
			bc	p6,2	
int_2:						
			;----------------------------------
			;延时关闭马达
			;----------------------------------
			jbs	key_flag,3
			jmp	int_3
			djz	time_motor
			jmp	int_3
			mov	a,@0x19
			mov	time_motor,a
			djz	time_motor1
			jmp	int_3
			bc	key_flag,3
			bc	key_flag,4		;清马达工作达到60秒的标志
			bc	p6,0
			bc	p6,1
			bc	p6,2	
						
			mov	a,@0xfa
			mov	time_count,a
			mov	a,@0x78
			mov	time_count1,a		;马达最长工作时间赋值	
int_3:				
			;----------------------------------
			;显示
			;----------------------------------
			jbc	disp_flag,3			;是否要显示第一位?
			jmp	int_4				;跳第二位显示
			bs	disp_flag,3
			bs	p6,3
			bc	p6,4
			mov	a,data_disp1
			mov	p7,a	
			jmp	int_6		
int_4:
			bc	disp_flag,3
			bc	p6,3
			bs	p6,4
			mov	a,data_disp2
			mov	p7,a						
int_6:	
			;----------------------------------
			;两次检测之间计时
			;----------------------------------
			jbs	key_flag,1
			jmp	int_7
			djz	time_check
			jmp	int_7
			bc	key_flag,1		;清第一次检测到的标志
			bs	key_flag,2		;置到了第二次检测时间的标志
			
int_7:			
			;----------------------------------
			;间隔发射计时
			;----------------------------------	
			djz	time_fashe
			jmp	int_8
			mov	a,@0x64
			mov	time_fashe,a
			bc	key_flag,0		;允许发射
int_8:
			;----------------------------------
			;解码开始
			;----------------------------------
			jbc	key_flag,2		;是否到了第二次检测的时间
			jmp	int_10
			jbc	key_flag,1		;是否检测到第一次
			jmp	int_9
			jbc	p5,3			;是否有感应(第一次检测)
			jmp	int_12			;无感应跳
			bs	key_flag,1		;置检测到第一次的标志
			mov	a,@0x64
			mov	time_check,a
			mov	a,@0xa
			mov	error_count,a
int_9:
			;----------------------------------
			;两次之间检测
			;----------------------------------
			jbc	p5,3			;是否有错误信号
			jmp	int_12
			djz	error_count		;错误信号计数
			jmp	int_12
			bc	key_flag,1		;出现10次错误信号,清第一次感应到的标志
			
			jmp	int_12
int_10:
			;----------------------------------
			;第二次检测
			;----------------------------------
			jbc	p5,3
			jmp	int_11		
			bs	key_flag,3		;置马达工作的标志
			mov	a,@0x19
			mov	time_motor,a
			mov	a,@0x10
			mov	time_motor1,a
			jbc	key_flag,4		;马达是否工作达到60秒
			jmp	int_11	
			bs	p6,0
			jbc	disp_flag,4		;是否在低速状态?
			jmp	int_11
			jbc	disp_flag,5
			jmp	int_high
			bs	p6,1
			jmp	int_11
int_high:
			bs	p6,2			
int_11:
			;----------------------------------
			;第二次没有检测到处理
			;----------------------------------
			bc	key_flag,2		;清到第二次检测时间的标志						
int_12:
			;----------------------------------
			;无感应处理
			;----------------------------------																																	
int_over:		
			nop
			swapa r3_buf
			mov		r3,a
			swapa a_buf
			reti	*/
			end
			

⌨️ 快捷键说明

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