?? sys.asm
字號:
.include spce061.inc
.include s480.inc
.external _uiQuarterSecondCnt;
.DATA
C_Address: .DW 0x3fcf,0x06cf,0x5bcf,0x4fcf, 0x66cf,0x6dcf,0x7ccf,0x07cf,0x7fcf,0x6fcf;//'0''1''2''3''4''5''6''7''8''9'的代碼
C_Dig: .DW 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;//選中LED數碼管
.CODE
//========================================================================================================
//函數: IO_Initial
//語法:void IO_Initial()
//描述:初始化
//參數:無
//返回:無
//========================================================================================================
.external R_InterruptStatus
.PUBLIC _IO_Initial;
_IO_Initial: .PROC
PUSH r1 TO [sp];
r1=0xffff
[P_IOB_Dir]=r1
[P_IOB_Attrib]=r1
[P_IOB_Data]=r1
r1=0x0000
[P_IOA_Dir]=r1
[P_IOA_Attrib]=r1
[P_IOA_Data]=r1
r1 = C_IRQ5_4Hz|C_IRQ4_4KHz;
[R_InterruptStatus] = r1;
[P_INT_Ctrl] = r1;
INT IRQ
POP r1 FROM [sp];
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] //取出第二個入口參數
r2 = r1 + C_Dig; //取LED管的片選地址
r2 = [r2]
r4 = r3 + C_Address //取顯示數據的地址
r4 = [r4]
r2 |= r4
[P_IOB_Data] = r2; //顯示數據
POP bp FROM [sp]
RETF;
.ENDP
.text
.external _g_uiResetIO
.public _IRQ5
_IRQ5:
push r1 to [sp]
r1 = 0x0001;
[P_Watchdog_Clear] = r1; //清看門狗
r1 = [_uiQuarterSecondCnt];
r1 += 1;
[_uiQuarterSecondCnt] = r1;
r1 = [_g_uiResetIO];
r1 += 1;
[_g_uiResetIO] = r1;
r1 = C_IRQ5_4Hz;
[P_INT_Clear] = r1;
pop r1 from [sp]
reti
//============================================================================================
//函數: FIQ()
//語法:void FIQ(void)
//描述:FIQ中服務斷函數
//參數:無
//返回:無
//===============================================================================================
.PUBLIC _FIQ
_FIQ:
PUSH R1,R5 TO [SP]
R1 = [P_INT_Ctrl]
R1 &= 0x2000
JZ ?L_notTimerA //當不為TIQ_TMA,則轉
CALL F_FIQ_Service_SACM_S480; //為0,播放480
R1 = 0x2000
[P_INT_Clear] = R1
POP R1,R5 FROM [SP];
reti;
?L_notTimerA:
R1 = 0x8800;
[P_INT_Clear] = R1;
POP R1,R5 FROM [SP];
RETI;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -