📄 system.asm
字号:
//======================================================
// The information contained herein is the exclusive property of
// Sunnnorth Technology Co. And shall not be distributed, reproduced,
// or disclosed in whole in part without prior written permission.
// (C) COPYRIGHT 2003 SUNNORTH TECHNOLOGY CO.
// ALL RIGHTS RESERVED
// The entire notice above must be reproduced on all authorized copies.
//========================================================
//========================================================
// 文件名称: system.asm
// 功能描述: 系统的初始化操作等
// 涉及的库: 无
// 维护记录: 2005-11-25 v1.0
//========================================================
.INCLUDE hardware.inc
.INCLUDE key.inc
.DEFINE P_ADC_MUX_Ctrl 0x702b
.DEFINE P_INT_Ctrl_New 0x702d
.EXTERNAL LED_No
//======================================================
// 函数名称: System_Initial()
// 汇编调用: _System_Initial
// C调用: void System_Initial(void)
// 实现功能: 初始化函数
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器: 无
//======================================================
.CODE
.PUBLIC _System_Initial
_System_Initial:
call L_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
// 汇编调用: System_ServiceLoop
// 实现功能: 程序扫描键盘、按键去抖调度
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器: 无
//======================================================
.PUBLIC _System_ServiceLoop
_System_ServiceLoop:
call F_Key_Scan_ServiceLoop //扫描键盘
call F_Key_DebounceCnt_Down //按键去抖
RETF
//======================================================
// 函数名称: L_User_Init_IO
// 汇编调用: L_User_Init_IO
// 实现功能: IO端口初始化
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器: 无
//======================================================
.PUBLIC L_User_Init_IO
L_User_Init_IO:
r1 = 0xff00
[P_IOA_Dir] = r1
[P_IOA_Data] = r1
r1 = 0xfff0 //IOA0~3--KEY,IOA4~7--AD
[P_IOA_Attrib] = r1
r1 = 0xF20F
[P_IOB_Attrib] = r1
[P_IOB_Dir] = r1
r1 = [P_IOB_Buffer]
r1 &= 0xfdff
[P_IOB_Data] = r1
RETF
//======================================================
// 函数名称: F_TMB_Init
// 汇编调用: F_TMB_Init
// 实现功能: TimerB初始化
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器: 无
//======================================================
.PUBLIC F_TMB_Init
F_TMB_Init:
r1 = 0x04 //4K
[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
//======================================================
// 函数名称: F_TMB_Init
// 汇编调用: F_ADC_Init
// C 调用: void ADC_Init(void)
// 实现功能: AD转换初始化
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器: r1
//======================================================
.PUBLIC _ADC_Init
.PUBLIC F_ADC_Init
_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
//======================================================
.PUBLIC _SP_INT_IRQ5
.PUBLIC F_SP_INT_IRQ5
_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()
// 汇编调用: _turn_off_IRQ5
// C 调用: turn_off_IRQ5()
// 实现功能: 关闭2HZ中断,不进行AD转换.
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器: r1
//======================================================
.PUBLIC _turn_off_IRQ5
_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
//======================================================
.PUBLIC _UART_Init
.PUBLIC F_UART_Init
_UART_Init:
F_UART_Init:
r1 = [P_IOB_Attrib] //设置IOB7为输入IOB10为输出
r1 = r1 | 0x0480
[P_IOB_Attrib] = r1
r1 = [P_IOB_Dir]
r1 = r1 | 0x0400
[P_IOB_Dir] = r1
r1 = [P_IOB_Buffer]
r1 = r1 & 0xffb7
[P_IOB_Data] = r1
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
//======================================================
// 函数名称: SP_INT_IRQ6()
// 汇编调用: F_SP_INT_IRQ6
// C 调用: void SP_INT_IRQ6(void)
// 实现功能: 初始化IRQ6函数,显示刷新.
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器: r1
//======================================================
.PUBLIC _SP_INT_IRQ6 //128hz
.PUBLIC F_SP_INT_IRQ6 //128hz
_SP_INT_IRQ6:
F_SP_INT_IRQ6:
r1 = 0x000c
[P_TimeBase_Setup]=r1 //128hz
r1 = [P_INT_Ctrl_New]
r1 = r1 |0x0001 //开中断IRQ6
[P_INT_Ctrl_New]= r1
irq on
RETF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -