⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.asm

📁 凌阳单片机DATA、CODE、TEXT三条伪指令的用法及区别.
💻 ASM
字号:
//===========================================================================
//
//        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三条伪指令的用法及区别
//  文件来源:  《SPCE061单片机原理及应用技术》 第三章 指令系统 
//  IDE环境:    SUNPLUS u'nSPTM  IDE 1.8.0(or later)
//
//  涉及的库:	 (a) C-Lib:  (CMacro.lib);
//  组成文件:
//    			 main.asm
//  日期:          	2003-5-22(建立)
//					2003-6-16(添加版本说明及版权声明)
//					2003-7-16(代码标准化)
//==============================================================================
.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段用于存放无初始化的变量
.var KeyCode

.DATA                            
//切换到DATA段,DATA段用于存放数据表格
//显示数据表
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;              	//设置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口上的数据
      r1=0x0007;
      [P_SystemClock]=r1;        //进入睡眠模式
 
  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段用于存放程序指令,链接时链接到第一个bank,即零页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             	  //查表换算成顺序值
  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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -