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

📄 irq3.asm

📁 基于凌阳单片机远程电话报警系统程序。
💻 ASM
字号:
.EXTERNAL _shuo,_password
//.EXTERNAL number1
.INCLUDE hardware.inc
.TEXT
.PUBLIC _IRQ3
_IRQ3:
   INT OFF
   PUSH R1,R5 TO [SP]
   R1=0x0000
   [0x06fb]=R1
   R1=0x0100
   TEST R1,[P_INT_Ctrl]
   JNZ L_Irq3_Ext1
   R1=0x0200
   TEST R1,[P_INT_Ctrl]
   JNZ L_Irq3_Ext2
 L_Irq3_Key:
 GOTO L_EXIT_INT;
 L_Irq3_Ext2:
 GOTO L_EXIT_INT;
 //--------------------------------
 L_Irq3_Ext1:
  R1=[0x06fe]               //计数      
  R1+=1
  [0x06fe]=R1
  CMP R1,0x0006
  JZ lp0
L_EXIT_INT:
    R1=0x0100
    [P_INT_Clear]=R1
    pop R1,R5 from [sp]
    INT IRQ
    RETI
//-----------------------------------    
lp0: R1=[P_IOB_Buffer]   
     R1|=0x0040               //摘机
     [P_IOB_Data]=R1
     CALL delay
     R1=0
     push R1 to [sp]
     CALL _shuo
     pop R1 from [sp]                //"请输入密码"
         
    R1=0x0100
    [P_INT_Clear]=R1
    R2=0x0710
lp1:  CALL sub1 
   [R2]=R1
   R2+=1
   R4=0x0001
   [P_Watchdog_Clear]=R4
   CMP R1,0x000c      //判断是否为#号
   JNZ lp1
 //-----------------------------------              
  R1=0x0700
  R2=0x0710
  R4=[0x06fa]
  
lp2: R4-=1            //校验密码
     JZ lp4 
     R3=R1
     R1=0x0001
   [P_Watchdog_Clear]=R1
     R1=R3   
     R3=[R1++]
     CMP R3,[R2++]
     JZ lp2
//----------------------------------------------     
lp3: R1=[P_IOB_Buffer] 
     R1&=0xffbf      //挂机
     [P_IOB_Data]=R1
GOTO  L_EXIT_INT
kong1: GOTO KONG1
kong2: GOTO KONG2
//-------------------------
lp4: R1=13
     push R1 to [sp]
     CALL _shuo   //控制电器请按1,修改密码请按2
     pop R1 from [sp]
     CALL sub1
     CMP R1,0x0001
     JZ KONG
     CALL _password  
     GOTO SERVICE 
KONG: R1=1
     push R1 to [sp]
     CALL _shuo
     pop R1 from [sp]      //"请选择电器"
     CALL sub1
   CMP R1,0x0001
   JZ kong1
   CMP R1,0x0002
   JZ kong2
  
KONG3:R1=[P_IOB_Buffer]              //控制家电3
     TEST R1,0x0080
     JZ GUAN3
       R1=2
   push R1 to [sp]
    CALL _shuo 
     pop R1 from [sp]  //"电器处于开启状态"
    CALL delay
      R1=5
   push R1 to [sp]
    CALL _shuo    //"关闭请按2"
     pop R1 from [sp]
    CALL delay
      R1=10
   push R1 to [sp]
    CALL _shuo    //"保持请按#"
     pop R1 from [sp]
    CALL sub1
    CMP R1,0x000c
    JZ service3
   R1=[P_IOB_Buffer]
   R1&=0xff7f
   [P_IOB_Data]=R1
     R1=7
   push R1 to [sp]
   CALL _shuo   //"电器已关闭"  
 pop R1 from [sp]
 service3:   GOTO SERVICE
 GUAN3:
   R1=3
   push R1 to [sp]
    CALL _shuo   //"电器处于关闭状态"
     pop R1 from [sp]
    CALL delay
      R1=4
   push R1 to [sp]
    CALL _shuo    //"开启请按1"
     pop R1 from [sp]
    CALL delay
      R1=10
   push R1 to [sp]
    CALL _shuo    //"保持请按#"
     pop R1 from [sp]
    CALL sub1
    CMP R1,0x000c
    JZ service3
    R1=[P_IOB_Buffer]
   R1|=0x0080
   [P_IOB_Data]=R1
     R1=6
   push R1 to [sp]
   CALL _shuo   //"电器已开启"
    pop R1 from [sp]
   GOTO SERVICE    
 KONG2:R1=[P_IOB_Buffer]          //控制家电2
     TEST R1,0x0020
     JZ GUAN2
       R1=2
   push R1 to [sp]
   CALL _shuo  //"电器处于开启状态"
    pop R1 from [sp]
    CALL delay
      R1=5
   push R1 to [sp]
    CALL _shuo    //"关闭请按2"
     pop R1 from [sp]
    CALL delay
      R1=10
   push R1 to [sp]
    CALL _shuo    //"保持请按#"
    pop R1 from [sp]
    CALL sub1
    CMP R1,0x000c
    JZ service2
   R1=[P_IOB_Buffer]
   R1&=0xffdf
   [P_IOB_Data]=R1
     R1=7
   push R1 to [sp]
   CALL _shuo   //"电器已关闭"   
  pop R1 from [sp]
 service2:   GOTO SERVICE
 GUAN2:
   R1=3
   push R1 to [sp]
    CALL _shuo   //"电器处于关闭状态"
     pop R1 from [sp]
    CALL delay
      R1=4
   push R1 to [sp]
    CALL _shuo    //"开启请按1"
     pop R1 from [sp]
    CALL delay
      R1=10
   push R1 to [sp]
    CALL _shuo    //"保持请按#"
     pop R1 from [sp]
    CALL sub1
    CMP R1,0x000c
    JZ service2   
    R1=[P_IOB_Buffer]
   R1|=0x0020
   [P_IOB_Data]=R1
     R1=6
   push R1 to [sp]
   CALL _shuo   //"电器已开启"
    pop R1 from [sp]
    GOTO SERVICE     
KONG1:R1=[P_IOB_Buffer]
     TEST R1,0x0010
     JZ GUAN1
       R1=2
   push R1 to [sp]
    CALL _shuo   //"电器处于开启状态"
     pop R1 from [sp]
    CALL delay
      R1=5
   push R1 to [sp]
    CALL _shuo    //"关闭请按2"
     pop R1 from [sp]
    CALL delay
      R1=10
   push R1 to [sp]
    CALL _shuo    //"保持请按#"
     pop R1 from [sp]
    CALL sub1
    CMP R1,0x000c
    JZ service1
   R1=[P_IOB_Buffer]
   R1&=0xffef
   [P_IOB_Data]=R1
     R1=7
   push R1 to [sp]
   CALL _shuo   //"电器已关闭"
   pop R1 from [sp]
  service1:  GOTO SERVICE
 GUAN1:
     R1=3
   push R1 to [sp]
    CALL _shuo   //"电器处于关闭状态"
     pop R1 from [sp]
    CALL delay
      R1=4
   push R1 to [sp]
    CALL _shuo    //"开启请按1"
     pop R1 from [sp]
    CALL delay
      R1=10
   push R1 to [sp]
    CALL _shuo    //"保持按#号键"
     pop R1 from [sp]
    CALL sub1
    CMP R1,0x000c
    JZ service1   
    R1=[P_IOB_Buffer]
   R1|=0x0010
   [P_IOB_Data]=R1
     R1=6
   push R1 to [sp]
   CALL _shuo   //"电器已开启"
     pop R1 from [sp]
    GOTO SERVICE
SERVICE:
  CALL delay
    R1=9
   push R1 to [sp]
  CALL _shuo        //"继续服务按*,退出按#"
   pop R1 from [sp]
  CALL sub1
  CMP R1,0x000b
  JZ lpp4
    R1=8
   push R1 to [sp]
 CALL _shuo  //"谢谢使用,再见"   
   pop R1 from [sp]
  GOTO lp3  
lpp4: GOTO lp4
lp6: 
  R1=[0x06fd]
  R1+=1
  [0x06fd]=R1
  CMP R1,0x00ff
  JNZ lp7
  GOTO lp3
sub1:.PROC                  //读按键子程序
  
  R1=0x00f0
  [P_IOA_Dir]=R1
  [P_IOA_Attrib]=R1 
  R1=0x004f
 [P_IOA_Data]=R1
 lp5:
 R1=0x0000
 [0x06fc]=R1
 [0x06fd]=R1
 lp8: R1=[0x06fc]
  R1+=1
  [0x06fc]=R1
  CMP R1,0xffff
  JZ lp6
   
 lp7: R1=0x003f                //读状态寄存器
  [P_IOA_Data]=R1
   R1=0x00bf  
 [P_IOA_Data]=R1
  R1=[P_IOA_Data]
 R3=0x003f                
 [P_IOA_Data]=R3
  R4=0x0001
  [P_Watchdog_Clear]=R4 
  R3=0x004f
   [P_IOA_Data]=R3
  TEST R1,0x0004
 JZ lp8
  R1=0x006f
  [P_IOA_Data]=R1
   R1=0x001f                //读数据
   [P_IOA_Data]=R1
 R1=0x009f  
 [P_IOA_Data]=R1
  R1=[P_IOA_Data]
  R3=0x001f
  [P_IOA_Data]=R3
  R3=0x006f
  [P_IOA_Data]=R3
  R1&=0x000f
  PUSH R1,R5 TO [SP]
  CALL delay2
  POP R1,R5 FROM [SP]
  RETF
  .ENDP
delay:.PROC
   LOOP:
   R1=400
 L_LOOP1:
   R2=1248
   nop
   nop
 L_LOOP2:
   R3=0x0001
   [P_Watchdog_Clear]=R3
   R2-=1
   JNZ L_LOOP2
   R1-=1
   JNZ L_LOOP1
 RETF
 .ENDP    
delay2:.PROC
   loop:
   R1=20
 L_loop1:
   R2=1248
   nop
   nop
 L_loop2:
   R3=0x0001
   [P_Watchdog_Clear]=R3
   R2-=1
   JNZ L_loop2
   R1-=1
   JNZ L_loop1
 RETF
 .ENDP      

⌨️ 快捷键说明

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