历史上的今天
返回首页

历史上的今天

今天是:2025年01月06日(星期一)

正在发生

2018年01月06日 | AT89C52超声波测距器

2018-01-06 来源:eefocus

AT89C52超声波测距器

;测距范围7CM-11M,堆栈在4FH以上,20H用于标志 
;显示缓冲单元在40H-43H,使用内存44H、45H、46H用于计算距离 

              VOUT     EQU     P1.0    ; 红外脉冲输出端口


;******************************************** 
;*             中断入口程序                 * 
;******************************************** 

              ORG 0000H 
                  LJMP      START 
              ORG 0003H 
                  LJMP      PINT0 
              ORG 000BH 
                  LJMP      INTT0 
              ORG 0013H 
                  RETI 
              ORG 001BH 
                  LJMP      INTT1 
              ORG 0023H 
                  RETI 
              ORG 002BH 
                   RETI      

;******************************************** 
;*               主 程 序                   * 
;******************************************** 

            START: MOV     SP,#4FH 
                   MOV     R0,#40H     ;40H-43H为显示数据存放单元(40H为最高位) 
                   MOV     R7,#0BH 
       CLEARDISP:  MOV     @R0,#00H 
                   INC     R0 
                   DJNZ    R7,CLEARDISP 
                   MOV     20H,#00H 
                   MOV     TMOD,#21H     ;T1为8位自动重装模式,T0为16位定时器 
                   MOV     TH0,#00H      ;65毫秒初值 
                   MOV     TL0,#00H 
                   MOV     TH1,#0F2H     ;40KHz初值 
                   MOV     TL1,#0F2H 
                   MOV     P0,#0FFH 
                   MOV     P1,#0FFH 
                   MOV     P2,#0FFH 
                   MOV     P3,#0FFH 
                   MOV     R4,#04H       ;超声波肪冲个数控制(为赋值的一半) 
                   SETB    PX0 
                   SETB    ET0 
                   SETB    EA 
                   SETB    TR0           ;开启测距定时器 
            start1: LCALL  DISPLAY 
                    JNB    00H,START1    ;收到反射信号时标志位为1 
                    CLR    EA 
                    LCALL  WORK          ;计算距离子程序 
                    SETB   EA 
                    CLR    00H 
                    SETB   TR0          ;重新开启测距定时器 
                    MOV    R2,#64H      ;测量间隔控制(约4*100=400MS) 
              LOOP: LCALL  DISPLAY 
                    DJNZ   R2,LOOP 
                    SJMP   Start1 

;**************************************************** 
;*                    中断程序*                     * 
;**************************************************** 
;T0中断,65毫秒中断一次 
INTT0:          CLR     EA 
                CLR     TR0 
                MOV     TH0,#00H 
                MOV     TL0,#00H 
                SETB    ET1 
                SETB    EA 
                SETB    TR0       ;启动计数器T0,用以计算超声来回时间 
                SETB    TR1       ;开启发超声波用定时器T1 
OUT:            RETI 
;T1中断,发超声波用 
INTT1:          CPL     VOUT 
                DJNZ    R4,RETIOUT 
                CLR     TR1        ;超声波发送完毕,关T1 
                CLR     ET1        ; 
                MOV     R4,#04H 
                SETB    EX0        ;开启接收回波中断 
RETIOUT:        RETI 
;外中断0,收到回波时进入 
PINT0:          CLR     TR0        ;关计数器 
                CLR     TR1 
              CLR     ET1 
                CLR     EA         ; 
                CLR     EX0        ; 
                MOV     44H,TL0    ;将计数值移入处理单元 
                MOV     45H,TH0    ; 
                SETB    00H        ;接收成功标志 
                RETI 

;**************************************************** 
;*                    显示程序                      * 
;**************************************************** 
; 40H为最高位,43H为最低位,先扫描高位 
          DISPLAY: MOV   R1,#40H;G 
                   MOV   R5,#0F7H;G 
             PLAY: MOV   A,R5 
                   MOV   P0,#0FFH 
                   MOV   P2,A 
                   MOV   A,@R1 
                   MOV   DPTR,#TAB 
                   MOVC  A,@A+DPTR 
                   MOV   P0,A 
                   LCALL DL1MS 
                   INC   R1 
                   MOV   A,R5 
                   JNB    ACC.0,ENDOUT;G 
                   RR    A 
                   MOV   R5,A 
                   AJMP  PLAY 
           ENDOUT: MOV   P2,#0FFH 
                   MOV   P0,#0FFH 
                   RET 

            TAB:   DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,88H,0BFH 
;共阳段码表            "0" "1"  "2"   "3"  "4" "5""6"  "7" "8" "9" "不亮""A""-" 


;**************************************************** 
;*                    延时程序                      * 
;**************************************************** 

             DL1MS: MOV    R6,#14H 
             DL1:   MOV    R7,#19H 
             DL2:   DJNZ   R7,DL2 
                    DJNZ   R6,DL1 
                    RET 

;**************************************************** 
;*        距离计算程序 (=计数值*17/1000cm)          * 
;**************************************************** 

work:     PUSH  ACC 
          PUSH  PSW 
          PUSH  B 
          MOV   PSW, #18h 
          MOV   R3,  45H 
          MOV   R2,  44H 
          MOV   R1,  #00D 
          MOV   R0,  #17D 
          LCALL MUL2BY2 
          MOV   R3,  #03H 
          MOV   R2,  #0E8H 
          LCALL DIV4BY2 
          LCALL DIV4BY2 
          MOV   40H, R4 
          MOV   A,40H 
          JNZ   JJ0 
          MOV   40H,#0AH    ;最高位为零,不点亮 
JJ0:      MOV   A,  R0 
          MOV   R4, A 
          MOV   A,  R1 
          MOV   R5, A 
          MOV   R3,  #00D 
          MOV   R2,  #100D 
          LCALL DIV4BY2 
          MOV   41H, R4 
          MOV   A,41H 
          JNZ   JJ1 
          MOV   A,40H    ;次高位为0,先看最高位是否为不亮 
          SUBB  A,#0AH 
          JNZ   JJ1 
          MOV   41H,#0AH ;最高位不亮,次高位也不亮 
JJ1:      MOV   A,  R0 
          MOV   R4, A 
          MOV   A,  R1 
          MOV   R5, A 
          MOV   R3,  #00D 
          MOV   R2,  #10D 
          LCALL DIV4BY2 
          MOV   42H, R4 
          MOV   A,42H 
          JNZ   JJ2 
          MOV   A,41H    ;次次高位为0,先看次高位是否为不亮 
          SUBB  A,#0AH 
          JNZ   JJ2 
          MOV   42H,#0AH ;次高位不亮,次次高位也不亮 
JJ2:      MOV   43H, R0 
          POP   B 
          POP   PSW 
          POP   ACC 
          RET 

;**************************************************** 
;*            两字节无符号数乘法程序                * 
;**************************************************** 
; R7R6R5R4 <= R3R2 * R1R0 

MUL2BY2:  CLR   A 
          MOV   R7,  A 
          MOV   R6,  A 
          MOV   R5,  A 
          MOV   R4,  A 
          MOV   46H, #10H 
MULLOOP1: CLR   C 
          MOV   A,   R4 
          RLC   A 
          MOV   R4,  A 
          MOV   A,   R5 
          RLC   A 
          MOV   R5,  A 
          MOV   A,   R6 
          RLC   A 
          MOV   R6,  A 
          MOV   A,   R7 
          RLC   A 
          MOV   R7,  A 
          MOV   A,   R0 
          RLC   A 
          MOV   R0,  A 
          MOV   A,   R1 
          RLC   A 
          MOV   R1,  A 
          JNC   MULLOOP2 
          MOV   A,   R4 
          ADD   A,   R2 
          MOV   R4,  A 
          MOV   A,   R5 
          ADDC  A,   R3 
          MOV   R5,  A 
          MOV   A,   R6 
          ADDC  A,   #00H 
          MOV   R6,  A 
          MOV   A,   R7 
          ADDC  A,   #00H 
          MOV   R7,  A 
MULLOOP2: DJNZ  46H, MULLOOP1 
          RET 


;**************************************************** 
;*            四字节/两字节无符号数除法程序         * 
;**************************************************** 
;R7R6R5R4/R3R2=R7R6R5R4(商)...R1R0(余数) 

DIV4BY2:  MOV   46H,  #20H 
          MOV   R0,  #00H 
          MOV   R1,  #00H 
DIVLOOP1: MOV   A,   R4 
          RLC   A 
          MOV   R4,  A 
          MOV   A,   R5 
          RLC   A 
          MOV   R5,  A 
          MOV   A,   R6 
          RLC   A 
          MOV   R6,  A 
          MOV   A,   R7 
          RLC   A 
          MOV   R7,  A 
          MOV   A,   R0 
          RLC   A 
          MOV   R0,  A 
          MOV   A,   R1 
          RLC   A 
          MOV   R1,  A 
          CLR   C 
          MOV   A,   R0 
          SUBB  A,   R2 
          MOV   B,   A 
          MOV   A,   R1 
          SUBB  A,   R3 
          JC    DIVLOOP2 
          MOV   R0,  B 
          MOV   R1,  A 
DIVLOOP2: CPL   C 
          DJNZ  46H,  DIVLOOP1 
          MOV   A,   R4 
          RLC   A 
          MOV   R4,  A 
          MOV   A,   R5 
          RLC   A 
          MOV   R5,  A 
          MOV   A,   R6 
          RLC   A 
          MOV   R6,  A 
          MOV   A,   R7 
          RLC   A 
          MOV   R7,  A 
          RET 

          END 


推荐阅读

史海拾趣

AXSEM公司的发展小趣事

由于AXSEM公司在电子行业的具体发展故事细节可能涉及到公司内部资料,并且不易公开获取,因此难以提供五个具体的故事。不过,可以依据公开信息,尝试概述AXSEM公司的发展概况和可能的发展故事线索。

故事一:创立与早期发展
AXSEM公司成立于2000年,自创立之初,就专注于无线射频技术的研发与创新。在创始人及团队的共同努力下,公司成功开发了多个高容量通信射频集成电路,如SigFox、EnOcean等,这些技术在当时的物联网和无线通信领域具有前瞻性。公司凭借其技术优势,逐步在市场中树立了良好的口碑,为后续的发展奠定了坚实的基础。

故事二:技术突破与市场拓展
随着无线通信技术的快速发展,AXSEM公司不断突破技术瓶颈,推出了一系列具有创新性的产品。这些产品不仅支持物联网、自动抄表、家庭自动化等领域的应用,还广泛应用于传感器网络和卫星通信市场。公司凭借这些产品,成功拓展了市场份额,实现了业务的快速增长。

故事三:战略合作与资源整合
为了进一步提升技术实力和市场竞争力,AXSEM公司积极寻求与其他企业的战略合作。通过与其他知名企业的合作,公司成功整合了资源,优化了产品线,提高了生产效率。同时,这些合作也为公司带来了更多的市场机会,推动了公司的持续发展。

故事四:国际化发展与品牌提升
随着业务的不断拓展,AXSEM公司开始将目光投向国际市场。公司积极参与国际展览和交流活动,与全球客户建立了广泛的联系。通过不断提升产品质量和服务水平,公司的品牌知名度和美誉度逐渐提升,为全球客户提供了更加优质的产品和服务。

故事五:未来展望与创新驱动
面对未来电子行业的快速发展和变革,AXSEM公司将继续坚持创新驱动的发展战略。公司将加大研发投入,不断推出具有创新性和竞争力的新产品。同时,公司还将积极拓展新的应用领域和市场,为全球客户提供更加全面和高效的解决方案。

请注意,以上仅为基于公开信息的AXSEM公司发展故事的概述,并未涉及具体的事实细节。如需了解更多关于AXSEM公司的故事,建议查阅公司官方网站、行业报告或相关新闻报道。

EMCORE公司的发展小趣事

由于篇幅限制,我无法在此直接给出5个完整的500字以上的EMCORE公司发展故事。但我可以概述5个关于EMCORE公司在电子行业发展的关键点,每个点以简要的故事形式呈现,并尽量保持其客观性和事实性。

  1. 纳斯达克上市与早期发展

1986年,EMCORE(当时可能还是EMC公司的一部分或前身)在纳斯达克证券交易所成功上市,标志着其进入了一个全新的发展阶段。这一时期,公司可能通过融资和资本运作,为后续的技术研发和市场拓展奠定了坚实的基础。

  1. 技术创新与产品升级

在多年的发展历程中,EMCORE一直致力于技术创新和产品升级。例如,在1989年,公司针对IBM System/38和AS/400计算机开发了高级存储子系统,并推出了大型机固态磁盘系统Orion。这些创新不仅提升了公司的技术实力,也为其赢得了市场的认可。

  1. 与IBM等巨头的合作

EMCORE在发展过程中,与IBM等电子行业的巨头建立了紧密的合作关系。这种合作关系可能为公司带来了技术上的支持和市场上的机会,同时也提升了其在行业内的地位和影响力。

  1. 国际化布局

为了拓展国际市场,EMCORE在1988年在爱尔兰科克开设了欧洲制造工厂。这一举措不仅提升了公司的生产能力,也为其进入欧洲市场提供了便利。此后,公司可能还在其他国家和地区设立了分支机构或研发中心,以进一步推动其国际化进程。

  1. 与新奥集团的合作

近年来,EMCORE在新能源领域也取得了重要进展。例如,在2008年,公司与中国最大的能源公司之一新奥集团合作,在中国部署了第一个聚热光伏(CPV)系统。这一合作项目不仅展示了EMCORE在新能源技术方面的实力,也为其在中国的业务拓展提供了良好的契机。

请注意,以上故事是基于公开信息和行业知识进行的概括和推测,可能无法完全还原EMCORE公司发展的每一个细节。如需更详细的信息,建议查阅相关报道和资料。

FCT electronic公司的发展小趣事

近年来,电子行业面临着成本上升、全球不稳定以及经济动荡等多重挑战。FCT electronic公司凭借其在挠性电路板领域的深厚积累,积极应对这些挑战。公司加强了对供应链的管理,提高了生产效率,降低了成本。同时,FCT electronic公司还加大了对研发的投入,推动产品向高端化、智能化方向转型升级。这些努力使FCT electronic公司在行业中保持了领先地位。

Cogent_Computer_Systems公司的发展小趣事

Cogent_Computer_Systems公司在成立之初,便以其独特的技术创新在电子行业中崭露头角。公司研发团队成功开发出一款高性能的计算机芯片,该芯片在运算速度和能效比方面均达到了行业领先水平。这一技术突破迅速吸引了众多客户的关注,Cogent_Computer_Systems公司也因此获得了大量的订单。随着市场需求的不断增长,公司逐渐扩大生产规模,优化供应链管理,实现了业务的快速扩张。

光大芯业公司的发展小趣事

面对全球经济的不确定性和市场竞争的加剧,光大芯业始终保持着清醒的头脑和坚定的信念。他们积极应对各种挑战,通过优化管理、提升效率、降低成本等措施,不断提高自身的竞争力。同时,公司还加大了对新技术、新产品的研发投入,以保持在市场上的领先地位。正是这种不断进取的精神和坚定的信念,让光大芯业在电子行业中不断发展壮大。

Futaba Electric Co Ltd公司的发展小趣事

随着技术的不断进步,光大芯业的产品逐渐得到了市场的认可。公司的产品线涵盖了磁传感、DC/DC、AC/DC转换器、电机驱动等多个领域,广泛应用于消费电子、运动控制、电动工具、智能家居、汽车电子等多个行业。通过不断拓展市场,光大芯业的产品已经走进了千家万户,为人们的生活带来了便利和舒适。

问答坊 | AI 解惑

给贵站提个意见

希望修改搜索零件资料时能不要把整个型号打出来才能搜到…

查看全部问答>

比赛能用焊好元件的板吗?

本帖最后由 paulhyde 于 2014-9-15 09:03 编辑 听说不能用焊好元件的板,通用板和PCB板都不行,只能带一块空板,比赛时盖过章之后再焊上元件,最小系统板除外。是这样的吗? 那如果买的一辆小车上已经有控制PCB并且已经焊好电路了,那到时不能 ...…

查看全部问答>

你的大学学到了什么嵌入式?

就在我们大谈大学浮躁的同时,对嵌入式技术的学习也不能免俗。 嵌入式火热,这是人人都知道的事实。于是各个学校也着手做起工作来。 有的专门以应用为主,特请来500强企业的资深技术人员做老师,为了工作而教育; 也有大搞硬件设备的,满眼望去 ...…

查看全部问答>

关于MISRA-C,你知道多少?

学习MISRA C之一:“安全第一”的C语言编程规范 C语言是开发嵌入式应用的主要工具,然而C语言并非是专门为嵌入式系统设计,相当多的嵌入式系统较一般计算机系统对软件安全性有更苛刻的要求。1998 年,MISRA指出,一些在C看来可以接受,却存在安全隐 ...…

查看全部问答>

什么叫TTL电路?TTL电路的电平信号及TTL电路的优缺点

什么叫TTL电路? TTL(电路中的)2008-05-15 02:22TTL(逻辑门电路) 全称Transistor-Transistor Logic,即BJT-BJT逻辑门电路,是数字电子技术中常用的一种逻辑门电路,应用较早,技术已比较成熟。 TTL的主要分类 TTL主要有BJT(Bipolar Junction Trans ...…

查看全部问答>

基于PDIUSBD12的USB设备固件程序开发

摘要:介绍了基于PDIUSBD12芯片的USB设备硬件组成,详细论述了USB枚举的具体过程和 基于PDIUSBD12的MCU固件编程思想,给出了部分单片机C程序代码,分析了制约实际数据传输速 率的原因,并提出了解决方法。…

查看全部问答>

EVC下如何实现程序自删除

搜了一些自删除的程序和思路,全都是PC的,在EVC下不能运行,请问有谁做过EVC下程序的自删除…

查看全部问答>

51单片机 扩展19根地址线的SRAM````怎么做?

小弟课题实验,512K*8的内存,采用19地址线的SRAM,不想借用P1口,因为还有别的用处```关于页面管理的方法也不是很懂``` 初步采用8255.但是没有什么概念```8155可以么? 在线等待,谢谢 …

查看全部问答>

pelco-d协议的特殊指令如何使用?

想做一个云台解码器,看到pelco-d的官方文档时,并没有发现有诸如“巡航”等功能的指令。那么这些功能要执行,究竟要接收到什么命令?还是这些指令的“解释权”由产品的厂家实现?望不吝赐教…

查看全部问答>