?? main.asm
字號(hào):
//===========================================================================
//
// The information contained herein is the exclusive property of
// Sunplus Technology Co. And shall not be distributed, reproduced,
// or disclosed in whole in part without prior written permission.
//
// (C) COPYRIGHT 2001 SUNPLUS TECHNOLOGY CO.
// ALL RIGHTS RESERVED
//
// The entire notice above must be reproduced on all authorized copies.
//
//============================================================================
// 工程名稱:
// 功能描述: 程序3.3 DATA、CODE、TEXT三條偽指令的用法及區(qū)別
// 文件來(lái)源: 《SPCE061單片機(jī)原理及應(yīng)用技術(shù)》 第三章 指令系統(tǒng)
// IDE環(huán)境: SUNPLUS u'nSPTM IDE 1.8.0(or later)
//
// 涉及的庫(kù): (a) C-Lib: (CMacro.lib);
// 組成文件:
// main.asm
// 日期: 2003-5-22(建立)
// 2003-6-16(添加版本說(shuō)明及版權(quán)聲明)
// 2003-7-16(代碼標(biāo)準(zhǔn)化)
//==============================================================================
.DEFINE P_IOA_Data 0x7000; //定義常量
.DEFINE P_IOA_Dir 0x7002;
.DEFINE P_IOA_Attr 0x7003;
.DEFINE P_IOA_Latch 0x7004;
.DEFINE P_IOB_Data 0x7005;
.DEFINE P_IOB_Buffer 0x7006;
.DEFINE P_IOB_Dir 0x7007;
.DEFINE P_IOB_Attr 0x7008;
.DEFINE P_INT_Ctrl 0x7010;
.DEFINE P_INT_Clear 0x7011;
.DEFINE P_Watchdog_Clear 0x7012;
.DEFINE P_SystemClock 0x7013;
.RAM
//切換到RAM段,RAM段用于存放無(wú)初始化的變量
.var KeyCode
.DATA
//切換到DATA段,DATA段用于存放數(shù)據(jù)表格
//顯示數(shù)據(jù)表
DispTable: .DW 0x00FF,0x0006,0x005b,0x004f,0x0066 //全亮、1、2、3、4
.DW 0x006d,0x007d,0x0007,0x007f,0x006f //5、6、7、8、9
.DW 0x003f //0
//鍵盤表
KeyTable: .DW 0x0000
.DW 0x0001,0x0002,0x0004,0x0008
.DW 0x0010,0x0020,0x0040,0x0080
.CODE
//切換到CODE段,CODE段用于存放程序指令
.PUBLIC _main;
_main:
r1=0xff00; //初始化IOA口低8位為帶下拉電阻的輸入
[P_IOA_Dir]=r1
[P_IOA_Attr]=r1;
r1=0x0000;
[P_IOA_Data]=r1;
r1=0x00FF; //設(shè)置IOB口低8位為同相高電平輸出
[P_IOB_Dir]=r1;
[P_IOB_Attr]=r1;
r1=0x00FF;
[P_IOB_Data]=r1;
r1=0x0000 //初始化KeyCode變量
[KeyCode]=r1
r1=0x0080;
[P_INT_Ctrl]=r1; //開按鍵喚醒中斷
IRQ ON;
r1=[P_IOA_Latch]; //鎖存IOA0-7口上的數(shù)據(jù)
r1=0x0007;
[P_SystemClock]=r1; //進(jìn)入睡眠模式
L_Wait:
bp=DispTable //查表
bp+ =[KeyCode]
r1=[bp]
[P_IOB_Data]=r1; //送IOB口顯示
r1=0x0001
[P_Watchdog_Clear]=r1;
jmp L_Wait;
//************************************************************************************************//
//*************************************中斷程序*************************************************//
//************************************************************************************************//
.TEXT
//切換到TEXT段,TEXT段用于存放程序指令,鏈接時(shí)鏈接到第一個(gè)bank,即零頁(yè)ROM中。
.PUBLIC _IRQ3
_IRQ3:
PUSH r1,r5 TO [sp];
r1=[P_INT_Ctrl]
r1=0x0080; //按鍵喚醒中斷
TEST r1,[P_INT_Ctrl]
JZ return
r1=[P_IOA_Data]; //確定按鍵值
r1=r1 and 0x00ff;
r2=0;
bp=KeyTable //查表?yè)Q算成順序值
LOOP:
r3=[bp++]
CMP r1,r3
JE KeyValid
r2+=1;
CMP r2,8
JBE LOOP
r2=0
KeyValid:
[KeyCode]=r2; //存有效鍵碼
return:
r1=0x0380 //清中斷
[P_INT_Clear]=r1
r1=0x0001
[P_Watchdog_Clear]=r1;
POP r1,r5 FROM [sp];
reti;
.END
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -