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

📄 system.asm

📁 在凌阳61板上实验成功的电压表程序
💻 ASM
字号:
.INCLUDE hardware.inc
.EXTERNAL  F_Key_Scan_Initial
.EXTERNAL  F_Key_DebounceCnt_Down
.EXTERNAL  F_Key_Scan_ServiceLoop

.PUBLIC	G_Sum;
.PUBLIC G_INT_STATUS;
.PUBLIC G_BADDDP;
.RAM 
.VAR	G_INT_STATUS = 0;
.VAR G_Sum                             // 进入中断的计数器
.VAR G_BADDDP = 0;
.DATA
	// 2007.05.30 resocman 片选和段选
    C_Address: .DW 0xfd00,0x6100,0xdb00,0xf300, 0x6700,0xb700,0xbf00,0xe100,0xff00,0xf700,0xBF00,0x8600,0xDB00,0xCF00,0xE600,0xed00,0xfd00,0x8700,0xff00,0xef00;
    //'0''1''2''3''4''5''6''7''8''9''0.''1.''2.''3.''4.''5.''6.''7.''8.''9.'的代码
    C_Dig:     .DW 0x8,0x4,0x2,0x1;

.CODE
//============================================================================================
//函数: System_Initial
//语法:void System_Initial()
//描述:键盘扫描初始化
//参数:无
//返回:无
//===============================================================================================


.public _System_Initial;
.public	F_System_Initial;
_System_Initial: .PROC
F_System_Initial:
	call	F_Key_Scan_Initial;		// 键盘扫描初始化,来自key.asm	
	retf;
.ENDP;
//============================================================================================
//函数: System_ServiceLoop
//语法:System_ServiceLoop()
//描述:键盘扫描
//参数:无
//返回:无
//==============================================================================================
.public _System_ServiceLoop;
.public	F_System_ServiceLoop;
_System_ServiceLoop: .PROC                  
F_System_ServiceLoop:
		call	F_Key_DebounceCnt_Down;		// 按键去抖 ,来自key.asm
		call    F_Key_Scan_ServiceLoop;		// 键盘扫描程序,来自key.asm 			
		R1=0x0001;                          // 清看门狗
		[P_Watchdog_Clear]=R1;       	    //
        retf;
        .ENDP;
        
//============================================================================================
//函数: F_Show()
//语法:void F_Show(int A,int B)
//描述:点亮LED
//参数:A,LED的位数(C_Dig),B,LED的显示值
//返回:无
//============================================================================================  
.PUBLIC _F_Show;
_F_Show: .PROC
    PUSH bp TO  [sp];  		      //弹出入口参数共两个入口参数
    bp = sp + 1   
L_Loop: 
    r1 = [bp+3]                   //取出第一个入口参数
    r3 = [bp+4]                   //取出第二个入口参数
    cmp r3, 0x0000
    JNL	Normal
    r3 = 0x000A
Normal:
    r2 =  r1 + C_Dig;             //取LED管的片选地址  ,相当取数组中的某个元素  
    r2  = [r2]   				  //将地址里的内容取出,即取一个片选值 2007.05.30 resocman
    r4 =  r3 + C_Address          //取显示数据的地址 
    r4 = [r4] 
    r2 |= r4     
    [P_IOA_Data] = r2;            //显示数据  
    POP bp FROM [sp]
    RETF;
.ENDP

//============================================================================================
//函数: Clear_WatchDog()
//语法:void Clear_WatchDog(void)
//描述:清看门狗
//参数:无
//返回:无
//============================================================================================
.PUBLIC _Clear_WatchDog;
_Clear_WatchDog:  .PROC
	r1 = 0x01;
 	[P_Watchdog_Clear] = r1;
 	RETF
.ENDP


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -