📄 system.asm
字号:
//========================================================
// 文件名称: system.asm
// 功能描述: 系统的初始化等操作
// 涉及的库: 无
// 维护记录: 2006-9-20 v1.0
//========================================================
.INCLUDE SPCE061A.inc
.INCLUDE key.inc
.PUBLIC F_System_Initial
.PUBLIC _System_Initial
.PUBLIC F_System_ServiceLoop
.PUBLIC _System_ServiceLoop
.PUBLIC F_User_Init_IO
.PUBLIC _User_Init_IO
.PUBLIC F_TMB_Init
.PUBLIC _TMB_Init
.PUBLIC F_ADC_Init
.PUBLIC _ADC_Init
.PUBLIC F_SP_INT_IRQ5
.PUBLIC _SP_INT_IRQ5
.PUBLIC F_turn_off_IRQ5
.PUBLIC _turn_off_IRQ5
.PUBLIC F_UART_Init
.PUBLIC _UART_Init
.PUBLIC F_SP_INT_IRQ6
.PUBLIC _SP_INT_IRQ6
.EXTERNAL LED_No
//======================================================
// 函数名称: System_Initial()
// 汇编调用: F_System_Initial
// C调用: void System_Initial(void)
// 实现功能: 初始化函数
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器: r1
//======================================================
.CODE
_System_Initial:
F_System_Initial:
call F_User_Init_IO //初始化IO口
call F_Key_Scan_Initial //键盘初始化
call F_ADC_Init //AD初始化
call F_UART_Init //Uart
call F_SP_INT_IRQ5 //ADC采样
call F_SP_INT_IRQ6 //LED显示
call F_TMB_Init
r1 = 0
[LED_No] = r1 //初始化LED显示位数
retf
//======================================================
// 函数名称: System_ServiceLoop
// 汇编调用: F_System_ServiceLoop
// 实现功能: 程序扫描键盘、按键去抖调度
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器: 无
//======================================================
_System_ServiceLoop:
F_System_ServiceLoop:
call F_Key_Scan_ServiceLoop //扫描键盘
call F_Key_DebounceCnt_Down //按键去抖
retf
//======================================================
// 函数名称: User_Init_IO
// 汇编调用: F_User_Init_IO
// 实现功能: IO端口初始化
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器: 无
//======================================================
_User_Init_IO:
F_User_Init_IO:
r1 = 0xff80 // IOA0~2--按键输入,IOA4--AD输入,IOA7--继电器控制
[P_IOA_Dir] = r1 // IOA8~15-- 动态显示的SEG信号
r1 = 0xfff0
[P_IOA_Attrib] = r1
r1 = 0x0000
[P_IOA_Buffer] = r1
r1 = 0xffff
[P_IOB_Dir] = r1 // IOB3~5--动态显示的DIG信号
r1 = 0xffff // IOB10--UART的Tx
[P_IOB_Attrib] = r1
r1 = 0x0000
[P_IOB_Buffer] = r1
retf
//======================================================
// 函数名称: TMB_Init
// 汇编调用: F_TMB_Init
// 实现功能: TimerB初始化
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器: 无
//======================================================
_TMB_Init:
F_TMB_Init:
r1 = 0x04
[P_TimerB_Ctrl] = r1
r1 = 0xffff-64
[P_TimerB_Data] = r1
r1 = [P_INT_Ctrl_New]
r1 |= C_IRQ2_TMB
[P_INT_Ctrl_New] = r1
retf
//======================================================
// 函数名称: ADC_Init
// 汇编调用: F_ADC_Init
// C 调用: void ADC_Init(void)
// 实现功能: AD转换初始化
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器: r1
//======================================================
_ADC_Init:
F_ADC_Init:
r1 = 0x0005 //选择通道LINE_IN为IOA4
[P_ADC_MUX_Ctrl] = r1
r1 = [P_ADC_Ctrl]
r1 |= 0x0001 //允许A/D转换
[P_ADC_Ctrl] = r1
r1 = [P_DAC_Ctrl]
r1 &= 0xffe7
[P_DAC_Ctrl] = r1
retf
//======================================================
// 函数名称: SP_INT_IRQ5()
// 汇编调用: F_SP_INT_IRQ5
// C 调用: void SP_INT_IRQ5(void)
// 实现功能: 初始化中断为2HZ定时中断源,用来确定ADC采样时间定时.1秒钟采样一次.
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器: r1
//======================================================
_SP_INT_IRQ5:
F_SP_INT_IRQ5:
r1 = [P_INT_Ctrl_New]
r1 = r1 |0x0004
[P_INT_Ctrl_New] = r1
irq on //开中断
retf
//======================================================
// 函数名称: turn_off_IRQ5()
// 汇编调用: F_turn_off_IRQ5
// C 调用: turn_off_IRQ5()
// 实现功能: 关闭2HZ中断,不进行AD转换.
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器: r1
//======================================================
_turn_off_IRQ5:
F_turn_off_IRQ5:
r1 = [P_INT_Ctrl_New]
r1 &= 0xfffb
[P_INT_Ctrl_New] = r1
retf
//======================================================
// 函数名称: F_UART_Init
// 汇编调用: F_UART_Init
// C 调用: UART_Init()
// 实现功能: UART初始化函数.
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器: r1,r4
//======================================================
_UART_Init:
F_UART_Init:
r1 = 0x0000 //设置波特率9600bps
[P_UART_BaudScalarLow] = r1
r1 = 0x0005
[P_UART_BaudScalarHigh] = r1
r1 = 0x0000
r4 = 0x00C0 //使能RX和TX
[P_UART_Command1] = r1
[P_UART_Command2] = r4
retf
//======================================================
// 函数名称: SP_INT_IRQ6()
// 汇编调用: F_SP_INT_IRQ6
// C 调用: void SP_INT_IRQ6(void)
// 实现功能: 初始化IRQ6函数,显示刷新.
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器: r1
//======================================================
_SP_INT_IRQ6:
F_SP_INT_IRQ6:
r1 = 0x000c
[P_TimeBase_Setup]=r1
r1 = [P_INT_Ctrl_New]
r1 = r1 |0x0001 //开中断IRQ6_TMB2
[P_INT_Ctrl_New]= r1
irq on
retf
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -