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

📄 system.asm

📁 51单片机测温程序
💻 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 + -