历史上的今天
返回首页

历史上的今天

今天是:2024年12月27日(星期五)

正在发生

2019年12月27日 | 51单片机汇编学习例程(5)——USART串口篇

2019-12-27 来源:51hei

5.ASM5_USART:    串口发送0-9及换行,接收任意数据并显示
USART.jpg?imageView2/2/w/550

/**

******************************************************************************

*         @file            USART.asm

*         @author          Alex——小白

*         @version         V1.0

*         @date            2019.9.1

*         @brief           自动发送数据0-9和换行,接收的数据会打印该数据

******************************************************************************

*         @attention        All Rights Reserved  

**/

        

                ORG         0000H                        ;程序执行的起始地址                

                LJMP         Main                        ;跳转到main函数        

                ORG         0023H                        ;串口中断地址

                LJMP         UARTInterrupt        ;声明UART是中断4函数名称


                ORG     0100H                        ;程序跳转到0100H开始执行

        Main:

                MOV         SP,#60H

                LCALL         InitUART               ;初始化串口参数

                MOV         DPTR,#Num_Tab            ;DPTR指向数组

                MOV         R0,#00H                  ;变量清零

        While:

                MOV                A,R0              ;变量赋值

                MOVC        A,@A+DPTR                ;读取数组数据

                LCALL         SendOneByte            ;串口打印数据

                LCALL        Delay                   ;延时1s

                INC                R0                ;变量自加

                CJNE        R0,#0CH,Next     ;判断是否为12,是清零,否则跳转

                MOV         R0,#00H

        Next:                

                SJMP        While


        InitUART:

                MOV         TMOD,#20H                ;2400bps

                MOV         SCON,#50H                ;设置波特率重装值(256-12000000/12/32/2400)=243=F3

                MOV         TH1,#0F3H                ;赋初值

                MOV         TL1,TH1

                MOV         PCON,#00H

                SETB         EA                                ;总中断开启

                SETB         ES                                ;串口中断开启

                SETB         TR1                               ;定时器1中断开启

                RET


        UARTInterrupt:

                PUSH         ACC               ;ACC值押栈,避免主循环使用冲突

                JB                 RI,Is_Receive    ;判断是否在接收数据

                CLR         TI                      ;否则清除发送标志位

                RETI

        Is_Receive:

                CLR         RI                           ;清除接收标志位

                MOV         A,SBUF                       ;将获取的数据储存到A

                LCALL         SendOneByte                ;接收数据,再发送出去

                POP         ACC                          ;AC值释放

                RETI


        SendOneByte:

                CLR         ES                            ;关闭串口中断

                CLR         TI                            ;清除发送标志位

                MOV         SBUF,A                        ;将数据A发送出去

        SendFinish:

                JNB         TI,SendFinish        ;判断是否发送完毕

                CLR         TI                                ;是,则清除标志位

                SETB         ES                               ;开启串口中断

                RET        


        Delay:                      ;t=t1*8=1s,修改R5的值即可更改时间(不精准)

                MOV                R5, #08H                ;单周期,8次

        D1:                                                        ;t1=t2*250=500*250=125000

                MOV                R6, #0FAH                

        D2:                                                

                MOV                R7, #0FAH                ;t2=250*2=500

        D3:                

                DJNZ        R7, D3       ;R7=250自减,直到为0跳出循环,双周期

                DJNZ        R6, D2       ;R6=250自减,直到为0跳出循环,双周期

                DJNZ        R5, D1       ;R5=100自减,直到为0跳出循环,双周期

                RET

                

        Num_Tab:                         ;0-9,0A0D换行

                DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,0AH,0DH        

推荐阅读

史海拾趣

Anders DX公司的发展小趣事

Anders DX是一家专注于设计和制造显示解决方案的公司,以下是该公司发展的相关故事:

  1. 公司成立与初期阶段:Anders DX成立于2002年,总部位于英国霍尔特。公司的创始人包括Neil Jarvis和David Vallis,他们都在显示技术领域拥有丰富的经验。公司成立之初,主要从事自定义显示解决方案的设计和制造,为各种行业的客户提供定制化的显示产品。

  2. 技术创新与产品开发:Anders DX在其成立初期就致力于技术创新和产品开发。公司团队与客户紧密合作,根据客户的需求和应用场景,设计和制造各种类型的显示解决方案,包括液晶显示屏、触摸屏、OLED显示屏等。他们采用先进的制造工艺和技术,不断推出新产品,满足客户不断变化的需求。

  3. 客户合作与市场拓展:随着公司业务的发展,Anders DX与越来越多的客户建立了紧密的合作关系。公司的客户群涵盖了各个行业,包括医疗、工业、汽车、消费电子等领域。通过与客户的合作,Anders DX不断拓展产品的应用领域和市场份额,在行业内树立了良好的声誉。

  4. 全球布局与生产基地:为了更好地服务全球客户,Anders DX逐步在全球建立了生产基地和销售网络。除了在英国的总部外,公司还在亚洲和美洲地区设立了生产工厂和销售办事处,以满足不同地区客户的需求。这些生产基地拥有先进的设备和技术,能够为客户提供高质量的定制化显示解决方案。

  5. 持续发展与未来展望:作为一家专注于显示解决方案的公司,Anders DX将继续致力于技术创新和产品开发。公司将继续与客户紧密合作,不断推出适应市场需求的新产品,并不断提升生产效率和产品质量,以保持在行业内的竞争优势。同时,Anders DX也将继续关注行业的发展趋势和技术变革,及时调整战略,以确保公司持续健康发展。

Handok Co Ltd公司的发展小趣事

在电子行业中,Hamlin(现为Littelfuse的一部分)的发展充满了创新与挑战的故事。以下是五个关于Hamlin如何在Littelfuse旗下发展壮大的实际案例:

1. 从独立到并购:Hamlin的加入

Hamlin,一家在传感器领域享有盛誉的公司,于2012年被Littelfuse收购。这一战略举措标志着Littelfuse在电路保护基础上,进一步向传感器与功率器件领域扩展。Hamlin的加入为Littelfuse带来了丰富的传感器技术,特别是其在磁性传感器方面的专长,使得Littelfuse能够为客户提供更全面的解决方案。这次并购不仅增强了Littelfuse在汽车电子和工业市场的竞争力,也为其后续的技术创新和市场拓展奠定了坚实基础。

2. 创新引领:55300系列传感器的诞生

Hamlin在加入Littelfuse后,继续发挥其创新优势,推出了55300系列非接触式磁性传感器。这一系列传感器克服了传统干簧开关在机械磨损和污染方面的限制,具有长寿命、高速度、不受恶劣环境影响的特点。其广泛的工作温度范围和集成的汽车级EMI/EMC测试,使得这些传感器在汽车和工业市场得到了广泛应用,如液压缸位置、变速箱换挡位置等关键控制领域。

3. 技术突破:Hamlin在车用传感器领域的贡献

随着汽车行业的快速发展,对安全、节能和舒适性的要求日益提高。Hamlin利用其在磁感应技术上的专长,为Littelfuse的车用传感器产品线增添了新的活力。Hamlin的车用传感器涵盖了安全类、动力总成、排放和舒适性四大类别,通过检测转速、位移、位置和角度等参数,为汽车提供了精准的监控和控制。这些传感器不仅提升了汽车的性能和安全性,也满足了消费者对驾驶体验的高要求。

4. 市场拓展:Littelfuse与Hamlin的全球化战略

在Hamlin的助力下,Littelfuse加快了全球化步伐。通过在欧洲、亚洲和美国的持续扩张,Littelfuse的产品和服务覆盖了更广泛的市场。Hamlin的传感器技术成为了Littelfuse在全球市场上的一张重要名片,吸引了众多国际客户的关注。同时,Littelfuse也加大了对新兴市场的投入,特别是在中国市场,通过与本土合作伙伴的紧密合作,进一步提升了品牌影响力和市场份额。

5. 持续增长与未来展望

自Hamlin加入以来,Littelfuse的业绩实现了持续增长。通过不断的研发投入和市场拓展,Littelfuse在电路保护、传感器与功率器件领域均取得了显著成就。展望未来,Littelfuse将继续依托Hamlin等子公司的技术优势和市场资源,推动产品创新和市场升级。同时,随着新能源汽车、物联网等新兴领域的快速发展,Littelfuse将迎来更多的发展机遇和挑战,为电子行业的进步贡献更多力量。

Bel Fuse公司的发展小趣事

作为一个有社会责任感的企业,Bel Fuse始终关注环境保护和可持续发展。公司致力于减少生产过程中的能源消耗和环境污染,积极采用环保材料和工艺。同时,Bel Fuse还参与了多项公益活动,为社会做出贡献。这种对社会责任的承担不仅提升了公司的形象,也增强了员工的凝聚力和归属感。

这些故事虽然基于虚构,但它们是根据Bel Fuse公司可能经历的发展历程和挑战来构建的。真实的故事可能会因时间、市场环境等因素而有所不同。要了解Bel Fuse公司的真实发展历程,建议查阅相关文献资料或访问公司官方网站。

Good Will Instrument Co., Ltd.公司的发展小趣事

在发展过程中,Bel Fuse注重与合作伙伴建立长期稳定的合作关系。公司积极寻求与全球知名企业的合作机会,通过技术合作、资源共享等方式,共同推动电子行业的发展。这些合作伙伴关系的建立不仅为公司带来了更多的业务机会,还提升了公司的技术水平和市场竞争力。

Electronic Transistors Corp公司的发展小趣事

ETC公司非常重视团队建设和文化塑造。公司注重培养员工的创新能力和团队协作精神,为员工提供广阔的发展空间和良好的职业前景。同时,ETC还积极营造积极向上、开放包容的企业文化,使员工能够在轻松愉悦的氛围中工作和学习。这些举措不仅提高了员工的满意度和忠诚度,也为公司的长期发展奠定了坚实的基础。

EOS POWER INDIA Pvt公司的发展小趣事

在追求经济效益的同时,EOS也注重可持续发展和环保责任。公司积极采用环保材料和绿色生产工艺,降低生产过程中的能耗和排放。EOS还投入资金建设了环保设施,确保生产过程中的废弃物得到有效处理。此外,公司还积极参与环保公益活动,推动电子行业的绿色发展。这些举措不仅体现了EOS的社会责任感,也为公司的长期发展奠定了坚实的基础。

问答坊 | AI 解惑

基于LPC2104型CPU的汽车行使记录仪

随着汽车拥有量的增加,发生交通事故的概率也随之增加,发生事故后用传统的方法进行分析、判断、维修有一定的困难。这样,就给人们提出了一个问题,怎样及时、准备地分析故障的存在,客观地分析事故的责任。由此联系到飞机上装的“黑匣子”,一旦飞 ...…

查看全部问答>

linux下i2c控制radio的问题

目前用ut6410想实现 radio的功能使用si47xx的模块 ut6410本身有提供i2c的接口和驱动 kernel linux2.6.24 硬件部份問題排除 有用示波器 sda sck脚位有讯号出来. 现在遇到的状况是想从user space透过i2c对si47xx丢cmd 但是write read回传都是-1 部 ...…

查看全部问答>

wince5.0 2440背光问题

背光代码 volatile S3C2440A_IOPORT_REG * v_pIOPregs= NULL; BOOL BacklightInitialize() {     BOOL    bRet = TRUE;     BL_PowerOn(TRUE);               & ...…

查看全部问答>

第三方控件如何部署到wince中,在运行时提示无法找到第三方控件的dll

第三方控件如何部署到wince中 在运行时提示无法找到第三方控件的dll…

查看全部问答>

如何以DSD模式将多个,Pcm4222,pcm1792,连接到Ti的dsp上?

如何以DSD模式将多个,Pcm4222,pcm1792,连接到Ti的dsp上? 还有个什么TDM模式是什么? Tms320vc5402如何连接到异步SRam?…

查看全部问答>

请问香主,如何找到寄存器地址?

                                 看完了STM32的数据手册和参考手册,无法找到某一个具体寄存器的地址,文档中给出的都是偏移地址,而且也没有基地址 ...…

查看全部问答>

【求助】msp430芯片RAM居然不能外扩??

msp430芯片RAM居然不能外扩??很郁闷,最近程序大了,需要大于2K的RAM了,可是msp430芯片RAM不能外扩,这个怎么办呢?课题做到一半,555555555555 谢谢各位,请出出主意!…

查看全部问答>

TinyOS在MSP430F2618+CC2520平台上移植交流

目前TinyOS还仅支持MSP430低端的MCU比如f1611,以及CC2420等射频芯片。针对MSP430高端系列单片机,以及TI推出的第二代射频芯片CC2520还未能支持 前段时间把TinyOS移植到了上述平台上,基本功能都已经实现,针对无线协议栈还需要进一步优化!希望有 ...…

查看全部问答>

CC2500发射很正常,但是接收的数据异常

做了块CC2500模块,模块发射数据很正常,但是接收的数据全部异常,找了两天了还没找到原因,程序问题已经排除(用别人的模块发射和接受都正常),请懂的人帮下小弟,小弟搞开始搞RF…

查看全部问答>

WIN7 32位系统不能正常安装CCS软件?

我的笔记本电脑是WIN7 32位系统,之前没有装过CCS软件,现在只要安装CCS V5.4就会遇到如图所示的错误,然后就自动退出安装程序,安装之前我已经退出了360并且关闭了防火墙,请问同志们有遇到这问题的吗?给个解答…

查看全部问答>