?? ints.asm
字號:
//////////////////////////////////////////////////
//描述:利用定時器B 定時0.5s 使A口低四位的LED閃爍
//利用時基信號1024Hz 中斷定時1s,使IOA4--IOA7連接的LED閃爍
//硬件連接:IOA0--IOA3接4個LED
// IOA4--IOA7接4個LED
///////////////////////////////////////////////////
.INCLUDE hardware.inc
.DEFINE RUN_TIMERB 0x0400 //定義啟動定時器
.DEFINE TIMER_DATA_FOR_4KHZ (0xffff - 2048) //定時0.5秒F
.DEFINE RUN_TIMEBASE_1024 0x0010 //時基信號1024hz中斷位
.DEFINE TIMER_CLKA_4096 0x0004; //時鐘源A 選擇4096Hz
.RAM
.VAR C_IOA_LED1,C_IOA_LED2 //C_C_IOA_LED1為定時器B LED亮滅數據,C_IOA_LED2為時基信號LED亮滅的數據
.VAR C_Clock_Cnt; //時基信號的計數器
.CODE
.PUBLIC _main
_main:
int off
r1=0xffff //IOA口為輸出口
[P_IOA_Attrib]=r1
[P_IOA_Dir]=r1
r1=0x00ff
[P_IOA_Data]=r1;
[C_IOA_LED1] = r1;
[C_IOA_LED2] = r1;
//定時器B的預置數
r1 = TIMER_DATA_FOR_4KHZ
[P_TimerB_Data]=r1
//定義使用的時鐘源頻率時鐘源A為4096Hz時
r1 = TIMER_CLKA_4096
[P_TimerB_Ctrl]=r1
//開放定時器B中斷和時基信號1024hz中斷
r1 = RUN_TIMEBASE_1024 + RUN_TIMERB
[P_INT_Ctrl]=r1
INT IRQ //開IRQ中斷
//空操作
loop:
nop;
goto loop;
//==================================================================
//定時器A中斷程序
//功能:使IOA0--IOA3位接的4個LED0.5s閃爍
//===================================================================
.text
.public _IRQ2;
_IRQ2:
push r1,r5 to [sp] //現場保護
r1 = [C_IOA_LED1] //LED 賦值
r1 &= 0x000f;
r2 = [P_IOA_Data]
r2 &= 0x00f0;
r1|=r2
[P_IOA_Data]=r1
r1 ^= 0xffff;
[C_IOA_LED1] = r1;
//清中斷
r1=0x0400
[P_INT_Clear]=r1
//恢復現場
pop r1,r5 from [sp]
reti //返回
//===================================================================
//1024Hz時基信號中斷
//功能:使IOA4--IOA7接的4個LED 1秒閃爍
//===================================================================
.text
.public _IRQ4
_IRQ4:
push r1,r5 to [sp] //壓棧保護;
r1=0x0010;
test r1,[P_INT_Ctrl]; //比較是否為1KHz的中斷源;
jnz l_irq4_1k; //是,則轉至對應程序段;
r1=0x0020;
test r1,[P_INT_Ctrl] //否,則比較是否為2KHz的中斷源;
jnz l_irq4_2k; //是,則轉至對應程序段;
l_irq4_4k: //否,則進入4KHz程序段;
r1 = 0x0040;
goto exit_int;
l_irq4_2k:
goto exit_int;
l_irq4_1k:
r1 = [C_Clock_Cnt]
cmp r1,1024;
je LED_pro;
r1 += 1;
[C_Clock_Cnt] = r1;
r1 = 0x0010
goto exit_int;
//LED賦值
LED_pro:
r1 = [C_IOA_LED2]
r1 &= 0x00f0
r2 = [P_IOA_Data]
r2 &= 0x000f
r1 |= r2
[P_IOA_Data]=r1
r1 ^= 0xffff;
[C_IOA_LED2] = r1;
r1 = 0x0000
[C_Clock_Cnt] = r1; //清時基計數器
r1 = 0x0010
exit_int:
[P_INT_Clear] = r1;
pop r1,r5 from [sp]
reti;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -