历史上的今天
返回首页

历史上的今天

今天是:2024年10月12日(星期六)

正在发生

2021年10月12日 | STM8与汇编语言(10)--UART应用之二

2021-10-12 来源:eefocus

下面这个实验程序比较简单,它是在上篇基础上,增加了查询方式从UART接收一个字符的子程序。主循环中,等待接收一个字符,然后将接收到的字符再发送出去。如果与WINDOWS的超级终端相连,则键盘上按什么按键,则显示对应的字符。


同样还是利用ST的开发工具,生成一个汇编程序的框架,然后修改其中的main.asm,修改后的代码如下。


编译通过后,下载到开发板,运行程序。在PC机上运行超级终端,波特率为9600,然后从键盘上输入按键,屏幕上就显示对应的字符。


stm8/


      #include "mapping.inc"

     

      #include "STM8S207C_S.INC"


; 定义堆栈空间的起始位置和结束位置

stack_start.w  EQU   $stack_segment_start

stack_end.w   EQU    $stack_segment_end


             segment 'rom'           ; 下面开始定义一个段,该段位于ROM中

main.l                          ; 定义复位后的第一条指令的标号(即入口地址)

;

; 首先要初始化堆栈指针

       LDW    X,#stack_end        

              LDW    SP,X


             CALL   UART3_Init         ; 初始化串口3

MAIN_LOOP.L

            CALL   UART3_RecvChar

            CALL   UART3_SendChar

            JRA    MAIN_LOOP           ; 进入无限循环



UART3_Init.l                    ; 串口初始化子程序

            LD     A,#0              ; 禁止UART发送和接收

            LD     LINUART_CR2,A  

      

            LD     A,#0

            LD     LINUART_CR1,A      ; b5 = 0,允许UART

                                 ; b2 = 0,禁止校验

                              

           LD     A,#0              ; b5,b4 = 00,1个停止位

          LD     LINUART_CR3,A

                       

; 设置波特率,必须注意以下几点:

;    (1) 必须先写BRR2

;    (2) BRR1存放的是分频系数的第11位到第4位,

;    (3) BRR2存放的是分频系数的第15位到第12位,和第3位到第0位

; 例如对于波特率位9600时,分频系数=2000000/9600=208

; 对应的十六进制数为00D0,BBR1=0D,BBR2=00

            LD     A,#$00

            LD     LINUART_BRR2,A

            LD     A,#$0D

            LD     LINUART_BRR1,A     ; 实际的波特率分频系数为00D0(208)

                                                        ; 对应的波特率为2000000/208=9600

            LD     A,#$0C            ; b3 = 1,允许发送

                               ; b2 = 1,允许接收

            LD     LINUART_CR2,A  

            RET

;

UART3_SendChar.l                 ; 发送字符的子程序

            PUSH   A                ; 将要发送的字符保存到堆栈中

SENDCHAR_1.L                  

            LD     A,LINUART_SR       ; 读取当前状态寄存器的值

            AND    A,#$80            ; 若发送寄存器不空,则等待

            JREQ   SENDCHAR_1

            POP    A                ; 从堆栈中恢复要发送的字符

            LD     LINUART_DR,A       ; 将要发送的字符送到数据寄存器

            RET

                            

; 函数功能:从UART3接收一个字符

; 输入参数:无

; 输出参数:无

; 返 回 值:寄存器A -- 从串口读回的字符

; 备    注:无

UART3_RecvChar.l

RECVCHAR_1.L                  

            LD     A,LINUART_SR

            AND    A,#$20

            JREQ   RECVCHAR_1

            LD     A,LINUART_DR

            RET





  interrupt NonHandledInterrupt

NonHandledInterrupt.l

             iret



; 下面定义中断向量表    

            segment 'vectit'

            dc.l {$82000000+main}           ; reset

            dc.l {$82000000+NonHandledInterrupt}     ; trap

            dc.l {$82000000+NonHandledInterrupt}     ; irq0

            dc.l {$82000000+NonHandledInterrupt}     ; irq1

            dc.l {$82000000+NonHandledInterrupt}     ; irq2

            dc.l {$82000000+NonHandledInterrupt}     ; irq3

            dc.l {$82000000+NonHandledInterrupt}     ; irq4

            dc.l {$82000000+NonHandledInterrupt}     ; irq5

            dc.l {$82000000+NonHandledInterrupt}     ; irq6

            dc.l {$82000000+NonHandledInterrupt}     ; irq7

            dc.l {$82000000+NonHandledInterrupt}     ; irq8

            dc.l {$82000000+NonHandledInterrupt}     ; irq9

            dc.l {$82000000+NonHandledInterrupt}     ; irq10

            dc.l {$82000000+NonHandledInterrupt}     ; irq11

            dc.l {$82000000+NonHandledInterrupt}     ; irq12

            dc.l {$82000000+NonHandledInterrupt}     ; irq13

            dc.l {$82000000+NonHandledInterrupt}     ; irq14

推荐阅读

史海拾趣

富信半导体(FOSAN)公司的发展小趣事

台湾第一电阻(Firstohm)公司的发展故事

故事一:创立与早期技术积累

台湾第一电阻电容器股份有限公司(Firstohm)成立于1969年,初期便专注于电阻器的生产制造。在那个电子工业刚刚起步的年代,Firstohm凭借其敏锐的市场洞察力和对技术的不懈追求,逐步在电阻器领域站稳脚跟。1970年,公司开始接受日本东京应濑无线公司的代工订单,外销至日本市场,这一合作为Firstohm打开了国际市场的大门。此后,公司不断引进和吸收先进技术,如1986年从日本横演电子精工取得的精密级金属皮膜电阻技术,为公司的技术积累奠定了坚实基础。

故事二:晶圆电阻的突破

1987年,Firstohm成功研发并量产晶圆电阻(又称MELF电阻),这一成就标志着公司在电阻器制造技术上的重大突破。晶圆电阻以其优异的性能和广泛的应用领域,迅速获得了市场的认可。Firstohm也因此成为全球少数几家具备晶圆电阻生产能力的厂商之一,为公司后续的发展奠定了技术领先地位。

故事三:国际认证与品质提升

进入21世纪,Firstohm更加重视产品品质和国际化发展。2001年,公司获得ISO14001 Green Dove奖项及ISO9001认证,标志着公司在环境管理和质量管理方面达到了国际先进水平。此后,公司不断通过国际认证,如ISO9001:2008、IECQ品质认证等,进一步提升了产品的竞争力和市场信誉。这些认证不仅是对公司产品质量的认可,也为公司拓展国际市场提供了有力支持。

故事四:创新产品的研发

Firstohm始终坚持创新驱动发展战略,不断推出符合市场需求的新产品。例如,2012年,公司间隙式突波吸收器(SGS)获得日本、中国大陆及韩国专利许可;2017年,成功开发AEC-Q200车规级晶圆电阻;2020年,又成功开发出心电导线图(ECG cable)专用电阻器SSWAT系列。这些创新产品的研发和推出,不仅丰富了公司的产品线,也进一步巩固了公司在电阻器领域的市场地位。

故事五:自动化生产与全球化布局

随着电子行业的快速发展和市场竞争的加剧,Firstohm不断加大在自动化生产和全球化布局方面的投入。公司生产线高度自动化,生产效率和产品品质显著提升。同时,Firstohm积极拓展海外市场,与全球多家知名电子企业建立了长期稳定的合作关系。例如,与美国通用、THOMSON、法国雷诺等公司的合作,不仅提升了公司的品牌知名度,也为公司带来了更多的市场机遇和发展空间。

Crameda Intersys公司的发展小趣事

在电子行业中,产品质量是企业生存和发展的关键。Crameda Intersys公司始终将质量管理放在首位,建立了严格的质量管理体系。公司从原材料采购、生产制造到产品检验等各个环节都严格把关,确保产品质量的稳定性和可靠性。这种对质量的执着追求赢得了客户的信任和好评,也为公司的长期发展奠定了坚实的基础。

BRIGHT公司的发展小趣事

除了无线耳机和太阳能领域,BRIGHT公司还在健康技术领域取得了重要的突破。他们成功筹集了60万美元的资金,用于推动健康技术的持续增长和扩张。这笔资金使得BRIGHT公司能够在其成功的基础上,进一步研发和推广基于科学的认知健康解决方案。他们的产品,如40赫兹灯,无需医生处方即可普遍使用,为广大消费者提供了更加便捷和科学的健康管理方式。

Elpida Memory公司的发展小趣事

尽管有政府的支持,但Elpida Memory的经营状况并未得到根本性的改善。在经历了多年的亏损和重组后,Elpida Memory最终于2012年被美国的美光科技(Micron Technology)收购。这一收购标志着Elpida Memory正式退出了日本半导体产业的舞台,但也为其未来的发展提供了新的机遇。

DMS Electronic Components, Inc公司的发展小趣事

在电子行业中,市场拓展是企业发展的关键因素之一。DMS积极开拓国内外市场,与众多知名企业建立了长期稳定的合作关系。公司通过提供优质的产品和服务,赢得了客户的信赖和支持。同时,DMS还积极参与行业展会和交流活动,与同行进行技术交流和合作,共同推动电子行业的发展。

Analogix Semiconductor公司的发展小趣事

DMS深知品质对于企业的重要性,因此从一开始就建立了严格的质量管理体系。公司采用先进的生产设备和工艺,对每一个环节都进行严格把关,确保产品质量符合国际标准。DMS还积极参与国际认证,通过ISO9001、CE、UL等认证,进一步提升了品牌的国际竞争力。

问答坊 | AI 解惑

无线网络 --常见标准有以下三种

IEEE 802.11a :使用5GHz频段,传输速度54Mbps,与802.11b不兼容 IEEE 802.11b :使用2.4GHz频段,传输速度11Mbps IEEE 802.11g :使用2.4GHz频段,传输速度54Mbps,可向下兼容802.11b 目前IEEE 802.11b最常用,但IEEE 802.11g更具下一代标准 ...…

查看全部问答>

帮我解释一下 德州电子 CC2430 点对点 实例程序

我在网上下载了一个源代码是基于CC2430的zigbee 点对点的实例通信代码,但是看不懂, 能不能帮我解释一下程序的大致框架和实现原理,诸如 hal层 cul层 是实现什么的,程序如何工作的?十分感谢了 TI(德州仪器公司)的CC2430芯片的库函数以及一些 ...…

查看全部问答>

基于CE的数字对讲机系统的开发,外包。

基于CE或者MOBILE系统的数字对讲机(类似于日常在小区中保安用的对讲机(可以广播或者对单个人聊),只不过通过PDA来实现,PDA是CE或者MOBILE的操作系统),诚招可以有能力挡此重任者,最好有现成的,直接购买的最好。 QQ:470987784 电话:(0) ...…

查看全部问答>

wince子窗口

如何创建一个子窗口在主窗口上,然后主窗口也可以接收信息,有点像无模式对话框???? 最好有代码,谢谢....…

查看全部问答>

在CF卡中保存hive based registry的问题,急求解决

小弟在ce platfrom builder 5.0定制CE,加入hive的就不能开机了,黑屏,键盘没反映。 时间紧急,急求兄弟帮忙!!! 1,目标平台是X86主板,芯片组为INTEL 852,用了INTEL 852的BSP包。 2,存储设备为CF卡,主板认作IDE4;也用IDE硬盘试过,一样不能 ...…

查看全部问答>

谁有VGA-DB15的封装资料帮我发一份

现在要画一个DB15的封装不知道参数,知道的大侠帮下!!!!!!!!!!!…

查看全部问答>

【问TI】如何能让大家更好的利用M3的板子?

        对于TI的M3系列的开发板,普及率还不是很高,为什么这么说?我主要参考了淘宝里的开发板的销售情况,发现其他公司,尤其是现在比较热的××公司,你只要到淘宝上一搜,遍地都是。这里面良莠不齐,难免 ...…

查看全部问答>

AM335x NAND Driver's Guide中文手册改1

AM335x NAND Driver\'s Guide中文手册改1…

查看全部问答>

视频编解码芯片电源问题

在视频编解码芯片中既有模拟电源又有数字电源,要完全的物理隔离呢?还是只需简单的串联磁珠、电阻等。谢谢…

查看全部问答>

ADI ADC PCB 硬件设计指南

HARDWARE DESIGN TECHNIQUES Prototyping Analog Circuits Evaluation Boards Noise Reduction and Filtering for Switching Power Supplies Low Dropout References and Regulators EMI/RFI Considerations Sensors and Cable Shielding …

查看全部问答>