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

📄 display2.dt.bak

📁 一个多士炉的汇编源码
💻 BAK
📖 第 1 页 / 共 5 页
字号:
;=======================================
;create by daiwenchao on 2004/12/1
;程序空间占用1.7K
;初步调试通过,除NTC外,其余功能均实现
;版本号 LD3902-1.0
;关键处均有详细中文注释
;=======================================
;To define the general (Status) registers
R0 		 EQU		 0 		          
R1		  EQU		 1
TCC		 EQU		 1		           
R2		  EQU		 2
PC		  EQU		 2		          
R3		  EQU		 3
STATUS      EQU 		3 		         
R4		  EQU		 4
PSR	     EQU		 4		           
R5		  EQU		 5
PORT5	   EQU 	    5
R6		  EQU		 6
PORT6       EQU 		6
R7          EQU		 7	    	
PORT7       EQU		 7		        
R8		  EQU		 8	               
R9		  EQU		 9		            
RA		  EQU		 0XA		       
RB 	     EQU 		0XB  	  
R3F		 EQU		 0X3F		      

IOC50 	  EQU		 0X5 	
IOC60 	  EQU 		0X6 	
IOC70	   EQU 		0X7 		
IOCB0	   EQU		 0XB		  
IOCE0	   EQU		 0XE		  
IOCF0	   EQU		 0XF		  

KEYTEST     EQU         0X0D;键值存放缓冲区
KEYRESULT   EQU         0X0E;键值结果存放处
				     	   ; .0 cancel   SW1 P60.0
				     	   ; .1 defrost  SW3 P60.1
				     	   ; .2 reheat   SW4 P60.2
				            ; .3 darker   SW5 P60.3
				     	   ; .4 ligher   SW6 P60.4
				     	   ; .5 start    SW2 P60.7
KEYSCAN_TIME  EQU       0X0F;键盘扫描时间缓冲区

_100US	  EQU		 0X10;2.5MS计时缓冲区
DISP_BUF    EQU         0X11;段时序缓冲区
DISP_REAL   EQU         0X12;段时序实际存放处

DISPBUF0	EQU         0X14;显示缓冲区1
DISPBUF1    EQU         0X15;显示缓冲区2
DISPBUF2    EQU         0X16;显示缓冲区3

MODEBUF	 EQU         0X17;模式缓冲区
				      	  ;.0解冻模式
				            ;.1重新加热模式
				            ;.2正常模式

RUNALLOW    EQU         0X18;按START键开始运行标志
				     	   ;.0运行加热状态
				     	   ;.1马达上升
				     	   ;.2马达下降

DARKE_GRADE EQU         0X19;颜色档位缓冲区

TESTERROR_FLAG EQU      0X1A;各种检测警告方式标志
							;.0;刚上电标志
							;.1;未进入烘烤状态按CANCEL键标志	
							;.2;面包烤完或烘烤中按CANCEL键标志
							;.3;烘烤时按CANCEL键标志
							;.4;按下START键,20S内未检测下限计时标志
							;.5;按下START键,8S内检测到下限计时标志
							;.6;同时检测出上限开关有效标志
							;.7;睡眠计时标志

RUN2_5MS       EQU      0X1B;运行时的计时
RUN_500MS      EQU      0X1C;运行100MS计时
RUN_2S         EQU      0X1D;运行2秒计时

TEST_UPTIME    EQU      0X1E;刚开始上电28S内检测上限行程开关计时
TEST_UPTIME1   EQU      0X1F;未进入烧烤状态按CANCEL键28S内检测上限行程开关计时
TEST_UPTIME2   EQU      0X2B;面包烤完或烧烤过程中按CANCEL键8S内检测到上限行程开关计时
TEST_UPTIME3   EQU      0X21;正常烧烤状态下按CANCEL键20S内为发现上限性车形成开关计时
TEST_DOWNTIME  EQU      0X22;按下START键20S内未检测到下限行程开关计时
TEST_DOWNTIME1 EQU      0X23;按下START键8S内发现下限行程开关计时
TEST_SLEEPTIME EQU      0X24;未运行状态下,2分中进入睡眠模式计时

T1S_FLAG       EQU      0X25;液晶闪烁效果处理
TESTSELF_TIME  EQU      0X26;自检时间
RUN_STARTFLAG  EQU      0X27;开机计时标志
ERROR_MODE     EQU      0X28;出错模式标志
VOICE_FLAG     EQU      0X29;蜂鸣器运行标志
VOICE_TIME     EQU      0X2A;蜂鸣器频率时间
MOTOR_MOVE     EQU      0X31;马达上升下降标志
				     	   ;.0马达上升
				     	   ;.1马达下降
SLEEP_MODE     EQU      0X2D;睡眠模式
KEY_SKIPFLAG   EQU      0X2E;键弹起标志,
				     	   ;==0键未弹起
				      	  ;==1键弹起
KEYRESULT_BUF  EQU      0X2F;历史键值存放缓冲区,为判断键是否被弹起和前端的消抖用。
KEYFIRST_FLAG  EQU      0X30;处理前端消抖时,判断键是否曾经被按下的标志

ADDORSUBCHANGE_FLAG	 EQU     0X32;运行时候按加减键标志(运行时候按+-键则时间处理部分有所不同)
DISPBITTIME_FLAG		EQU     0X36
VOICE_BEEP			  EQU     0X37;蜂鸣器驱动
VOICE_ERROR		     EQU     0X38;出错模式4声响标志
RUN25MS			     EQU     0X39
;=============================
;+++++++程序在这里开始了++++++
;=============================
		ORG	0X0FFF 		
		JMP	RESET 
		ORG	0X000 	
		NOP
;=============================
;+++++++中断服务程序入口++++++
;=============================		
IN_INT:                      
		DISI		             
		MOV	R8,A	    
		SWAP   R8
		MOV	A,STATUS
		MOV	R9,A	     
		SWAP   R9		
		MOV	A,R4		
		MOV	RA,A
		SWAP   RA
		BC	 R3,5
		BC	 R3,6

INT_TIME:
		JBC	R3F,0   
		JMP	TBT
		BC	 R3F,0
		JMP	INT_END
;==============================
;++++++至此入口定时器溢出++++++
;++++++溢出时间为100US+++++++++
;++++++在此入口处理蜂鸣器频率++
;==============================
TBT:
		INC	_100US
		JBC    VOICE_FLAG,0
		JMP    VOICE1

		JBC    VOICE_FLAG,1
		JMP    VOICE3

		JBC    VOICE_FLAG,2
		JMP    VOICE1
		JMP    VOICE_END

VOICE3: 
		JBC    VOICE_ERROR,0
        JMP    VOICE1
		JMP    VOICE_END		      

VOICE1:
		COM    VOICE_BEEP
		JBS    VOICE_BEEP,0
		
		JMP    VOICE2
        MOV    A,@0B00100000
        OR     PORT5,A
        JMP    VOICE_END

VOICE2:
		MOV    A,@0B11011111
		AND    PORT5,A

VOICE_END:
		MOV	A,@20
		SUB	A,_100US
		
		JBC	STATUS,0
		JMP	IS_FULL
		JMP	TBT_END
;==============================
;+++++转到此入口则2.ms时间到
;+++++处理键扫描
;+++++液晶段码时序标志
;+++++闪烁效果的取反
;+++++蜂鸣器计时
;==============================
IS_FULL: 
		CLR	_100US        
		BS     DISPBITTIME_FLAG,0;液晶显示时序标志
		INC    KEYSCAN_TIME      ;键盘扫描时间
;==============================
;==============================
		INC	RUN2_5MS		
		MOV	A,@10
		SUB    A,RUN2_5MS
		JBS    STATUS,0
		JMP    TBT_END
;==============================
;++++++++++25MS入口++++++++++++
;==============================
RUN25MS_ENTER:		
		CLR    RUN2_5MS

		JBC    VOICE_FLAG,0	  ;蜂鸣器处理
		JMP    INCVOICE_TIME
		
		JBC    VOICE_FLAG,1
		JMP    INCVOICE_TIME
		
		JBC    VOICE_FLAG,2
		JMP    INCVOICE_TIME
		JMP    END_VOICE

INCVOICE_TIME:
		INC    VOICE_TIME

END_VOICE:
		INC    RUN25MS
		MOV	A,@20
		SUB    A,RUN25MS
		JBS    STATUS,0

		JMP    TBT_END
;=============================
;++++++++++500MS入口++++++++++		
;++此入口处理马达上升下降图标
;++液晶闪烁效果的处理+++++++++
;=============================		
		CLR    RUN25MS
		COM    T1S_FLAG		  ;液晶闪烁效果标志每0.5秒一次  

        BC     STATUS,0
        RLC    MOTOR_MOVE
        
        JBS    MOTOR_MOVE,4
        JMP    RUN_500MSINC
        CLR    MOTOR_MOVE
        BS     MOTOR_MOVE,0

RUN_500MSINC:
		INC    RUN_500MS
		MOV    A,@4
		SUB    A,RUN_500MS
		JBS    STATUS,0
		JMP    TBT_END
		CLR    RUN_500MS
;=============================
;++++开机自检时间的计时+++++++
;+此入口以下则时间单位为2秒+++
;=============================
		INC    TESTSELF_TIME
;=============================
;+++++处理运行时间入口++++++++
;=============================
JUDGERUN_TIME:	        	
		JBC    RUNALLOW,0			
		JMP    RUNINC_2S
		JMP    RUNCLR_2S

RUNINC_2S:                     
		INC    RUN_2S	
		CLR    TEST_SLEEPTIME
		JMP    ERRTEST_ENTRANCE

RUNCLR_2S:				     
		CLR    RUN_2S
		INC    TEST_SLEEPTIME  
;=============================
;++此入口为各种错误检验计时+++
;=============================       
ERRTEST_ENTRANCE:
		JBS    TESTERROR_FLAG,0
		JMP    TEST_UPLIMIT
		INC    TEST_UPTIME

TEST_UPLIMIT:		
		JBS    TESTERROR_FLAG,1
		JMP    TEST_UPLIMIT1
		INC    TEST_UPTIME1

TEST_UPLIMIT1:
		JBS    TESTERROR_FLAG,2
		JMP    TEST_UPLIMIT2
		INC    TEST_UPTIME2

TEST_UPLIMIT2:
		JBS    TESTERROR_FLAG,3
		JMP    TEST_DOWNLIMIT
		INC    TEST_UPTIME3

TEST_DOWNLIMIT:		
		JBS    TESTERROR_FLAG,4
		JMP    TEST_DOWNLIMIT1
		INC    TEST_DOWNTIME

TEST_DOWNLIMIT1:
		JBS    TESTERROR_FLAG,5
		JMP    TBT_END
		INC    TEST_DOWNTIME1
		
TBT_END:						
		BC     R3F,0	   	
		MOV    A,@206
		MOV    TCC,A	 	

INT_END:						
		SWAPA  RA			  
		MOV	R4,A

		SWAPA  R9
		MOV	STATUS,A		
		SWAPA  R8
		RETI     
;==========================
;+++++++++中断结束+++++++++
;==========================

;==========================
;++上电复位后,转至此入口++
;==========================
		ORG    0X0080
RESET:					
		JMP	START
		ADD	A,@0XFF
		ADD	A,@0XFF
		ADD	A,@0XFF
		ADD	A,@0XFF
		ADD	A,@0XFF
		ADD	A,@0XFF
		ADD	A,@0XFF
		ADD	A,@0XFF

START:
		DISI
		WDTC
		MOV	A,@0X08
		MOV	R4,A
   
CLR_RAM:
		CLR	R0
		INC	R4	
		MOV	A,R4
		SUB	A,@0x3f
		JBC	R3,0
		JMP	CLR_RAM

		MOV	A,@0X40+0X20
		MOV	R4,A
CLR_BANK1:
		CLR	R0
		INC	R4
		MOV	A,R4
		SUB	A,@0X40+0X3E
		JBC	R3,0
		JMP	CLR_BANK1
		MOV	A,@0X80+0X20
		MOV	R4,A
CLR_BANK2:
		CLR	R0
		INC	R4
		MOV	A,R4
		SUB	A,@0X80+0X3E
		JBC	R3,0
		JMP	CLR_BANK2
		MOV	A,@0XC0+0X20
		MOV	R4,A
CLR_BANK3:
		CLR	R0
		INC	R4
		MOV	A,R4
		SUB	A,@0XC0+0X3E
		JBC	R3,0
		JMP	CLR_BANK3
		CLR	R4

		MOV	A,@0B00000000;I/O口的设置
		IOW	IOC70
		CLR	PORT7
		MOV	A,@0B00000000
		IOW	IOC60
		CLR	PORT6
		MOV	A,@0B11000111;p56,57为上下限行程开关的检测
		IOW	IOC50        ;P55,54,43为蜂鸣器马达和加热口的控制设为输出
		CLR	PORT5
   
        CLR	_100US
		CLR    DISP_BUF
		CLR    DISP_REAL
		
		CLR    KEYTEST
		CLR    KEYRESULT
		CLR    KEYSCAN_TIME
		
		BS	 DISP_BUF,0
		BS	 DISP_REAL,0
        
		BS     T1S_FLAG,0
		
		CLR    DARKE_GRADE
		BS     DARKE_GRADE,0

		CLR    TESTSELF_TIME
		BC     RUN_STARTFLAG,0
		
		CLR    TESTERROR_FLAG
		BS     TESTERROR_FLAG,0;刚开始上电计时标志,出错模式检验
		
		CLR    MODEBUF
		BS     MODEBUF,2
		
		CLR    MOTOR_MOVE
		BS     MOTOR_MOVE,0
		
		CLR    RUNALLOW
		BS     RUNALLOW,1
		BC     SLEEP_MODE,0
		
		CLR    VOICE_BEEP
		BS     VOICE_BEEP,1
		
		BC     KEYFIRST_FLAG,0
		
		CLR    KEY_SKIPFLAG
        CLR	KEYRESULT_BUF
		
		CLR    VOICE_TIME 
		
		BS 	VOICE_FLAG,2
        
		MOV    A,@255
		MOV    DISPBUF0,A
		MOV    DISPBUF1,A
		MOV    DISPBUF2,A
		
		MOV    A,@0X00	   ;2频
		CONTW       
	
		MOV	A,@6		               
		MOV	TCC,A	
		MOV	A,@0B00000001
		IOW	IOCF0
		NOP
	    ENI

MAIN:
		CALL   KEY_SCAN     ;键盘扫描
		CALL   SET_MODE	 ;模式设定
		WDTC
		CALL   DISP_MODE    ;模式显示
		WDTC
		CALL   MOTOR_RUN    ;马达动作
		WDTC
        CALL   TEST_VOICE   ;蜂鸣器

		BS     STATUS,5
		BC     STATUS,6
		CALL   TEST_ERROR   ;出错检验		
  	  WDTC
		CALL   RUN_OPERATE  ;运行处理
        WDTC
   	 CALL   DISPLAY	  ;显示实体
		BC     STATUS,5
		BC     STATUS,6

		WDTC
		JMP    MAIN

;========================
;+++++++主程序结束+++++++
;========================

;========================
;+++++蜂鸣器控制程序+++++
;========================
TEST_VOICE:
		JBC	VOICE_FLAG,0
		JMP    NOR_VOICE
		
		JBC    VOICE_FLAG,1
		JMP    ERR_VOICE
		
		JBC    VOICE_FLAG,2
		JMP    LONG_VOICE
		JMP    TESTVOICE_END
		
NOR_VOICE:
        MOV    A,@5
        SUB    A,VOICE_TIME
        
        JBS    STATUS,0
		JMP    TESTVOICE_END
		
		CLR    VOICE_TIME
		BC     VOICE_FLAG,0
        JMP    TESTVOICE_END
        
ERR_VOICE:
		MOV    A,@17
		SUB    A,VOICE_TIME
		JBS    STATUS,0
		JMP    SET_VOICE
		
		MOV    A,@32
		SUB    A,VOICE_TIME
		JBS    STATUS,0
		JMP    CLR_VOICE
		
		MOV    A,@47
		SUB    A,VOICE_TIME
		JBS    STATUS,0
		JMP    SET_VOICE
		
		MOV    A,@62
		SUB    A,VOICE_TIME
		JBS    STATUS,0
		JMP    CLR_VOICE
				
		MOV    A,@77
		SUB    A,VOICE_TIME
		JBS    STATUS,0
		JMP    SET_VOICE
		
		MOV    A,@92
		SUB    A,VOICE_TIME
		JBS    STATUS,0
		JMP    CLR_VOICE

		MOV    A,@107
		SUB    A,VOICE_TIME
		JBS    STATUS,0
		JMP    SET_VOICE

		CLR	VOICE_TIME
		CLR    VOICE_FLAG
		CLR    VOICE_ERROR
		JMP    TESTVOICE_END

CLR_VOICE:
		BC     VOICE_ERROR,0
		JMP    TESTVOICE_END

SET_VOICE:
		BS     VOICE_ERROR,0
		JMP    TESTVOICE_END

LONG_VOICE:
        MOV    A,@15
        SUB    A,VOICE_TIME
        
        JBS    STATUS,0
		JMP    TESTVOICE_END
		
		CLR    VOICE_TIME
		BC     VOICE_FLAG,2
        JMP    TESTVOICE_END

TESTVOICE_END:
		RET

;====================
;+++键盘扫描子程序+++
;====================
KEY_SCAN:			  
		MOV    A,@10			;键扫描时间判断
		SUB    A,KEYSCAN_TIME
	    
		JBS    STATUS,2
		JMP    KEY_RETURN
		CLR	KEYSCAN_TIME
;================================
		NOP
		MOV	 A,@0B10011111
		IOW	 IOC60
		CALL    DELAY
	    NOP		
		MOV     A,PORT6
		MOV     KEYTEST,A

		JBS     KEY_SKIPFLAG,0
		JMP     KEY_SCANSW100  ;弹起则转查询,存储键值
		JMP     KEY_SCANSKIP   ;未弹起则转查询是否有键按下		
							   ;有则置位弹器标志,没有则复位弹起标志
KEY_SCANSW100:
		JBS     KEYFIRST_FLAG,0;两次比较标志
		JMP     KEY_SCANSW1
		
		BC      KEYFIRST_FLAG,0
		
		JBC     KEYTEST,0
		JMP     KEY_COMPARE1
		 
		JBS     KEYRESULT_BUF,0 
		JMP     KEY_COMRETURN
		
		BS      KEYRESULT,0
		BS      KEY_SKIPFLAG,0
		JMP     KEY_JUDSLEORNORM
		
KEY_COMPARE1:				
		JBC     KEYTEST,1
		JMP     KEY_COMPARE2
		 
		JBS     KEYRESULT_BUF,1
		JMP     KEY_COMRETURN
		
		BS      KEYRESULT,1
		BS      KEY_SKIPFLAG,0
		JMP     KEY_JUDSLEORNORM

KEY_COMPARE2:
		JBC     KEYTEST,2
		JMP     KEY_COMPARE3
		 
		JBS     KEYRESULT_BUF,2
		JMP     KEY_COMRETURN
		
		BS      KEYRESULT,2
		BS      KEY_SKIPFLAG,0
		JMP     KEY_JUDSLEORNORM

KEY_COMPARE3:		
		JBC     KEYTEST,3
		JMP     KEY_COMPARE4
		 
		JBS     KEYRESULT_BUF,3
		JMP     KEY_COMRETURN
		
		BS      KEYRESULT,3
		BS      KEY_SKIPFLAG,0
		JMP     KEY_JUDSLEORNORM

⌨️ 快捷键说明

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