历史上的今天
返回首页

历史上的今天

今天是:2025年03月08日(星期六)

2018年03月08日 | 采用stc89c52单片机的红外学习型遥控器汇编代码

2018-03-08 来源:eefocus

很详细的红外学习型遥控器,储存在24c64中的汇编子程序,在你自己的设计中只要修改一下IO调用它就可以了,是本人的工程验证能学习市面常用的绝大部分红外线遥控器

    用的是stc89c52单片机,下面是汇编代码:

    ;**********************************
;---------------------AT24C64 CODE-------------------------      
;==========================================================
ICSTART:          ;I2C 开始
      SETB  SDA
      NOP
      NOP
      NOP
      NOP
      SETB  SCK
      NOP
      NOP
      NOP
      NOP
      CLR  SDA
      NOP
      NOP
      NOP
      NOP
      CLR  SCK
      RET 
;==========================================================
ICSTOP:          ;I2C 结束
      CLR  SDA
      NOP
      NOP
      NOP
      NOP
      CLR  SCK
      NOP
      NOP
      NOP
      NOP
      SETB  SCK
      NOP
      NOP
      NOP
      NOP
      SETB  SDA
      RET
;==========================================================
ICACK:          ;I2C 应答 
      CLR  SDA
      NOP
      NOP
      NOP
      NOP
      SETB  SCK
      NOP
      NOP
      NOP
      NOP
      CLR  SCK
      RET
;==========================================================
NOACK:          ;I2C 无应答
      SETB  SDA
      NOP
      NOP
      NOP
      NOP
      SETB  SCK
      NOP
      NOP
      NOP
      NOP
      CLR  SCK
      RET
;==========================================================
ICREADBIT:          ;I2C 读取一位
      SETB  SDA
      NOP
      NOP
      NOP
      NOP
      SETB  SCK
      NOP
      NOP
      NOP
      NOP
      MOV  C,SDA
      CLR  SCK      
       RET        
 ;----------------------------------------------------------
ICREADACK:
      MOV  R7,#200
      SETB  SDA
      NOP
      NOP
      NOP
      NOP
      SETB  SCK
      NOP
      NOP
      NOP
      NOP 
    READACKS:
      JNB  SDA,ACKEND
      DJNZ  R7,READACKS
      SETB  C
      CLR  SCK
      RET
    ACKEND:
      CLR  C
      CLR  SCK
      RET
    
;==========================================================
ICREADBYTE:          ;I2C 读取一个字节
      MOV  R7,#8      
 READLOOP:
      LCALL ICREADBIT
      RLC  A
      DJNZ  R7,READLOOP
      MOV  R7,A
      RET
;==========================================================
ICWRITEBIT:          ;I2C 写一位      
       MOV  SDA,C
      NOP
      NOP
      NOP
      NOP
      SETB  SCK
      NOP
      NOP
      NOP
      NOP
      CLR  SCK      
       RET 
;==========================================================
ICWRITEBYTE:          ;I2C 写一个字节
      MOV  A,R7
      MOV  R7,#8
  WRITELOOP:
      RLC  A
      LCALL ICWRITEBIT
      DJNZ  R7,WRITELOOP
      RET
;==========================================================
READAT:
      MOV  A,R7                      ;计算I2C地址 
      MOV  B,#208 ;144
      MUL  AB
      MOV  R2,B
      MOV  R3,A       

    
      LCALL ICSTART        ;I2C  数据读入缓冲区
      MOV  R7,#0A0H        ;R2R3 I2C地址
      LCALL ICWRITEBYTE        ;R0  缓冲区地址
      LCALL ICREADACK        ;R1  数据个数
      JNC  RACKEND
      RET
;
 RACKEND:
      MOV  A,R2
      MOV  R7,A
      LCALL ICWRITEBYTE
      LCALL ICREADACK
      MOV  A,R3
      MOV  R7,A
      LCALL ICWRITEBYTE
      LCALL ICREADACK

          LCALL ICSTART
      MOV  R7,#0A1H
      LCALL ICWRITEBYTE
      LCALL ICREADACK
      MOV  R0,#LRDBUF
      MOV  R1,#208 ;144

      READDATAS:
      LCALL ICREADBYTE
      LCALL ICACK
      MOV  @R0,A
      INC  R0
      DJNZ  R1,READDATAS
      LCALL NOACK
      LCALL ICSTOP
      RET

    ;==========================================================
WRITEAT:          ;缓冲区数据写入 I2C

          MOV  A,R7                      ;计算I2C地址 
      MOV  B,#208 ;;144
      MUL  AB
      MOV  R2,B
      MOV  R3,A
      MOV  R5,#13 ;9    13*16=208
      
       MOV  R0,#LRDBUF

      ICWRITENEXT:  
       LCALL ICSTART
      MOV  R7,#0A0H        
       LCALL ICWRITEBYTE
      LCALL ICREADACK
      JNC  WACKEND
;
;
  WACKEND:
      MOV  A,R2
      MOV  R7,A
      LCALL ICWRITEBYTE
      LCALL ICREADACK
      MOV  A,R3
      MOV  R7,A
      LCALL ICWRITEBYTE
      LCALL ICREADACK

    
      MOV  R1,#16            
   WRITEDATAS:
      MOV  A,@R0
      INC  R0      
      MOV  R7,A
      LCALL ICWRITEBYTE
      LCALL ICREADACK      
       DJNZ  R1,WRITEDATAS
      LCALL ICSTOP

    
      MOV  R7,#250
    DELAY_D:
      MOV  R6,#20
      DJNZ  R6,$
      DJNZ  R7,DELAY_D

          MOV  A,R3
      ADD  A,#16
      MOV  R3,A
      MOV  A,R2
      ADDC  A,#0
      MOV  R2,A

    
      DJNZ  R5,ICWRITENEXT
      RET      
 ;*****************************************************************

    ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
LRDREAD: 
                                      ;红外代码读取
            MOV      R0,#LRDBUF        ;代码缓冲区清零
            MOV      R1,#208  ;144
            CLR      A
CLRLRDBUF:
            MOV      @R0,A
            INC      R0
            DJNZ      R1,CLRLRDBUF
            MOV      R0,#LRDBUF
            SETB      LRDR
LRDTEST:                        
          SETB      TR2        
           SETB      ES          ;红外代码起始检测
          JB        RI,LLOOP              ;这里是检测有键按下时。。。。。。
          CLR        TR2
          JNB        LRDR,READSTART      
          JB        HWXX,LRDTEST          ;红外学习标志位
          LJMP      LLLOOP
LLOOP:    ;
          CLR    RI
          MOV    A,SBUF
          MOV    R0,#250
          MOV    R1,#250
LP4:      JB      RI,LP3
          DJNZ    R0,LP4
          DJNZ    R1,LP4
          LJMP    LRDTEST
LP3:      CLR    RI
          CLR    ES
          MOV    A,SBUF
          MOV    A,#00H
          
 LP2:      
           CLR    HONGWAI                ;红外按钮标志位
          CLR    P3.3
          CLR    HWXX
          MOV    SBUF,#37H
          JNB    TI,$
          CLR    TI
          DEC    SP
          DEC    SP
          LJMP    LOOP 
LLLOOP:    RET 
                        
;--------------------------------------
READSTART:
    CLR  EA
    ;SETB P0.6                          
    MOV  TH1,#0
    MOV  TL1,#12        
     SETB LRDR
;--------------------------------------
READLOOP_S:
    SETB TR1
    CLR  TF1
TEST_LRDR:
    MOV  A,TH1
    JB  TF1,LRDOVER
    JNB  LRDR,TEST_LRDR
    CLR  TR1          ;

        INC  R0
    MOV  A,TL1
    MOV  @R0,A
    INC  R0
    MOV  A,TH1
    MOV  @R0,A
    INC  R1          ;红外线时间    1
;--------------------------------------
;--------------------------------------
    MOV  TH1,#0
    MOV  TL1,#12
    SETB TR1
    CLR  TF1
    
  TESTLRD:
    MOV  A,TH1
    JB  TF1,LRDOVER
    JB  LRDR,TESTLRD   

        CLR  TR1          
    INC  R0
    MOV  A,TL1
    MOV  @R0,A
    INC  R0
    MOV  A,TH1
    MOV  @R0,A          ;代码            2
    INC  R1 
;************************************** 
  
  TEST_DATA: 
    MOV  TH1,#0
    MOV  TL1,#12
    SETB TR1 
    CLR  TF1       

        MOV  A,R1
    SUBB A,#101  ;44H
    JC  READLOOP_S        ;下一代码    
;--------------------------------------
 LRDOVER:
    CLR  TR1
    SETB EA
    MOV  A,R1
    MOV  LRDBUF,A                      ;代码个数缓冲
    RET         
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
LRD1SEND:
    CLR  EA
    MOV  R1,LRDBUF
    MOV  R0,#LRDBUF 
    MOV  A,R1
    JZ    LRD_END
    SUBB  A,#101  ;72
    JNC  LRD_END
    CLR  EA
    MOV  TH1,#0

     LRD1OUTLOOP:
    CLR  TR1
    INC  R0
    MOV  A,@R0
    CPL  A
    MOV  TL1,A    
     INC  R0
    MOV  A,@R0
    CPL  A
    MOV  TH1,A 
    SETB  TR1          
    CLR  TF1
;--------------------------------------
  LRD1CONT:
    CPL  LRD1
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP                                ;发送红外波形  38K Hz 
    JNB  TF1,LRD1CONT              ;红外前导代码                
     CLR  LRD1    
     DJNZ  R1,SEND_DATA
    LJMP  LRD_END

     SEND_DATA:
;--------------------------------------
 
    CLR  TR1
    INC  R0
    MOV  A,@R0
    CPL  A
    MOV  TL1,A    
    INC  R0
    MOV  A,@R0
    CPL  A
    MOV  TH1,A
    SETB  TR1
    CLR  TF1
    DJNZ  R1,OUT_1_CODE

    
 LRD_END:
    CLR  TR1
    CLR  TF1
    SETB  EA
    RET
 OUT_1_CODE:
    JNB  TF1,$          ;红外代码
;--------------------------------------
    LJMP  LRD1OUTLOOP 
    RET          ;取下一个代码
;==========================================================
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

    
DELAY:
      MOV  R7,#200
DEL_L:
      MOV  R6,#30
      DJNZ  R6,$
      DJNZ  R7,DEL_L
      RET
      
DELY_2:
            MOV    R7,#250
DEL_2:        
           LJMP    DELAY
          DJNZ    R7,DEL_2
          MOV    R7,#250
DEL_3:    LJMP    DEL_2
          DJNZ    R7,DEL_3
          RET


推荐阅读

史海拾趣

Foxconn_Optical_Interconnect_Technologies__Inc.公司的发展小趣事

Foxconn Optical Interconnect Technologies Inc. 的五个发展故事

故事一:创立与初步发展

Foxconn Optical Interconnect Technologies Inc.(简称FIT),作为鸿海精密工业股份有限公司(Foxconn,又称富士康)旗下的子公司,其发展历程可以追溯到富士康的崛起。富士康由郭台铭于1974年在台湾创立,起初主要生产塑料零件。随着电子行业的蓬勃发展,富士康迅速转型,开始涉足电子制造服务(EMS)。在这一背景下,FIT应运而生,专注于光机电整合连接器、天线、声学元件等产品的研发与生产,逐渐在电子行业中崭露头角。

故事二:技术突破与全球化布局

FIT凭借其在光电互连技术领域的不断创新,逐步确立了在全球市场的领先地位。公司通过持续加大研发投入,成功开发出一系列高性能、高可靠性的产品,广泛应用于电脑、通讯、消费电子等多个领域。同时,FIT积极实施全球化战略,在亚洲、北美、南美和欧洲等地设立生产基地和研发中心,形成了覆盖全球的生产和服务网络。这一布局不仅提升了公司的市场竞争力,也为其未来的发展奠定了坚实基础。

故事三:与富圣光电的合作

FIT与富圣光电科技(昆山)有限公司的合作是其发展历程中的一个重要里程碑。富圣光电作为富士康旗下专注于光电科技领域的企业,与FIT在技术研发、产品生产等方面展开了深度合作。通过资源共享和优势互补,双方共同推动了光电技术的发展和应用。目前,FIT持有富圣光电50%的股份,这一合作不仅增强了双方在光电市场的竞争力,也为双方带来了显著的经济效益。

故事四:收购夏普与技术整合

2016年,富士康(鸿海精密工业股份有限公司)成功收购日本夏普公司,这一举动对FIT的发展产生了深远影响。夏普在显示技术、半导体等领域拥有强大的技术实力和市场地位,而FIT则擅长光电互连技术的研发和生产。通过此次收购,FIT得以将夏普的先进技术与自身优势相结合,进一步提升了在光电领域的综合竞争力。同时,这也为FIT拓展国际市场、提升品牌影响力提供了有力支持。

故事五:新能源汽车领域的探索

近年来,随着新能源汽车市场的快速崛起,FIT也开始将目光投向这一新兴领域。公司利用自身在光电技术方面的优势,积极研发新能源汽车充电系统、光电传感器等关键零部件。通过不断的技术创新和市场拓展,FIT在新能源汽车领域取得了初步成果。这一领域的探索不仅为公司带来了新的增长点,也为其在光电技术领域的持续发展注入了新的动力。

Anvo-Systems公司的发展小趣事

Anvo-Systems公司自成立以来,一直致力于电子技术的研发与创新。某年,公司成功研发出一款具有高效能源利用率的智能家居控制系统,该产品迅速在市场上获得了广泛关注。通过不断优化产品性能和用户体验,Anvo-Systems逐步扩大了市场份额,并与多家知名家电品牌建立了合作关系。这一技术突破不仅提升了公司的知名度,也为公司的持续发展奠定了坚实基础。

Esc Electronics Corp公司的发展小趣事

面对电子行业技术的快速迭代和市场竞争的加剧,Esc始终保持创新驱动的发展策略。公司不断加大对研发创新的投入力度,推动产品升级和产业升级。通过引入新技术、新工艺和新材料,Esc成功开发出一系列具有竞争力的新产品,并在市场上取得了显著的成绩。同时,公司还积极参与行业标准的制定和推广工作,推动整个电子行业的进步和发展。

EHC(ELECTRONICHARDWARE)公司的发展小趣事

面对日益全球化的市场环境,EHC公司积极实施国际化战略。公司通过与国外知名企业的合作,引进先进的技术和管理经验,不断提升自身的竞争力。同时,EHC公司还积极参加国际展会和论坛,拓展海外市场。经过多年的努力,EHC公司的产品已经成功打入国际市场,并在多个国家和地区建立了稳定的销售渠道。

Asia Pacific Microsystems Inc公司的发展小趣事

随着电子行业的快速发展,APM意识到只有不断创新才能在市场中立足。于是,公司加大了对研发的投入,积极引进高端人才,并与多所高校和研究机构建立了合作关系。经过几年的努力,APM成功研发出了一款具有自主知识产权的高性能模拟芯片,填补了国内市场的空白。这款芯片在信号处理、通信等领域具有广泛应用前景,为APM带来了可观的收益。

Cliff Electronic Components公司的发展小趣事

随着电子行业的快速发展,APM意识到只有不断创新才能在市场中立足。于是,公司加大了对研发的投入,积极引进高端人才,并与多所高校和研究机构建立了合作关系。经过几年的努力,APM成功研发出了一款具有自主知识产权的高性能模拟芯片,填补了国内市场的空白。这款芯片在信号处理、通信等领域具有广泛应用前景,为APM带来了可观的收益。

问答坊 | AI 解惑

哪有mp3方面的开源项目?我想参加

哪有mp3方面的开源项目?我想参加 avr 或者 arm方面的都行…

查看全部问答>

三社整流模块

系列功率模块资料…

查看全部问答>

cepc上串口不能发送数据

一. 在X86的目标机上能正常运行Createfile打开com1,但是用writefile发送数据失败.通过GetLastError()获得错误好1359. 二. 在该目标机器上,只能打开com3,其他的com1,com2,com4,com5都是Createfile失败.通过调试发现Com1用来wince作为调试信息输出.…

查看全部问答>

请大侠们帮忙推荐推荐2410,2440板子的供应商,谢谢

请大侠们帮忙推荐推荐2410,2440板子的供应商,谢谢…

查看全部问答>

编写c的时候,遇到一个小问题,郁闷,高手指点

long int i=32132121; void show_shuzi() {   if (i>99999999) return;   wei[7]=i/10000000;   i=i-wei[7]*10000000;      wei[6]=i/1000000;   i=i-wei[6]*1000000;   ...…

查看全部问答>

秀秀联合科技送来的VS1053B解码芯片

      大家比较熟悉的应该是VS1003吧,这一款比较新而且比较强大。在官方网看了一下有样品申请就申请了,联合科技的销售经理直接从香港给我送样品来了,本来说要送两片的,我说要5片,他就送5片来了。和我聊了个把小时感 ...…

查看全部问答>

请问msp430F1232如何产生13.56Mhz的频率

请问msp430F1232如何产生13.56Mhz的频率 各位大侠,如何通过430单片机的引脚输出13.56Mhz的频率 谢谢!主要作用是想实现MF1卡检测功能,在平常无卡时低功耗待机每秒检测2次,有卡来到时可以通过430检测到卡片到来, 然后启动射频芯片RC531或TRF7 ...…

查看全部问答>

详说嵌入式开发分类

       嵌入式技术已经无处不在,从随身携带的mp3、语言复读机、手机、PDA到家庭之中的智能电视、智能冰箱、机顶盒,再到工业生产、娱乐中的机器人,无不采用嵌入式技术。各大跨国公司及国内家电巨头如INTEL、TI、SO ...…

查看全部问答>

单片机音乐频谱显示

我想用单片机做一个64*32LED音乐频谱显示器,我是初学者,求各位指教,跪求啊.能附上原理图,硬件图和材料单最好 ,还有程序,我真的想学,求教,,如果可以的话发我邮箱,996422644@qq.com,感激不尽       &nb ...…

查看全部问答>