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

📄 system.asm

📁 本系统参照片上系统的设计架构、采用FPGA与SPCE061A相结合的方法
💻 ASM
字号:
 
   //*****************************************************************************************************//
   //                                 SYSTEM SERVICE FUNCTION                                             //
   //                                              DESIGNED BY PHEONIX                                    //
   //  VOID IO_INIT(VOID)                                                                                 // 
   //  VOID WATCHDOG_CLEAR(VOID)                                                                          //
   //*****************************************************************************************************//  
 
  .PUBLIC _IO_INIT;
  .PUBLIC _WATCHDOG_CLEAR; 
  .PUBLIC _IRQ3;
  .PUBLIC _IRQ4;
  
  .DEFINE P_IOA_Data   	      0x7000;        // Write Data into data register and read from IOA pad
  .DEFINE P_IOA_Buffer        0x7001;        // Write Data into buffer register and read from buffer register
  .DEFINE P_IOA_Dir           0x7002;        // Direction vector for IOA
  .DEFINE P_IOA_Attrib        0x7003;        // Attribute vector for IOA
  .DEFINE P_IOA_Latch         0x7004;        // Latch PortA data for key change wake-up

  .DEFINE P_IOB_Data          0x7005;        // Write Data into the data register and read from IOB pad
  .DEFINE P_IOB_Buffer        0x7006;        // Write Data into buffer register and read from buffer register
  .DEFINE P_IOB_Dir           0x7007;        // Direction vector for IOB
  .DEFINE P_IOB_Attrib        0x7008;        // Attribute vector for IOB
  .DEFINE P_Watchdog_Clear    0x7012;        // Watchdog Reset  
  .DEFINE P_INT_CTRL		  0x7010;
  .DEFINE P_INT_CLEAR		  0x7011;
  
  .EXTERNAL _SET_ADDR; 
  .EXTERNAL _READ_DATA;
  .EXTERNAL _Key;
  .EXTERNAL _Time;
  
  .CODE
_IO_INIT:.PROC
  PUSH R1 TO [SP];
  //A口高八位同向输出(初值低电平),低八位悬浮输入。
  R1=0xFF00;
  [P_IOA_Dir]=R1;
  R1=0xFFFF;
  [P_IOA_Attrib]=R1;
  R1=0x0000;
  [P_IOA_Data]=R1;
  //B口同向输出;
  R1=0xFFF3; 
  [P_IOB_Dir]=R1;
  R1=0xFFFF;
  [P_IOB_Attrib]=R1;
  R1=0xFFEF; 
  [P_IOB_Data]=R1;  
  int off
  R1 = 0x0110; 				 
  [P_INT_CTRL] = r1; 
  int irq;
  POP R1 FROM [SP];
  RETF; 
  .ENDP
_WATCHDOG_CLEAR:.PROC
  PUSH R1 TO [SP];  
  R1=0x0001;
  [P_Watchdog_Clear]=R1;
  POP R1 FROM [SP];
  RETF;
  .ENDP; 
.TEXT	

_IRQ3:
   PUSH R1 TO [SP];  		     //压栈保护 
   R1 = [P_INT_CTRL];    
   test R1,0x0100   	         //比较是否为IRQ3_EXT1	 
   jnz L_IRQ3_Ext1			     //是,则转至对应程序段;     
   [P_INT_CLEAR] = r1 
   pop R1,R1 from [sp]   
   reti;
L_IRQ3_Ext1:
   R1=0x0000;
   PUSH R1,R1 TO [SP];
   CALL _SET_ADDR;
   POP R1,R1 FROM [SP];
   CALL _READ_DATA;
   [_Key]=R1;
   R1 = 0x0100 	     
   [P_INT_CLEAR] = R1 
   POP R1 FROM [sp]
   RETI;  
   
_IRQ4:
   push R1 to [sp]		     //压栈保护 
   r1 = [P_INT_CTRL]; 	    
   test r1,0x0010       	     //比较是否为IRQ3_EXT1	 
   jnz L_IRQ4			     //是,则转至对应程序段;    
   [P_INT_CLEAR] = r1 
   pop R1 from [sp]   
   reti
L_IRQ4:
   R1=[_Time];
   R1+=1;
   [_Time]=R1;
   R1=0x0010 	     
   [P_INT_CLEAR] = r1 
   pop R1 from [sp]
   RETI;

⌨️ 快捷键说明

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