?? system.asm
字號:
//========================================================================================================
// 文件名稱:system.asm
// 實現功能:實現與硬件相關的底層操作
// 日 期:2003/7/7
//========================================================================================================
.INCLUDE hardware.inc
.DEFINE P_IOA_RL 0x7004;
.RAM
.VAR KeyCode
.DATA
DispTable:.DW 0x0040,0x00F9,0x0024,0x0030 //'0'-'F'的代碼值
.DW 0x0019,0x0012,0x0002,0x0078
.DW 0x0000,0x0010,0x0008,0x0003
.DW 0x0046,0x0021,0x0006,0x000E
KeyTable: .DW 0x0011,0x0021,0x0041,0x0081 //鍵盤表
.DW 0x0012,0x0022,0x0042,0x0082
.DW 0x0014,0x0024,0x0044,0x0084
.DW 0x0018,0x0028,0x0048,0x0088
.CODE
//========================================================================================================
//函數: F_System_Initial
//語法:void F_System_Initial()
//描述:初始化
//參數:無
//返回:無
//========================================================================================================
.PUBLIC _F_System_Initial;
_F_System_Initial: .PROC
PUSH r1,r1 TO [sp];
r1=0xFFF0; //IOA0-IOA3設置為下拉輸入,IOA4-IOB7設置為同相高電平輸出。
[P_IOA_Dir]=r1; //IOA8-IOA15為低電平輸出;
[P_IOA_Attrib]=r1;
r1=0x00F0;
[P_IOA_Data]=r1;
r1=0xffff;
[P_IOA_Data]=r1;
POP r1,r1 FROM [sp];
RETF;
.ENDP;
//========================================================================================================
//函數: F_LED_On
//語法:void F_LED_On(unsigned int uiLedStateValue)
//描述:點亮與IOA8-IOA15相連的LED燈
//參數:uiLedStateValue:低8位為LED燈狀態值,低電平點亮LED,高電平熄滅LED.
//返回:無
//========================================================================================================
.PUBLIC _F_LED_On;
_F_LED_On: .PROC
r1=[P_IOA_Data]; //確定按鍵值;
r1&=0x00FF;
r2=0;
BP=KeyTable; //查表換算成順序值;
Loop:
r3=[BP++];
CMP r1,r3;
JE KeyValid;
r2+=1;
CMP r2,16;
JBE Loop;
r2=0;
KeyValid:
[KeyCode]=r2; //存有效鍵碼;
push r1,r1 to [sp];
bp=sp+1;
r1=[bp+3];
bp=DispTable; //查表
bp+=[KeyCode];
r1=[bp];
r1=r1 rol 4;
r1=r1 rol 4;
Loop1:
[P_IOA_Data]=r1; //送IOA口顯示;
r3=0x0001;
[P_Watchdog_Clear]=r3;
CALL F_Key_Scaning;
JZ Loop1;
pop r1,r1 from [sp];
RETF;
.ENDP
//============================================================================================
//函數: SP_INT_128Hz()
//語法:void SP_INT_128Hz()
//描述:TMB2選擇128Hz
//參數:無
//返回:無
//=============================================================================================
.public _SP_INT_128Hz;
_SP_INT_128Hz:
r1 = 0x0000;
[P_TimeBase_Setup]=r1 // TMB2選擇128Hz //TMB1選擇8Hz,但不起作用
r1 = 0x0001 //開中斷IRQ6_TMB2
[P_INT_Ctrl]= r1
INT IRQ
RETF;
//========================================================================================================
//函數: F_GetKeyValue
//語法:unsigned int F_GetKeyValue(void)
//描述:獲取與IOA0-IOA7相連接的16個按鍵的鍵值
//參數:無
//返回:鍵值
//========================================================================================================
.PUBLIC _F_GetKeyValue;
_F_GetKeyValue: .PROC
push r2,r3 to [sp];
CALL F_Key_Scaning;
r1=[P_IOA_Data];
r1&=0x00FF;
r3=0x0001;
[P_Watchdog_Clear]=r3;
pop r2,r3 from [sp];
RETF;
.ENDP
F_Key_Scaning:
Scan_A0:
r2=0xff10;
[P_IOA_Data]=r2;
r1=0x000f;
r1&=[P_IOA_Data];
CMP r1,0x0000;
JNZ F_Key_Pressed;
Scan_A1:
r2=0xff20;
[P_IOA_Data]=r2;
r1=0x000f;
r1&=[P_IOA_Data];
CMP r1,0x0000;
JNZ F_Key_Pressed;
Scan_A2:
r2=0xff40;
[P_IOA_Data]=r2;
r1=0x000f;
r1&=[P_IOA_Data];
CMP r1,0x0000;
JNZ F_Key_Pressed;
Scan_A3:
r2=0xff80;
[P_IOA_Data]=r2;
r1=0x000f;
r1&=[P_IOA_Data];
CMP r1,0x0000;
JNZ F_Key_Pressed;
retf;
F_Key_Pressed:
r1+=r2;
retf;
//========================================================================================================
//函數: F_Delay
//語法:call F_Delay (for Assembly language)
//描述:用于鍵掃描延時去抖
//參數:無
//返回:無
//========================================================================================================
.TEXT
.PUBLIC _IRQ6;
_IRQ6:
PUSH r3,r4 to [sp];
r3=0x0001;
TEST r3,[P_INT_Ctrl];
JNZ _IRQ6_TMB2;
r3=0x0002;
[P_INT_Clear]=r1;
POP r3,r4 FROM [sp];
RETI;
_IRQ6_TMB2:
[P_INT_Clear]=r1;
CALL F_Key_Scaning;
POP r3,r4 FROM [sp];
RETI;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -