?? test9.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.
//========================================================
//============================================================
// 工程名稱:test9.spj
// 功能描述: IRQ4中斷有三個中斷源:1KHz、2Kz和4KHz,每一個中斷分別控制與IOA0-IOA1
// 、IOA2-IOA3和IOA4-IOA7相連的LED燈。
// 文件來源:《實驗儀實驗指導書》,"實驗十一 IRQ4中斷實驗" 第33頁
// IDE環(huán)境: SUNPLUS u'nSPTM IDE 1.8.4
//
// 涉及的庫:
// 組成文件:
// test9.asm
//===============================================
//============================================================
// 文件名稱:test9.asm
// 實現(xiàn)功能: IRQ4中斷有三個中斷源:1KHz、2Kz和4KHz,每一個中斷分別控制與IOA0-IOA1
// 、IOA2-IOA3和IOA4-IOA7相連的LED燈。
//============================================================
.define P_IOA_DATA 0x7000;
.define P_IOA_DIR 0x7002;
.define P_IOA_ATTRI 0x7003;
.define P_IOB_DATA 0x7005;
.define P_IOB_DIR 0x7007;
.define P_IOB_ATTRI 0x7008;
.define P_INT_CTRL 0x7010;
.define P_INT_CLEAR 0x7011;
.ram
.var TIME1
.var TIME2
.var TIME4
.code
.public _main
//=============================================================
// 函數(shù)名稱: _main
// 功能描述: 初始化
// 語法格式: _main
//入口參數(shù): 無
// 出口參數(shù): 無
// 注意事項: 僅為用戶模型
//=================================================================
_main:
int off;
r1=0x00ff; //IOA低八位為同相高電平輸出口
[P_IOA_ATTRI]=r1;
[P_IOA_DIR]=r1;
[P_IOA_DATA]=r1;
r1=0x0040; //IOB6為同相高電平輸出口
[P_IOB_ATTRI]=r1;
[P_IOB_DIR]=r1;
[P_IOB_DATA]=r1;
r1=0x0070; //開中斷IRQ4_4KHz、IRQ4_2KHz和
//IRQ4_1KHz
[P_INT_CTRL]=r1;
r1=0;
[TIME1]=r1;
[TIME2]=r1;
[TIME4]=r1;
int irq;
loop:
nop;
nop;
nop;
nop;
jmp loop;
.text
.public _IRQ4
//=============================================================
// 函數(shù)名稱: _IRQ4
// 功能描述: IRQ4中斷有三個中斷源:1KHz、2Kz和4KHz,每一個中斷分別控制與IOA0-IOA1
// 、IOA2-IOA3和IOA4-IOA7相連的LED燈。
//入口參數(shù): 無
// 出口參數(shù): 無
// 注意事項: 僅為用戶模型
//=================================================================
_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程序段
r2=[TIME4];
r2+=0x0001;
[TIME4]= r2;
cmp r2,0x03ff //比較是否為0.25秒
jbe LED4kHZ_OFF //小于等于則LED滅
r1=0x00f0; //大于則LED亮
[P_IOA_DATA]=r1;
cmp r2,0x07ff //比較是否為0.5秒
jbe LED4kHz_RET //小于等于則LED繼續(xù)亮
r2=0x000; //否則,TIME4單元清零,返回中斷
[TIME4]= r2;
jmp LED4kHz_RET
LED4kHZ_OFF:
r1=0x0000;
[P_IOA_DATA]=r1;
LED4kHz_RET:
r1=0x0040;
[P_INT_CLEAR]=r1;
pop r1,r5 from [sp]
RETI;
l_irq4_2k:
r2=[TIME2];
r2+=0x0001;
[TIME2]= r2;
cmp r2,0x03ff //比較是否為0.5秒
jbe LED2kHZ_OFF //小于等于則LED滅
r1^=0x00c0; //大于則LED亮
[P_IOA_DATA]=r1;
cmp r2,0x07ff //比較是否為1秒
jbe LED2kHz_RET //小于等于則LED繼續(xù)亮
r2=0x000; //否則,TIME2單元清零,返回中斷
[TIME2]= r2;
jmp LED2kHz_RET
LED2kHZ_OFF:
r1=0x0000;
[P_IOA_DATA]=r1;
LED2kHz_RET:
r1=0x0020;
[P_INT_CLEAR]=r1;
pop r1,r5 from [sp]
RETI
l_irq4_1k:
r2=[TIME1];
r2+=0x0001;
[TIME1]= r2;
cmp r2,0x03ff //比較是否為1秒
jbe LED1kHZ_OFF //小于等于則LED滅
r1=0x0003; //大于則LED亮
[P_IOA_DATA]=r1;
cmp r2,0x07ff //比較是否為兩秒
jbe LED1kHz_RET //小于等于則LED繼續(xù)亮
r2=0x000; //否則,TIME1單元清零,返回中斷
[TIME1]= r2;
jmp LED1kHz_RET
LED1kHZ_OFF:
r1=0x0000;
[P_IOA_DATA]=r1;
LED1kHz_RET:
r1=0x0010;
[P_INT_CLEAR]=r1;
pop r1,r5 from [sp]
RETI
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -