历史上的今天
返回首页

历史上的今天

今天是:2024年10月15日(星期二)

正在发生

2021年10月15日 | STM8与汇编语言(15)--AD转换

2021-10-15 来源:eefocus

现在大部分的单片机也都具备了A/D转换器,有8位的,也有10位的,当然性能好的具备了12位的A/D。在STM8单片机中,提供的是10位的A/D,通道数随芯片不同而不同,少的有4个通道,多的则有16个通道。


下面的实验程序首先对A/D输入进行采样,然后将采样结果的高8位(丢弃最低的2位),作为延时参数去调用延时子程序,然后再去驱动LED控制信号。因此不同的采样值,决定了LED的闪烁频率。当旋转ST三合一开发板上的电位器时,可以看到LED的闪烁频率发生变化。


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


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

                                                            

; 初始化LED对应的IO端口

       LD     A,#08

       LD     PD_DDR,A            ; 将PD3设置成输出

       LD     A,#08

       LD     PD_CR1,A            ; 将PD3设置成推挽输出

       LD     A,#00

       LD     PD_CR2,A            ;

                            

; 初始化A/D模块

       LD     A,#$00

       LD     ADC_CR2,A           ; A/D结果数据左对齐

       LD     A,#$00

       LD     ADC_CR1,A           ; ADC时钟=主时钟/2=1MHZ

                                ; ADC转换模式=单次

                                ; 禁止ADC转换

       LD     A,#$03

       LD     ADC_CSR,A           ; 选择通道3

       LD     A,#$20

       LD     ADC_TDRL,A

;

MAIN_LOOP.L    

       LD     A,ADC_CR1

       OR     A,#$01

       LD     ADC_CR1,A        ; CR1寄存器的最低位置1,使能ADC转换

       LD     A,#100

WAIT_ADC_ON.L

       DEC    A

       JRNE   WAIT_ADC_ON      ; 延时一段时间,至少7uS,保证ADC模块的上电完成

       LD     A,ADC_CR1

       OR     A,#$01

       LD     ADC_CR1,A        ; 再次将CR1寄存器的最低位置1

                             ; 使能ADC转换

WAIT_ADC_EOC.L

       LD     A,ADC_CSR

       AND    A,#$80

       JREQ   WAIT_ADC_EOC     ; 等待ADC结束

        

       LD     A,ADC_DRH        ; 读出ADC结果的高8位

       CALL   DELAY_MS         ; 延时一段时间

        

       LD     A,PD_ODR         ; 读回PD口的数据

       XOR    A,#$08          ; 将PD3反相

       LD     PD_ODR,A         ; 送回



       JRA    MAIN_LOOP        ; 继续主循环



; 函数功能:延时

; 输入参数:寄存器A -- 要延时的毫秒数,这里假设CPU的主频为2MHZ

; 输出参数:无

; 返 回 值:无

; 备    注:无

DELAY_MS.L

       PUSH   A               ; 将入口参数保存到堆栈中

       LD     A,#250          ; 寄存器A<-250,作为下面的循环数

DELAY_MS_1.L

       NOP                   ; 用空操作指令进行延时4T

       NOP

       NOP

       NOP

       NOP

       DEC    A              ; 寄存器A<-A-1,本条指令执行之间为1T

       JRNE   DELAY_MS_1     ; 若不等于0,则循环,

                                  ; 本条指令执行时间为2T(跳时)或1T(不跳时)

       POP    A              ; 从堆栈中恢复入口参数

       DEC    A              ; 将要延时的MS数-1

       JRNE   DELAY_MS      ; 若不等于0,则循环

       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

推荐阅读

史海拾趣

Fanstel公司的发展小趣事

在市场竞争日益激烈的情况下,Fanstel公司意识到市场拓展的重要性。公司制定了一套精准的市场营销策略,针对不同行业和地区的客户需求,推出了定制化的产品和解决方案。同时,Fanstel还积极开拓国际市场,通过参加国际展会、建立海外销售网络等方式,成功将产品打入全球市场。这些举措不仅提升了公司的知名度,也大大增加了公司的销售额。

Cretex Companies Inc公司的发展小趣事

面对数字化时代的挑战和机遇,Cretex积极推进数字化转型和智能化升级。他们引入先进的信息技术和管理系统,提高了生产效率和产品质量。同时,公司还加强与互联网、大数据等领域的合作,开发出了具有智能化功能的电子产品。这些产品能够满足用户多样化的需求,提升用户体验。通过数字化转型和智能化升级,Cretex在电子行业中保持了强劲的发展势头。


这些故事基于电子行业的普遍发展趋势和可能的公司发展路径创作而成,旨在展示一个公司在电子行业中可能经历的不同阶段和面临的挑战与机遇。请注意,这些故事并非基于Cretex Companies Inc.的真实历史,而是虚构的内容。

DESOUTTER公司的发展小趣事

2001年,Desoutter公司与CP(Chicago Pneumatic)和GR(Grorges Renault)合并,成立了CPDI公司。这次合并使Desoutter公司获得了更强大的技术实力和市场资源,进一步巩固了其在气动工具领域的领先地位。合并后,CPDI公司继续致力于气动工具的研发和生产,并推出了一系列创新产品,以满足市场的不断变化和升级需求。

Chino-Excel公司的发展小趣事

面对日益严峻的环境问题,Chino-Excel公司积极倡导环保理念,将绿色生产贯穿于整个产业链。公司采用环保材料和节能技术,降低产品生产和运营过程中的能耗和排放。同时,公司还积极参与环保公益活动,推动整个行业向更加环保、可持续的方向发展。

捷茂微(GATEMODE)公司的发展小趣事

面对日益严峻的环境问题,Chino-Excel公司积极倡导环保理念,将绿色生产贯穿于整个产业链。公司采用环保材料和节能技术,降低产品生产和运营过程中的能耗和排放。同时,公司还积极参与环保公益活动,推动整个行业向更加环保、可持续的方向发展。

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

近年来,全球电子行业面临着诸多挑战,包括技术更新换代迅速、市场竞争加剧等。Futaba Electric积极应对这些挑战,不断加大研发投入,推出了一系列具有创新性和竞争力的新产品。同时,公司还注重与上下游产业链的合作与协同,通过整合资源、优化流程等方式降低成本、提高效率。此外,Futaba Electric还积极响应环保政策,推动绿色制造和可持续发展。这些努力使得公司在面对挑战时依然能够保持稳健的发展态势。

问答坊 | AI 解惑

点击论坛链接时遇到的小麻烦,还请遇到过的给写提示!

在点击的好多链接时总是出现未能查找到,是我的浏览器设置问题还是什么地方? 反正挺麻烦的,每次只能在论坛的主页上点击各个帖子,那位兄台知道的就告诉兄弟一下吧…

查看全部问答>

Linux终端模式下查看电脑的硬件配置情况

lsb_release -a 查看系统版本。   cat /etc/redhat-release 看这个配置文件也可以。不过管理员可以修改这里的内容   cat /proc/CPUinfo 查看cpu信息,processor 0 为一个U, 1为两个,flags超线程。   lspci 查看主板信息   fr ...…

查看全部问答>

恩智浦Cortex LPC1343开发板免费申请

整机为交流供电,数字电源和电子负载都有独立的液晶显示部分,显示各自的状态信息。     数字电源开机初始状态为0V,可在0-20V范围内以0.1V步进电压调整(同时具有0.01v的微调按纽)。带有输出电压,输出电流,输出功率显示。   & ...…

查看全部问答>

编写高效的C语言

编写高效简洁的C语言代码,是许多软件工程师追求的目标。本文就是针对编程工作中的一些体会和经验做相关的阐述。 第一招:以空间换时间 计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题,我们就 ...…

查看全部问答>

!!!wince 5.0 唤醒有驱动没有加载?

平台wince 5.0  + 三星2450 休眠是可以实现的,可是唤醒时有些驱动没有加载,如触摸屏,camera等。请问这是为什么,控制加载驱动的代码在哪? 多谢了!…

查看全部问答>

用8051能不能做到监视电机速度的?

用8051能不能做到监视电机速度的? 要用什么来显示电机的速度呢???我想在仿真软件里做出来的~谢谢你们了…

查看全部问答>

一个I/O口,控制2个LED

 开门见山,小弟疑问如下: 1.如何确定一款单片机I/O口,是否有3态,如何设置高阻态。 2.若没有3态,则如何设置在上点之后,初始状态为灭。 请教各位,如有解答,不胜感激…

查看全部问答>

多串口ARM

我考 8个串口 兄弟们听说过没有,这就是我最近在用的 cantus128 ARM,我现在想用它的网口转串口 在串口转网口,玩一下啊,反正串口多多吗,内部FIFO又大。哈哈哈…

查看全部问答>

为啥我发帖子,附件上传不上去呢?

附件也不是很大啊,为啥就传不上去啊???…

查看全部问答>

AVR STUDIO5 应用程序错误

  有 谁遇到过同样的问题的没有,我都搞了两天了 还是这个错误,软件都重装了几次,就差装系统了。不想装系统的原因是我的电脑装系统必须全盘格式化,郁闷…

查看全部问答>