📄 system.asm
字号:
.INCLUDE spce.inc
.DEFINE P_WatchDog_Clear 0x7012
.DEFINE Fosc 0x0000
.DEFINE Fosc_Div2 0x0001
.DEFINE Fosc_Div4 0x0002
.DEFINE Fosc_Div8 0x0003
.DEFINE Fosc_Div16 0x0004
.DEFINE Fosc_Div32 0x0005
.DEFINE Fosc_Div64 0x0006
.DEFINE Sleep 0x0007
.DEFINE F_24576 0x0000
.DEFINE F_20480 0x0020
.DEFINE F_32768 0x0040
.DEFINE F_40960 0x0060
.DEFINE F_49452 0x0080
.DEFINE OSC_Q 0x0008
.DEFINE FIQ_F1024 0x8000
.DEFINE IRQ0_F1024 0x4000
.DEFINE FIQ_TMA 0x2000
.DEFINE IRQ1_TMA 0x1000
.DEFINE FIQ_TMB 0x0800
.DEFINE IRQ2_TMA 0x0400
.DEFINE IRQ3_EX2 0x0200
.DEFINE IRQ3_EX1 0x0100
.DEFINE IRQ3_Key 0x0080
.DEFINE IRQ4_4KHz 0x0040
.DEFINE IRQ4_2KHz 0x0020
.DEFINE IRQ4_1KHz 0x0010
.DEFINE IRQ5_4Hz 0x0008
.DEFINE IRQ5_2Hz 0x0004
.DEFINE IRQ6_TMB1 0x0002
.DEFINE IRQ6_TMB2 0x0001
.RAM
.VAR BIN_BCD_Temp1
.CODE
.PUBLIC _System_Init
_System_Init:push r1,r1 to [sp]
r1 = F_49452+Fosc+OSC_Q //系统时钟初始化
[P_SystemClock] = r1
pop r1,r1 from [sp]
retf
//****************************************************************************************************
// 系统初始化程序 System_Init()
// 设计者: 牟联树
// 描 述: 系统初始化,根据需要更改,主要是时钟和I/O的初始化,还有一些系统模块的初始化
// 日 期: 2003.11.22
// 版本号: 1.0
//****************************************************************************************************
.PUBLIC _BIN_BCD
_BIN_BCD: push r2,r5 to [sp]
r2 = 0;
r3 = 0;
[BIN_BCD_Temp1] = r3
r4 = 16;
//十进制加法调整
//******************************************************************************************
BIN_BCDa: r3 = [BIN_BCD_Temp1]
r2 = r3
r5 = r3&0x000f
r3&= 0x000f
r1+=r1
r5+= r3,Carry
cmp r5,0x0009
jbe BIN_BCDb
r5+=0x0006
BIN_BCDb: r3 = [BIN_BCD_Temp1]
r3&= 0xfff0
r3+=r5
[BIN_BCD_Temp1] = r3
r5 = r2
r5&= 0x00f0
r3 = [BIN_BCD_Temp1]
r3&= 0x00f0
r5+=r3
cmp r5,0x0090
jbe BIN_BCDc
r5+=0x0060
BIN_BCDc: r3 = [BIN_BCD_Temp1]
r3&= 0xff0f
r3+=r5
[BIN_BCD_Temp1] = r3
r5 = r2
r5&= 0x0f00
r3 = [BIN_BCD_Temp1]
r3&= 0x0f00
r5+=r3
cmp r5,0x0900
jbe BIN_BCDd
r5+=0x0600
BIN_BCDd: r3 = [BIN_BCD_Temp1]
r3&= 0xf0ff
r3+=r5
[BIN_BCD_Temp1] = r3
r5 = r2
r5&= 0xf000
r3 = [BIN_BCD_Temp1]
r3&= 0xf000
r5+=r3
jcc BIN_BCDt
jmp BIN_BCDy
BIN_BCDt: cmp r5,0x9000
jbe BIN_BCDe
BIN_BCDy: r5+=0x6000
BIN_BCDe: r3 = [BIN_BCD_Temp1];
r3&= 0x0fff
r3+=r5
[BIN_BCD_Temp1] = r3
//******************************************************************************************
BIN_BCDl: r4-= 1
jnz BIN_BCDx
r1 = [BIN_BCD_Temp1]
pop r2,r5 from [sp]
retf
BIN_BCDx: goto BIN_BCDa
.TEXT
.PUBLIC _BREAK
_BREAK: nop
nop
nop
nop
nop
reti
.PUBLIC _FIQ
_FIQ: reti
.PUBLIC _IRQ0
_IRQ0: reti
.PUBLIC _IRQ2
_IRQ2: reti
//.PUBLIC _IRQ4 //1024Hz,2048Hz,4096Hz时基中断
// _IRQ4: reti
//****************************************************************************************************
// IRQ_2Hz中断服务 IRQ_2Hz
// 设计者: 牟联树
// 描 述: IRQ_2Hz中断服务(用来清看门狗)
// 日 期: 2003.11.22
// 版本号: 1.0
//****************************************************************************************************
.PUBLIC _IRQ5 //2Hz,4Hz时基中断
_IRQ5: push r1,r1 to [sp]
r1 = IRQ5_2Hz
test r1,[P_INT_Ctrl]
jnz IRQ_2Hz
IRQ_4Hz: r1 = IRQ5_4Hz
jmp Exit_IRQ5
IRQ_2Hz: r1 = 0x0001
[P_WatchDog_Clear] = r1
r1 = IRQ5_2Hz;
Exit_IRQ5: [P_INT_Clear] = r1
pop r1,r1 from [sp]
reti
.PUBLIC _IRQ6 //TMB1,TMB2可选择时基中断
_IRQ6: reti
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -