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

📄 hwasm.asm

📁 3010红外遥控程序
💻 ASM
字号:
;版权所有  中国自动化资讯网(www.zidh.com) 逸飞(在您网上的用户名:xfyyf)
;编程思路:P3.2上的INT0中断每次有下降沿时则为一个数据数,
;并开通中断INT0延时800us后开始计数,一位位接收到来的数据
;当四个数据接收并之后则判断为哪个键按下!
      nobbuf equ 20h
      nob1 equ 31h;存放红外的四个码
      nob2 equ 32h
      nob3 equ 33h
      nobb equ 34h;红外码1个字节8位的计数器
      nobw equ 35h;红外码字节的计数器
      nobdip equ 40h
      keysign bit 21h.0;按键标志位
      org 0000h
      ajmp reset
      org 0003h
      ljmp int00
      org 000bh
      ljmp intT0
      org 0040h
reset:
     mov r1,#05
     mov r0,#nob1
 qn:
     mov @r0,#00
     inc r0
     djnz r1,qn 
     mov tmod,#01h
     setb ea
     setb it0
     setb ex0
start:
      call delay
      jnb keysign,nopresskey
      clr P3.3
      call delay
      call delay 
      call delay
      clr keysign      
      setb P3.3
nopresskey:
      setb ex0
      ajmp start
;********************************************************************
;      中断0子程序
;********************************************************************      
int00:
      push acc
      push psw
      clr ex0
      setb et0
      mov th0,#0fdh
      mov tl0,#1eh
      mov r1,#05
      mov r0,#nob1
 qn2:
     mov @r0,#00
     inc r0
     djnz r1,qn2     
      mov nobbuf,#00h
      mov r0,#nob1
      setb tr0
      pop psw
      pop acc
      reti

;********************************************************************
;      中断T0子程序
;********************************************************************      
intT0:
    push acc
    push psw
    mov th0,#0fdH          ;设定时值为800us
    mov tl0,#1eh 
    mov a,nobw
    cjne a,#03h,nextw   ;判断是否已接收4个字节,没有则转字节中位的接收
    mov nobw,#00h          ;已达4位则字节计数器清零,以下判断是哪个键按下
   clr tr0;关闭中断
    clr et0
    mov a,nob2
    cjne a,#55h,noaj
    mov a,nob3
    cjne a,#0abh,key2
    cpl p1.0
    setb keysign
noaj:
    Ljmp T0out
key2:
    mov a,nob3
    cjne a,#0ach,key3
    cpl p1.1
    setb keysign
    Ljmp T0out
key3:
    mov a,nob3
    cjne a,#0adh,key4
    cpl p1.2
    setb keysign
    Ljmp T0out
key4:
    mov a,nob3
    cjne a,#0b3h,key5
    cpl p1.3
    setb keysign
    Ljmp T0out
key5:
    mov a,nob3
    cjne a,#0b4h,key6
    cpl p1.4
    setb keysign
    Ljmp T0out
key6:
    mov a,nob3
    cjne a,#0b5h,key7
    cpl p1.5
    setb keysign
    Ljmp T0out
key7:
    mov a,nob3
    cjne a,#0cbh,key8
    cpl p1.6
    setb keysign
    Ljmp T0out
key8:
    mov a,nob3
    cjne a,#0aah,T0out
    cpl p1.7
    setb keysign
    Ljmp T0out
nextw:
    mov a,nobb
    cjne a,#08h,nextb  ;判断是否已接收8位,没有则转其它位的接收
    mov nobb,#00h
    mov a,nobw
    inc a
    mov nobw,a;已接收8位则转下一个字节
    mov @r0,nobbuf
    inc r0
    ajmp T0out
nextb:
    mov a,nobb
    inc a
    mov nobb,a
    clr c
    mov c,P3.2
    mov a,nobbuf
    rlc a
    mov nobbuf,a
    ajmp T0out
T0out:
    pop psw
    pop acc 
    reti
;********************************************************************
;      延时子程序600ms
;********************************************************************      
delay:      
      mov r6,#120
del1:  
      mov r7,#250
      djnz r7,$
      djnz r6,del1
      ret    
      end

⌨️ 快捷键说明

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