📄 main_ext.asm
字号:
;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
; 外部主程式---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 + -