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

📄 system.asm

📁 通过pid算法来对水温的测量、控制等功能
💻 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 + -