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

📄 keyled.s

📁 440B 环境ADS 1.2包括很多实验代码
💻 S
字号:
SBRDR  EQU 0X1D14008   ;SIO band rate prescaler register
SIOCON EQU 0X1D14000   ;SIO control register
PDATB  EQU 0X1D2000C   ;the data register for port B
I_ISPC EQU 0X1E00024   ;IRQ interrupt service claer register
SIODAT EQU 0X1D14004   ;SIO data register
INTPND EQU 0X1E00004   ;indicates the interrupt request status
SIOSTART EQU 0X08
PDATF EQU 0X1D20038
PDATG EQU 0x1d20044

;**************************************************************************
;在zlg_enable和zlg_disable 期间不要使用R0和R1,他们被用来保存SBRDR和SIOCON*
;**************************************************************************

   MACRO
$label1 zlg_enable $PRE1   ;zlg7289芯片enable
$label1     
   LDR R0,=SBRDR           ;R0保存变量用
   LDR R1,=SIOCON          ;R1保存变量用
   LDR R2,[R0]
   MOV R0,R2               ;SBRDR保存到R0中
   LDR R2,[R1]
   MOV R1,R2               ;SIOCON保存到R1中
      
   MOV R3,#0X31
   LDR R2,=SIOCON          ;收发模式,SIO中断模式
   STR  R3,[R2]
   
   MOV R3,#0XFF
   LDR R2,=SBRDR           ;波特率
   STR R3,[R2] 
   
   LDR R2,=PDATB           ;ZLG7289片选
   LDR R3,=$PRE1          
   LDR R4,[R2]
   MVN R5,R3               ;R5:=NOT R3
   AND R4,R4,R5            ;R4:=R4 AND R5
   STR R4,[R2]
   MEND
   
   MACRO    
$label2  sendsiodata  $PRE2  ;SIO发送数据
$label2   
   LDR R2,=I_ISPC
   MOV R3,#0X10
   STR R3,[R2]
   
   LDR R2,=SIODAT          ;向SIO数据寄存器中存数据
   ;LDR R3,=$PRE2 
   MOV R3,$PRE2         
   STR R3,[R2]        
   
   LDR R2,=SIOCON
   LDR R3,=SIOSTART
   LDR R4,[R2]
   ORR R5,R4,R3
   STR R5,[R2]
   
1  LDR R4,=INTPND
   LDR R5,[R4]
   MOV R6,#0X10
   AND R5,R5,R6
   CMP R5,#0X10
   BNE %b1
   
   LDR R2,=I_ISPC
   MOV R3,#0X10
   STR R3,[R2]
   MEND
   
   MACRO
$lable3  zlg_disable                ;ZLG7289芯片DISABLE
$lable3    
   LDR R2,=PDATB                    
   LDR R4,[R2]
   MOV R3,#0X20
   ORR R4,R4,R3
   STR R4,[R2]
   LDR R2,=SBRDR
   STR R0,[R2]
   LDR R2,=SIOCON
   STR R1,[R2] 
   MEND  
   
   MACRO
$label4 timer $outside, $inside     ;延时
$label4   
       MOV R2,#0                    
REPEAT ADD R2,R2,#1
       CMP R2,#$outside          
       BNE NEXT1
       B   DELAYOVER
NEXT1  MOV R3,#0  
NEXT2  ADD R3,R3,#1
       CMP R3,#$inside           
       BNE NEXT2 
       B   REPEAT    
DELAYOVER 
  MEND
             
   AREA receivedisplay,code,readonly
   export keyled
keyled                              ;由C跳入汇编的入口
   
START            
CHECK LDR R2,=PDATG                 ;查询键盘有无按键按下动作
      LDR R3,[R2] 
      AND R3,R3,#0X10
      CMP R3,#0X10
      BEQ CHECK      
   
KEY_ZLGENABLE zlg_enable 0X20 
READKEY sendsiodata #0X15           ;向ZLG7289发出读键盘数据指令

      LDR R2,=PDATF                 ;SIO准备接收从ZLG7289来的数据
      LDR R5,[R2]
      MOV R4,#0X4
      ORR R5,R5,R4
      STR R5,[R2]
RECEIVE  sendsiodata #0X0           ;接收ZLG7289发出的按下的键盘数据
      LDR R2,=PDATF                 ;SIO接收关闭
      LDR R3,[R2]  
      AND R3,R3,#0XB
      STR R3,[R2]  
      
      LDR R2,=SIODAT
      LDR R7,[R2]                   ;KEY存在R7中
KEY_ZLGDISAB  zlg_disable            

        MOV R3,#0                   ;延时1
REPEAT1 ADD R3,R3,#1
        CMP R3,#40                   
        BNE NEXT11
        B   DELAYOVER1
NEXT11  MOV R4,#0  
NEXT22  ADD R4,R4,#1
        CMP R4,#100                 
        BNE NEXT22 
        B   REPEAT1    
DELAYOVER1


ZLGENABLE zlg_enable 0X20    
SENDINSTR sendsiodata #0X80         ;发送显示位命令
   

   LDR R9,=KEYBOARD                 ;将键盘表格的地址放入R9中
   
   LDRB R8,[R7,R9]                  ;查表找出被按下键盘对应的键值
passpre sendsiodata R8              ;发送显示位数据

   
;SENDHIDE sendsiodata #0X98    		;消隐控制指令
;SENDSIG  sendsiodata #0X1          ;仅个位显示

ZLGDISAB  zlg_disable 
DELAYTIME timer 400, 400            ;延时2
   B START
KEYBOARD DCB 0X7,0X4,0X1,0X0,0XA,0X0,0X0,0X0,0X8,0X5,0X2,0X0,0XA,\
             0X0,0X0,0X0,0X9,0X6,0X3,0XA,0XA,0XA,0X0,0X0,0XA,0X0,0XA  
   END
   

⌨️ 快捷键说明

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