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

📄 1.asm

📁 该程序是用C编写的
💻 ASM
字号:
.include hardware.inc
.EXTERNAL _Hour;
.EXTERNAL _Min;
.EXTERNAL _Sec;
.EXTERNAL _Flag;
.EXTERNAL _stoptag;
.EXTERNAL _year;
.EXTERNAL _month;
.EXTERNAL _day;
.EXTERNAL _i3;
.EXTERNAL _i5;
.EXTERNAL _keycode
.data
keytable:.dw 0x00ee,0x00de,0x00be,0x007e
         .dw 0x00ed,0x00dd,0x00bd,0x007d
         .dw 0x00eb,0x00db,0x00bb,0x007b
         .dw 0x00e7,0x00d7,0x00b7,0x0077
.PUBLIC _SystemInit
.code
_SystemInit:
     r1=0x07ff;           //IOB初始化
     [P_IOB_Dir]=r1;
     [P_IOB_Attrib]=r1;
     [P_IOB_Data]=r1;
     
     R1 = 0x000f;         //IOA初始化
     [P_IOA_Attrib] = R1;    
     [P_IOA_Dir] = R1;
     r1=0x00f0;
     [P_IOA_Data] = R1;
     
     int off 
     r1=0x0084;          //开IRQ5的2HZ.IRQ3的中断
     [P_INT_Ctrl]=r1;
     IRQ ON;
     RETI;
.text
  .PUBLIC _IRQ5
 _IRQ5:
     PUSH R1,R5 TO [SP]     //现场保护
     R1=0x0001;              //清看门狗
     [P_Watchdog_Clear]=R1;
     R1=0x0008;              //屏蔽4HZ中断
     TEST r1,[P_INT_Ctrl];
     JNZ L_IRQ5_4HZ;
 L_IRQ5_2HZ:
   r1=0x0004
   [P_INT_Clear]=r1
   r1=[_Flag]
   cmp r1,0
   je loop
   r1=0
   [_Flag]=r1
   pop r1,r5 from [sp]
   reti
 loop:
   r1=1
   [_i5]=r1
   [_Flag]=r1
     pop r1,r5 from [sp]
     reti
L_IRQ5_4HZ:
   [P_INT_Clear]=r1;
     POP R1,R5 FROM [SP];
     RETI;
     
.public _IRQ3
  _IRQ3:
      r2=0x0001
      [P_Watchdog_Clear]=r2;
    push r1,r4 to [sp]
      r1=0x0100
      test r1,[P_INT_Ctrl]
      jnz L_IRQ3_Ext1
      r1=0x0200
      test r1,[P_INT_Ctrl]
      jnz L_IRQ3_Ext2
    r1=0x0080; 
   [P_INT_Clear]=r1              
   call Key_scan
     R1=0x0001;              //清看门狗
     [P_Watchdog_Clear]=R1;
   POP R1,R4 FROM [SP];
   RETI;
     
L_IRQ3_Ext2:
      [P_INT_Clear]=r1
      reti
L_IRQ3_Ext1:
      [P_INT_Clear]=r1
      reti 
       
.PUBLIC  Key_scan
Key_scan:.proc
  // r1=0x0080;      
 //  [P_INT_Clear]=r1;
  
F_Key_Scan_A4: 
     r4=0x0000;  	    
    R2=0x000e;                        //扫描第一行
	[P_IOA_Data] = R2 ; 
	R1 = 0x00f0;    	   
    R1& =[P_IOA_Data];
	CMP R1,0x00f0;                    //是否该行有键按下
    JNZ   L_make_sure;  	        
F_Key_Scan_A5:
    R2=0x000d;                        //扫描第二行
	[P_IOA_Data] = R2;
	R1 = 0x00f0;	    	   
    R1& =[P_IOA_Data];
	CMP R1,0x00f0;                   //是否该行有键按下
    JNZ   L_make_sure;   
F_Key_Scan_A6:           
    R2=0x000b;                       //扫描第三行
	[P_IOA_Data] = R2;
	R1 = 0x00f0;	    	   
    R1& =[P_IOA_Data]; 
	CMP R1,0x00f0;                   //是否该行有键按下
    JNZ   L_make_sure;   
F_Key_Scan_A7:
	R2=0x0007;                       //扫描第四行
	[P_IOA_Data] = R2;
	R1 = 0x00f0;	    	   
    R1& =[P_IOA_Data];
	CMP R1,0x00f0;                  //是否该行有键按下
    JnZ  L_make_sure;

    R1=0x0001;              //清看门狗
    [P_Watchdog_Clear]=R1;
    r1=0x00f0
    [P_IOA_Data]=r1
    RETF
    
L_make_sure:                          // 去抖
     r3=r1;
     [P_IOA_Data] = R2;
     R1 = 0x00f0;	    	   
     R1& =[P_IOA_Data];
     cmp r1,r3;
     jne F_Key_Scan_A4
    r4+=1;
     cmp r4,900;
    jne  L_make_sure;
     r4=0x0000; 
     r1=r1|r2 ;
     
     
     bp=keytable
     r2=0
   getkeycodeloop:  
     r2+=1
     r3=[bp++]
     cmp r1,r3
     jne getkeycodeloop;
    [_keycode]=r2
    r2=1
    [_i3]=r2     
   
    r1=0x00f0
     [P_IOA_Data]=r1

     RETF
 .endp     

⌨️ 快捷键说明

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