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

📄 main_ext.asm

📁 中文电子词典 详细 中文电子词典
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
;	外部主程式---Main_ext.asm
;	Written by:	钟守林
;       MCU  :          SNL310(Sonix)
;       RC. OSC.:       16MHZ
;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

SNL310_002                      EQU     1            ;System Code Version, by Braind@18/05/07
GUI_EXTCTRLEN                   EQU     0            ;LCD 1/8BIT Interface MODEL: 0-->1BIT, 1-->8BIT
EXT_DATA_CS2                    EQU     0            ;EXTERNED DATA On CS2
;======================================================
CS_0                            EQU     0X08
CS_1                            EQU     0X40
CS_2                            EQU     0X80
CS_3                            EQU     0Xc0

LCD_CS                          EQU     CS_3
FLASH_CS                        EQU     0X20	;CS_2	;
RAM_CS                          EQU     CS_1
;======================================================
@UserRambk                      equ     0x08		;用户BANK
@SysRambk                       equ     0x0a		;系统BANK
@Data_Mode_16bit		EQU	0xFFFF		;16 Bit 模式
@Data_Mode_8bit			EQU	0xBFFF		; 8 Bit 模式
@Auto_Off_Timer_Min		EQU	0x1D4c		;最小关机时间1分钟
@Auto_Off_Timer_Mid		EQU	0x57E4		;正常关机时间3分钟
@Auto_Off_Timer_Max		EQU	0x927C		;最大关机时间5分钟
/////PLAY_TAIL DELAY TIME INIT VALUE
DELAY_INIT	EQU	600+400
;======================================================
T1IEN_SET                       EQU     1
T2IEN_SET                       EQU     0
RTCIEN_SET                      EQU     1
P30IEN_SET                      EQU     1
P31IEN_SET                      EQU     1
P32IEN_SET                      EQU     0
;======================================================
TIMER1_EN                       EQU     1               ;enable timer1
TIMER2_EN                       EQU     1               ;disable timer2

TIMER1_RL                       EQU     1               ;enable timer1 auto reload
TIMER2_RL                       EQU     1               ;disable timer2 auto reload

TIMER1_PS                       EQU     TIMER_DIV256    ;Timer1 pre-scalar is (ins. cycle)/256
TIMER2_PS                       EQU     TIMER_DIV8

TIMER1_CNT                      EQU     255   ;8BIT can be 1~255,SET TO 8mS timeout
TIMER2_CNT                      EQU     250   ;8BIT,SET TO 250us Timeout
;======================================================
P2PH_INIT                       EQU     1111111111111111B;P2 PULL_HIGH resister 0:disable  1:enable
P2M_INIT                        EQU     1111111100000000B;P2 DIRECTION 0:Input  1:Output
P2_INIT                         EQU     0000000011111111B;P2 initial status

P3EN_INIT			EQU     0000000000110100B;P3.4/.5/.2 AS NORMAL IO PORT
P3PH_INIT                       EQU     1111111111111111B;P3 PULL_HIGH resister 0:disable  1:enable
P3M_INIT                        EQU     1111111111011111B;P3 DIRECTION 0:Input  1:Output
P3_INIT                         EQU     0000000000100000B;P3 initial status

P4PH_INIT                       EQU     1111111111111111B;P4 PULL_HIGH resister 0:disable  1:enable
P4M_INIT                        EQU     1111111111111111B;P4 DIRECTION 0:Input  1:Output
P4_INIT                         EQU     0000000000000000B;P4 initial status

P5PH_INIT                       EQU     1111111111111111B;P5 PULL_HIGH resister 0:disable  1:enable
P5M_INIT                        EQU     1111111111111111B;P5 DIRECTION 0:Input  1:Output
P5_INIT                         EQU     0000000000000000B;P5 initial status

char_end                        EQU     0x00          ;字符串结束符
;======================================================
;font_size                       EQU     16              ;字体为16*16
;======================================================
include include\sys.h
;include gui\gui.h
.data



.code

;*********************************************
;;Timer1 interrupt routine
;*********************************************

ORG     0       
EXT_start_entry:
jmpff   EXT_start

org     0x10
EXT_T1_INT_entry:
        jmpff   EXT_T1_INT


ORG     0x18
EXT_T2_INT_entry:
        jmpff   EXT_T2_INT

ORG     0x20
EXT_RTC_INT_entry:
        jmpff   EXT_RTC_INT

ORG     0x28
EXT_RX_INT_entry:
        jmpff   EXT_RX_INT

ORG     0x30
EXT_TX_INT_entry:
        jmpff   EXT_TX_INT

ORG     0x38
EXT_P32_INT_entry:
        jmpff   EXT_P32_INT

ORG     0x40
EXT_P33_INT_entry:
        jmpff   EXT_P33_INT
;======================================================
;;timer1 interrupt routine
;======================================================
EXT_T1_INT:
	PUSH	SSF
	PUSH	R0
	PUSH	R1
	PUSH	X0
	PUSH	Y0
	PUSH	Ix0
	PUSH	Ix0BkRam
	CLR_I5R		//clr t1 irq
	PUSH RAMBK
	R0 = @SysRambk
	RAMBK = R0
	R0 = random_data
	R0 = R0 + r1
	random_data = R0
        R0 = int_flag
        R0 = bset.f_8ms_int R0
        int_flag = R0
        ;ADD
        CALLFF	KEYTONE_CHK
        ;END
       
	R0 = sofeware_timer
	R1 = 0
	R1 = R0-R1
	JZ	@F
	R0 = R0-1
	sofeware_timer = R0
	JNZ	@F
	R1 = eflag
        R1 = bset.bSoftTimer R1
        eflag = R1
@@:
	CALLFF	ScanKey

	R0 = auto_power_timer
	R0 = R0-1
	auto_power_timer = R0
	R0 = R0 AND R0
	JNZ	@F
	R0 = SysF
	R0 = BSET.bit_poweron R0
	SysF = R0
@@:
	POP	RAMBK
	POP	Ix0BkRam
	POP	Ix0
	POP	Y0
	POP	X0
	POP	R1
	POP	R0
	POP	SSF
	JMPFF	EXT_RETI
;======================================================
;;timer2 interrupt routine
;======================================================
EXT_T2_INT:
	PUSH	SSF
	PUSH	R0
	CLR_I3R		//clr t2 irq
	
	POP	R0
	POP	SSF
	JMPFF	EXT_RETI
;======================================================
;;rtc interrupt routine
;======================================================
EXT_RTC_INT:
	PUSH	SSF
	PUSH	R0
	CLR_I1R		//clr rtc irq
	push    r1
        push    x0
        push    y0
        push    rambk
        x0 = @sysRambk
        rambk = x0
        callff  @real_time_clock
        pop     rambk
        pop     y0
        pop     x0

        pop     r1
	POP	R0
	POP	SSF
	JMPFF	EXT_RETI
;======================================================
;;	UART Receive interrupt routine
;======================================================
EXT_RX_INT:
	PUSH SSF
	PUSH	R0
	PUSH	R1
	PUSH RAMBK
	CLR_I6R         		//CLR P0.0 IRQ
	R0 = @SysRambk
	RAMBK = R0
	R1=UARTC		;Check Rx Status
	R1=BTST.14 R1
	jfZ     @EREXIT
	R0      = RxData ;		; Read Rx Data Call
	R1=UARTC                		;Test 16 Bit Mode or not
	R1=BTST.9 R1
	JNZ     @16BIT_Rx
	R1=0x00FF
	R0=R0 AND R1		; 8 Bit Mode
@16BIT_Rx:
	UART_DataRX=R0
	R0=bReceiveFlag
	R0=BSET.@@Rx_byte_f R0
	bReceiveFlag=R0
	R0=UARTC
	R0=BCLR.8 R0		;Clear RxDintR
	UARTC=R0
@EREXIT:
	POP RAMBK
	POP R1
	POP R0
	POP SSF
	JMPFF   EXT_RETI
;======================================================
;;	UART Transmit interrupt routine
;======================================================
EXT_TX_INT:
	PUSH	SSF
	PUSH	R0
	PUSH	RAMBK
	CLR_I4R			;clr P0.1 IRQ
	R0 = @SysRambk
	RAMBK=R0
	R0=bReceiveFlag
	R0=BSET.@@Tx_byte_f R0
	bReceiveFlag=R0
	POP	RAMBK
	POP	R0
	POP	SSF
	JMPFF	EXT_RETI
;======================================================
;;external 2 interrupt routine
;======================================================
EXT_P32_INT:
	PUSH	SSF
	PUSH	R0
	CLR_I2R			;clr P0.2 IRQ
	POP	R0
	POP	SSF
	JMPFF	EXT_RETI
;======================================================
;;external 2 interrupt routine
;======================================================
EXT_P33_INT:
	PUSH	SSF
	PUSH	R0
	CLR_I0R			;clr P0.3 IRQ
	POP	R0
	POP	SSF
	JMPFF	EXT_RETI

include include\Mine.h	//lll 04-4-24 11:34 commom.h

EXT_START:
	R0 = 1011111111111111b	; set ebcr. extenb(15) = 1
				 ; datam(14) = 0         8bit
				; device en(9~6)=1111
				; address en(5~0)=111111
	EBCR = R0
	R0 = 0000000001000000b	; lcd type select 8080
				; define extern device as mmlm
				; active low
	DSR =R0
	R0 = 0000000000000001b
	EDI = R0

	
	X0 = stack_bottom
	SP = X0
	callff uart_init
	X0 = 0
	RAMBK=X0
	PWMS
	SET_TIMER
	SET_INTEN
	SET_IOinit
	GIE
	CALLFF	Clear_ALL_RAM
	R0 = @SysRambk
	RAMBK = R0
        callff  @sys_clockinit
        rtcon
	CALLFF	@@Init_All_FunCtion
	;ADD TEST PROGRAM:LCD AND CHECKSUM
	CALLFF	SysLcdConstAdjust
	callff	TestPro
	;END 
	R0=32767
@@:
	R0=R0-1
	JGT	@B
	NOP
	CALLFF	INIT_EXMEM
	CALLFF	IsBinStdReMemInit
	callff	initial_flash
	JMP	User_Start
;-----------------------------------------
TESTDEMOVERSION:
	DW	"  ELEC-DICTIONARY RELEASE VERSION 2.0 \r\n  COPYRIGHT BY LSB,2005.6~2006.6!",0X00
//////////////////////////////////////////////////////////////////////
;============================================================
User_Start:
	callff	@@UserFunInit
	callff	OpenPicEntry
	callff	SUI_Init	//return R0:MainMenu Select Index
	;R0=0
	CALLFF	@@Create_Root_Task
	CALLFF	_TASK_RunTask
	JMP	$
;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
; 主程序----
;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
MAIN:
	R0 = @SysRambk
	RAMBK = R0
	R0 = eflag
	R1 = BTST.bKdown R0
	JNZ	@F
	CALLFF	Get_Key_Value		;键值检测程序
	R0 = eflag
	R1 =BTST.bKdown R0
	JZ	@F
	R0 = auto_power_set		;重置关机时间
	auto_power_timer = R0
	R0 = keyno			;ON/OFF键检测
	R1 = k_on_off
	R1 = R0-R1
	JFZ	PowerDown_pro_Set	;关机处理程序
	CALLFF	@@Hot_Key_Check		;热键检测
	CALLFF	@@Help_Key_Chk		;帮助键检测
	JMP	MAIN_NEXT
@@:
	R0 = SysF
	R0 = BTST.bit_poweron R0
	JNZ	PowerDown_pro
MAIN_NEXT:
	callff  check_functon_dealwith
	R0 = eflag
	R1 = 0
	R1 = R0-R1
	JZ	MAIN
	R0 = eflag
	R1 = BTST.bKdown R0
	JZ	MAIN_LOOP
	R0 = key_flag
	R1 =BTST.@kSrf	R0		;检测输入法打开标志
	JZ	MAIN_LOOP
	CALLFF	@@shurufa_entry		;调用输入法程序
MAIN_LOOP:
	callff	CursorDispCheck		;;ADD	04-4-26 17:49
	R1=0
	CALLFF	SEND_MESSAGE_EVENT	;消息发送程序
	NOP
	NOP
	JMP	@B
	
check_functon_dealwith:	
	callff  @@VoltageEVENT_Chk
	
	CALLFF	@@Alarm_Timer_Chk	;闹铃检测
	CALLFF	@@IsAlarm_TimerChk
	CALLFF	@@Sched_Timer_Chk
	R0 = SysF1
	R1 = BTST.@votage_event R0 
	JNZ check_functon_dealwith_end
	CALLFF	@@PLAYEND_WAITCHK
check_functon_dealwith_end:
	retff	
;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
; 关机程序
;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
	include	bios\powerdown.asm
;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
; 电压程序
;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
	include	bios\voltage.asm	
;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
; 函数功能: 事件发送
; 输入参数: eflag
; 输出参数: 事件响应
; 占用资源: 
;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
SEND_MESSAGE_EVENT:
	DISGIE
	R0=eflag
_DispatchEvent:                     ;事件发送	
	R0=SRL R0
	JAC	@F
	R1=R1+1
	X0=8
	X0=X0-R1
	JLE	_DispatchEvent_Ret
	JMP	_DispatchEvent
@@:
	R0=R1+1
	PUSH	IX0
	PUSH	IX0BKRAM
	X0=Event_Flag_Mask$l
	X0=X0+R1
	Ix0=X0
	X0=Event_Flag_Mask$h
	Ix0BkRam=X0
	R1=EBCR
	X0=@Data_Mode_16bit	;0xFFFF
	EBCR=X0
	X0=RAM(Ix0)
	EBCR=R1
	Y0=eflag
	X0=X0 AND Y0
	eflag=X0
	X0=abtask
	Y0=(TASK_CTL_BLK)
	X0=X0+Y0
	Y0=1
	X0=X0+Y0
	Ix0=X0
	X0=0
	Ix0BkRam=X0
	MR0=RAM(Ix0,1)
	MR1=RAM(Ix0)
	X0=2
	Y0=R0
	MR=MR+X0*Y0(IS)
	X0 = MR0
        Ix0 = X0
        X0 = MR1
        Ix0bkram = X0
	R1=EBCR
	X0=@Data_Mode_16bit		;16 bit mode
	EBCR=X0
	X0=RAM(Ix0,1)
	Y0=RAM(Ix0)
	EBCR=R1
	POP	IX0BKRAM
	POP	IX0
	PUSH	X0
	PUSH	Y0
_DispatchEvent_Ret:
	GIE
	RETFF
Event_Flag_Mask:
	DW	11111110b
	DW	11111101b
	DW	11111011b
	DW	11110111b
	DW	11101111b
	DW	11011111b
	DW	10111111b
	DW	01111111b
;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
; 函数功能: 清全部RAM
; 输入参数: 
; 输出参数: 
; 占用资源: 
;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
Clear_ALL_RAM:
	POP R0
	POP R1
	X0=0x800
	Ix0=X0
	X0=0
	Ix0BKRam=X0
	X0=0
	Y0=1024+1024
@@:
	RAM(Ix0,1)=X0
	Y0=Y0-1
	JGT	@B
	PUSH R1
	PUSH R0
	RETFF
;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
; 函数功能: UART INIT
; 输入参数: 
; 输出参数: 
; 占用资源: 
;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
uart_init:
	;Set UART Interface
	;R0=0xc8		;Set BRS(38400bps),DIVD=25,PRS=0
	R0=0x80			;Set BRS(57600bps)
	;R0=0xD3		;Set BRS(4800bps)
	BRC=R0			
	
	R0=0x8010               ;0x9018		;Enable Tx/Rx,enable Parity
				;Check,Disable IR,8 bit-mode
	UARTC=R0
	R0=50
@@:
	R0=R0-1
	JNZ @b
	RETFF
;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
; 函数功能: 产生索引号为R0的根任务
; 输入参数: R0
; 输出参数: IN_PARAMETER
; 占用资源: 
;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
@@Create_Root_Task:
	X0 = MENU_EVENT$l
	IN_PARAMETER = X0
	X0 = MENU_EVENT$h
	IN_PARAMETER+1 = X0
	X0 = 1
	IN_PARAMETER+5 = X0
	IN_PARAMETER+6 = R0
	X0 = 0
	IN_PARAMETER+2 = X0
	IN_PARAMETER+3 = X0
	IN_PARAMETER+4 = X0
	IN_PARAMETER+7 = X0
	IN_PARAMETER+8 = X0
	IN_PARAMETER+9 = X0
	RETFF
;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
; 函数功能: 帮助键检测
; 输入参数: keyno
; 输出参数: 
; 占用资源: 
;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
@@Help_Key_Chk:
	R0 = eflag
	R1 = BTST.bKdown R0
	JNZ	@F
	RETFF
@@:
	R0 = keyno
	R1 = k_help
	R1 = R0-R1
	JNZ	@F
	CALLFF	@@HelpKey_function
@@:
	RETFF
;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

⌨️ 快捷键说明

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