单片机

前言

STM32 PCROP专有代码读出保护,将某个区域设置为仅允许执行,可防止代码被非法读出与修改。ST网站提供了免费的PCROP参考代码,但是例程中仅仅提供了用代码设置PCROP。为方便利用PCROP进行知识产权保护的开发和部署,这篇文章提供了方法,可在RDP级别设置为1或者0时,使用代码清除PCROP。

ST网站上的PCROP参考代码

学习使用PCROP,可从ST网站下载文档以及参考代码。文档里有一步一步的详细说明。参考代码则实现了,如何设置编译开发环境去掉文字库(Literal pool),以避免受保护区域需要被读访问;参考代码也实现了如何利用代码使能PCROP保护以及如何导出接口符号供二次开发使用。

你可以编译运行PCROP参考代码。一旦下载到开发板并运行后,扇区2会自动被设置成PCROP保护。你将无法再次下载代码到该扇区,也无法读出该扇区的内容。若想通过STLink工具解除PCROP保护,则会导致整个Flash被擦除。

使用代码清除PCROP

在熟悉ST网站上的PCROP参考代码基础之上,我们将讨论如何使用代码清除PCROP。

1. 原理

根据STM32用户手册,要想清除PCROP保护,读保护RDP级别必须从1设置成0。也就是说,即使当前RDP级别为0,我们也要使用代码将其设置成1。然后,同时关掉PCROP和将RDP设置成0。这也说明,尽管是清除PCROP保护,我们的代码必须加入RDP的设置函数, 而不能仅仅修改参考代码中的PCROP_Enable的状态字段使其变成PCROP_Disable。

解读STM32单片机:代码实现 PCROP清除

2. 材料准备

开发板: STM32F429I_Discovery

开发工具:
STM32Cube_FW_F4_V1.15.0
STM32CubeExpansion_AN4701_F4_V1.0.0(从ST网站下载的参考代码)
STM32 STLink
IAR/Keil

注:也可以选择其他支持PCROP的STM32系列,并选择相应的STM32开发板与STM32固件库。

3. 代码

• 设置RDP到级别1

该函数在RDP级别为0时,若需要清除PCROP, 必须被使用。

解读STM32单片机:代码实现 PCROP清除

• 设置RDP到级别0

在清除PCROP保护的代码里不会直接调用这个函数。参考手册提到,PCROP的清除必须与RDP从1到0同时发生,而下列RDP_Disable函数则是完整独立的,无法与PCROP的Option bytes同时操作。不过,这个代码的中间部分,也就是实际功能部分,将在清除PCROP时被重用。

解读STM32单片机:代码实现 PCROP清除

解读STM32单片机:代码实现 PCROP清除

• 清除PCROP

下述代码清除PCROP,它基于参考代码中的PCROP_Enable函数改写而成。首先,它通过RDP_Enable将RDP设置成1。注意实验中不要将RDP设置成为2,否则所有的Option bytes将不再被允许修改。然后将RDP和PCROP都设置完毕,调用一次HAL_FLASH_OB_Launch达到同时将RDP设置成1并清除PCROP保护。

解读STM32单片机:代码实现 PCROP清除

解读STM32单片机:代码实现 PCROP清除

4.运行

在主函数中,调用PCROP_Disable可解除PCROP保护。RDP_Enable后需要关闭电源,重新启动,然后系统正常运行解除PCROP保护。解除保护后,可通过STLink确认PCROP Option bytes已恢复,同时也可以看到整个Flash内容已被擦除。

结论

本文讨论了完全使用代码控制PCROP的设置与清除。它可以使用在PCROP代码保护的开发与部署阶段。

来源: eeworld.com

围观 583

文中介绍的干扰器能够产生3种干扰信号:随机干扰、点频干扰和扫频干扰,其中点频干扰和扫频干扰是基于单片机对DDS芯片AD9852的控制产生,整个系统的控制灵活、高效。测试结果表明,系统能够准确产生所需要的干扰信号,满足抗干扰性能测试的需要。虽然本设计产生的干扰信号位于406 MHz频段,但这样的电路结构也可用于其它频段(需修改VCO、PLL等电路),例如手机通信频段,因此本电路结构对其它频段的应用同样具有借鉴意义。

随着电子设备的使用越来越普遍,电子设备之间的干扰问题也越来越突出,特别是通信设备的干扰问题,这使得电路工程师在电子产品的设计过程中不得不考虑设备的抗干扰问题,并且有必要对通信设备的抗干扰能力进行测试。文中介绍的射频信号干扰器可用于测试通信设备的抗干扰能力,能够产生如下3种干扰:

1)随机干扰。在目标频率范围内产生频率随机的干扰信号,湮没目标频率,也会降低信噪比,形成对正常通信的压制。

2)点频干扰。在已知目标频率的情况下,瞄准目标频率输出干扰信号,产生对目标通信的压制效果。

3)扫频干扰。在目标频率范围内进行频率扫描,当干扰信号频率与通信频率的碰撞概率达到一定数值时,就会影响通信的信噪比,导致误码率增加,产生有效干扰。
射频信号干扰器的设计基于DDS技术和锁相环(PLL)技术,通过单片机进行控制,能够产生分辨率极高的干扰频率,控制方便、灵活。

1硬件电路设计

射频信号干扰器原理框图如图1所示,当微波开关接通406.0~406.1 MHZVCO时,输出随机干扰噪声;当微波开关接通BPF时,输出点频干扰或扫频干扰噪声。

图1:硬件系统原理框图

1.1随机干扰

基带噪声信号源的随机电压噪声施加到VCO的电压控制端,产生噪声调频信号。406.0~406.1 MHZVCO输出信号的频率表示为:
ωvco=ωo+Kvco(Vo+Anu(t)) (1)
式中:ωo为控制电压为零时VCO输出频率,Kvco为VCO电压控制增益,Vo为直流控制电压,An为噪声放大电路增益,u(t)为基带噪声信号。
当微波开关选通随机噪声输出时,输出信号为
Vo(t)=KSKAUvcoCOS(ωo+Kvco(Vo+Anu(t)) (2)
式中:KS为微波开关增益,KA为放大器增益,Uvco为VCO输出信号幅度。干扰机的输出为调频噪声,噪声幅度为KSKAUvco,噪声的中心频率为ωo+Kvco(Vo,噪声频谱的范围取决于Anu(t)的幅度。

1.2点频干扰与扫频干扰

点频干扰与扫频干扰通过单片机控制DDS专用芯片AD9852实现,AD9852具有功耗低,相位累加器位数高,可产生高频率的正弦波等优点。
DDS输出频率:
f0=KF×fc/2N (3)
其中,KF为频率控制字,fc为外部参考时钟的频率,Ⅳ为DDS相位累加器位数。AD9852的频率控制字为48bit,即N=48。
输出频率分辨率由下列公式决定:
Δf=fc/2N (4)
根据Nyquist定理,DDS外部参考时钟频率至少是输出频率的2倍(f0/2),但工程应用中,一般将参考频率设为最高输出频率的5倍以上。本设计中参考频率为97.5MHz,将的值代入式(4),得DDS输出信号的频率分辨率为3.5 × 10-7Hz。
AD9852内置12bit DAC,其输出模拟信号频谱中除f0外还带有fc、fc±f0等频率分量(fc一f0的频率最低),需设计一个LPF将其滤除,此处采用了图2所示的七阶Butterworth低通滤波器,对该滤波器使用ADS仿真的结果如图3所示,81 MHz处的衰减达到- 80.683 dB。

图2:七阶butterwoth低通滤波器

图3:滤波器仿真结果

2软件设计

AD9852的控制一般采用SPI口,普通的MCS51单片机不带SPI 13,需要用P1 13模拟SPI口,并提供IOUD CLK和FSK信号。

AD9852 提供了5种工作模式:Single tone、FSK、Ramped FSK、Chirp、BPSK。Single tone模式输出单一频率,Ramped FSK模式和Chip模式可以产生扫频信号,本设计采用Ramped FSK模式,输出频率的波形如图4所示。

图4:Ramped FSK模式输出波形

图5:软件主程序流程图

单片机软件主程序流程图如图5所示。单片机通过微波开关来选择随机干扰模式或点频干扰,扫频干扰模式,通过向DDS写控制字来控制DDS的输出模式。对式(3)进行变换得到频率控制字:
KF=f0 × 2N/fc (5)

例如,输出频率为16.0 MHz时,KF = 46 190 765 408928=(2A02A02A02A0)16。

3测试结果

对干扰器的3种干扰模式分别进行测试,得到的结果如图6(a)~(c)所示,其中图6(b)是使用频谱仪的最大保持功能记录到的频率扫描轨迹。测试结果满足要求。

图6:测试结果

来源: 华强电子网

围观 433

随着电子技术的不断发展, 家庭中的许多电器设备如彩电、冰箱、空调等都已贴上了智能化的标签, 为提高人们的生活质量做出了贡献。但遗憾的是, 居室的眼睛---窗户, 却迟迟未跟上时代的步伐。即使是在众多的智能化生活小区, 我们都可以发现, 几乎所有的窗户的管理仍然处在原始管理方式, 与电子技术毫不沾边, 更不用说智能化了。如果使窗户具有一定的智能, 如下雨则自动关、室内有害气体超标则自动开、有盗贼入内则自动报警等, 就会给人们的居家生活带来诸多方便, 从而进一步提高人们的生活质量。

沿着这样的思路, 我们设计了以AT89C51 单片机为中央控制器的智能窗控制系统。

该控制系统能通过其数据检测传感电路不断循环检测室内温度、湿度、有害气体(如媒气) 浓度等环境参数,然后与由控制键盘预置的参数临界值相比较, 从而作出开/关窗、转动/停止换气扇、降/升温(湿) 等判断, 再结合窗状态检测电路所检测到的窗状态, 发出一系列的控制命令, 完成下雨则自动关窗、室内有害气体超标则自动开窗(同时转动换气扇) 、恒温(湿) 等自动控制功能。人们还可通过控制键盘, 直接控制窗户的开/关、换气窗的转/停、温(湿) 的升/降、选择所显示参数的种类等。

二、系统组成和部分电路设计

本控制系统主要由AT89C51 单片机组成的中央控制器, 数据检测传感电路, A/D 转换器, 窗驱动控制接口电路、窗驱动电路等组成。其系统框图如图一所示。

基于单片机的智能窗控制系统设计方案
图1 系统框图

中央控制器

中央控制器以美国ATMEL 公司的AT89C51 单片机为核心。

1. AT89C51 单片机系统具有设计简单、性能可靠、功耗低等优点。它为用户预留下足够的软、硬件资源, 可供用户进行再开发应用。该系统除内部已有的4K Flash 存储器外, 还可以扩展选址64KROM区和64KRAM区, 供用户使用。用户在系统开发时, 可以将自己的数据块和程序段、数据表, 以若干控制子程序、数据块形式存放于AT89C51 单片机的扩展ROM或RAM区中, 以便系统工作时重复使用和反复调用。由于本应用系统主要用于温度、湿度、有害气体识别、防盗安全的定点和多点测试, 片内4K Flash 存储器已能满足系统设计要求。

2. AT89C51 单片机机有三级程序存储器加密。利用该功能可防止别人非法复制程序, 从而保护知识产权。

3. AT89C51 单片机还为用户预置了P0、P1、P2、P3 四个并行I/O 口, 为该系统的数据采集和控制提供了足够的端口资源。

4. AT89C51 单片机还为用户提供一组全双工串行数据传输端口, 可用于单片机系统间的远程数据信息交换。

本系统采用P0 数据采集、控制端口, 完成控制信息的采集和控制功能。

P110~P113 作为窗状态检测端口, 完成对窗状态(即窗是否移到边框) 的检测。

数据检测传感电路

数据检测传感电路由四个部分组成:
1) 温度传感电路;
2) 湿度传感电路;
3) 有害气体传感电路;
4) 红外防盗传感电路。

为了讨论问题方便, 我们以温度传感电路为例进行分析。通常, 在自然情况下, 窗户的开关与生活环境和人体的舒适度有关, 温度的测试是该系统设计的关键。为了较好地测出温度参数, 我们选用集成温度传感器AD590(可测-55~+150 ℃) , 其温度检测完全可以满足要求。基本电路如图二所示。

基于单片机的智能窗控制系统设计方案
图2 基本电路

A/D 转换器

为了便于与AT89C51 单片机相连接, 同时又有利于系统设计, A/D 转换器选用了ADC0809.其分辨率为8 位,不必进行零点和满度调整。单一电源( + 5V) 供电, 模拟量输入范围0 -5V.转换速度取决于芯片的时钟频率。

时钟频率范围为10 -500KHZ.ADC0809 有八路模拟量输入, 在本系统中只用4 路输入, 即可完成温度等4 种被测模拟量的A/D 转换。利用单片机对FOH口的数据写启动A/D 转换器, A/D 转换结束ADC0809 的EOC 向AT89C51 发出中断请求信号, CPU 再响应中断请求信号, 通过对FOH 口的读操作, 读取转换结果并送到被测量的相应存储区。

在重新选择被测量(修改各相关指针) , 并再次启动A/D 转换后中断返回。A/D 转换器电路如图三所示。

基于单片机的智能窗控制系统设计方案
图3 A/D 转换器电路

窗驱动电路

我们可以根据驱动信号与所控对象的关系, 将窗驱动电路分解为: 移窗驱动电路; 换窗驱动电睡; 窗锁驱动电路; 温度调节驱动电路; 湿度调节驱动电路; 换气扇驱动电路; 报警驱动电路等, 分别用它们去控制1 个对象。

窗状态检测电路

可考虑采用4 个开关型磁敏器件。外窗、内窗所对应的左、右墙框各1 个。在外窗、内窗的左、右边上与磁敏器件相对应的地方各贴上一小片磁铁。当小磁铁随窗户的移动而移近相对应的磁敏器件时, 该磁敏器件的输出信号从高电平变为低电平, 表示窗户已移到相应边上。

键盘输入及显示电路

可采用Intel 公司生产的8279 通用可编程键盘显示器接口芯片。利用8279 , 可实现对键盘显示器的自动扫描,并识别键盘上闭合键的键号, 大大节省单片机对键盘显示器的操作时间, 从而减轻单片机的负担。该键盘输入及显示电路具有显示稳定, 程序简单, 不会出现误动作等优点。

对于控制键盘, 可考虑采用微动开关制作并安装在窗户的固定边框上。通过控制键盘, 用户不但可设置各环境参数的临界值, 还可随意选择所显参数的种类, 并直接控制窗户的开/关、换气扇的转/停、温(湿) 的升/降等。

三、软件设计

该控制系统的软件主要由一个主程序和两个中断服务程序等所组成。

主程序

主程序的主要作用是在系统复位后对系统进行初始化, 如设置8279、ADC0809 等的工作方式和初始状态, 设置各中断的优先级别并开中断, 以及首次启动A/D 转换等, 然后向8279 循环送显示字符。

读键值中断服务程序

读键值中断服务程序的主要作用是在AT89C51 响应中断(有键按下则产生该中断) 后, 读出键值, 并根据键值从P0 口依序发出相应的控制命令字, 完成相应的控制功能。该中断应设为高优先级。

循环检测及A/D 转换中断服务程序

该中断服务程序的主要作用是在AT89C51 响应中断(A/D 转换结束时EOC 引脚输出高电平, 从而产生该中断) 后, 将A/D 转换结果送相应存储区, 然后判断该转换结果是否在上、下限值之间, 并根据判断结果依序发出相应的控制命令字, 完成相应的控制、报警功能。然后重新选择被转换量, 再次启动A/D 转换后返回主程序。

该中断应设为低优先级。并设为电平触发方式。

程序流程图如下:

基于单片机的智能窗控制系统设计方案
图4 程序流程图

来源: www.dzsc.com

围观 305

引言

传统测量频率的方法主要有直接测量法、分频测量法、测周法等,这些方法往往只适用于测量一段频率,当被测信号的频率发生变化时,测量的精度就会下降。本文提出一种基于等精度原理的测量频率的方法,在整个频率测量过程中都能达到相同的测量精度,而与被测信号的频率变化无关。本文利用(现场可编程门阵列)的高速数据处理能力,实现对被测信号的测量计数;利用单片机的运算和控制能力,实现对频率、周期、脉冲宽度的计算及显示。

等精度测量原理等精度测量的一个最大特点是测量的实际门控时间不是一个固定值,而是一个与被测信号有关的值,刚好是被测信号的整数倍。在计数允许时间内,同时对标准信号和被测信号进行计数,再通过数学公式推导得到被测信号的频率。由于门控信号是被测信号的整数倍,就消除了对被测信号产生的士1误差,但是会产生对标准信号士1的误差。如图1所示。

基于Verilog语言的等精度频率计设计

系统中,如果采用的标准信号源的精度很高,就叮以达到一个很高的测量精度,一般情况下都是采用晶体作为标准信号源,因此可以达到很高的精度,满足一般系统的要求。

2、模块设计

本系统在传统的等精度测量原理基础上进行了改进和优化。增加了测量占空比的功能,同时由内部产生清零信号,节省了资源。改进后的FPGA核心模块如图2所示。FPGA部分主要由门控信号产生模块、计数器控制模块、计数器模块、锁存器、中断输出、数据选择输出、顶层模块组成。

基于Verilog语言的等精度频率计设计

1)门控信号为了测量频率为1H:的信号,要求系统的开门时间不小于1s;同理,为了测量0.1H:频率的信号,要求开门时间最短为109。但是如果系统一直采用10s的门控信号,测量高频信号的等待时间太长,显然不合理,因为测量结果的显示必须要等到一个测量周期结束之后才能更新。本系统采用的方法是,由单片机给FPGA提供一个门控的选择信号,如果FPG人测得的频率小于1Hz,那么单片机自动给出一个启动10s门控的控制信号;反之,如果发现测量的频率大于1Hz,自动切换回1。门控,实现了一个闭环的自动控制,很好地解决了门控的时间问题。

2)计数器控制模块

该模块是本文的创新点所在,主要用来同步被测信号。由前面的分析可知,门控信号启动(上升沿)后,在被测信号的上升沿启动计数允许模块,允许计数器计数;门控信号关闭(下降沿)后,在被测信号的下一个上升沿关闭计数允许模块,停止计数,从而保证了门控信号是被测信号的整数倍,达到了等精度的目的。该模块有GATE,CLKx这2个输人端;ENh,ENx,Load,CLR这4个输出端。GATE为上一级给出的门控信号汉LKesx为被测信号;EN-h,高电平期间对标准信号进行计数,得到CNT_h;EN_x为给出的允许计数信号,在EN-x的高电平期间,对被测信号、标准信号同时计数,得到CNT-x,CNT-b;Load为锁存信号;CLR为计数器清零信号。

由CNTx和CNT_b可以计算出被测信号的频率和周期;由CNTex和CNTh可以计算出被测信号的脉冲宽度。佑直图加图3所式。

基于Verilog语言的等精度频率计设计

3)计数器模块

在设计计数器的过程中需要注意计数器的宽度设置,系统中采用的最大门控时间为10a,标准信号源的频率为50MHz,则在计数的允许时间内计数的最大值为:536870912,为了方便数据传输,系统中采用了32位位宽的计数器。

4)锁存器模块

在门控信号关闭的同时,停止计数,同时启动锁存模块,把测量的数据锁存起来,以便传输。

5)中断输出

锁存数据的同时,给单片机一个低电平的中断信号,通知单片机读取数据。

6)数据选择输出模块

系统中采用了3个32位的计数器,由于单片机采用的是51系列单片机,只有8位的数据总线,所以一次通信只能传输8位数据,3x32/8二12,所以设计了一个数据输出控制模块,由单片机提供4根地址线,译码后可以选择16组数据,单片机得到中断通知后,分12次读取测量的数据。

7)顶层模块

实例化所有的底层模块,同时为了调试方便,加入了一些测试点。FPGA部分的整体结构图如图4所示。

基于Verilog语言的等精度频率计设计

3、单片机模块控制

3.1理论分析

在计数允许EN-x时间内,对被测信号和标准信号同时进行进行计数,得到CNT_x和CNT_b,设被测信号的周期为T,,频率为Fx,标准信号周期为F6.频率为Fb。则有:

基于Verilog语言的等精度频率计设计

系统中采用式(6)一式(8)进行计算,得到最终的测量数据,单片机中采用浮点数进行运算,计算的精度可以满足系统的要求。

3.2硬件电路

系统硬件电路比较简单,就是单片机的最小系统加上液晶显示模块,设计时需要注意,51单片机端口电压是5V输出,而FPGA是3.3V输出,所以在数据传输时要串联一个电阻一般1000一300f2即可。电路原理图如图5所示。

基于Verilog语言的等精度频率计设计

3.3软件设计

单片机软件主要由系统初始化、数据传输、频率、周期、占空比计算、液晶显示等程序模块组成。

基于Verilog语言的等精度频率计设计

基于Verilog语言的等精度频率计设计

下面简单介绍主函数及计算子函数。软件流程如图6所示。

基于Verilog语言的等精度频率计设计

中断服务子程序如图7所示。

基于Verilog语言的等精度频率计设计

4、结束语

本系统设计采用FPGA和单片机结合的方式实现等精度测量频率,充分发挥了FPGA高速的数据处理能力以及单片机的计算、控制能力。采用硬件描述语言对系统进行仿真测试.最终下载到FPGA内部。单片机采用C语言编写程序,利用浮点数进行计算,精度高。同时设计了门控信号自动选择的闭环控制,大大地提高了系统的性能。等精度测量技术在生产、实验等环境中得到了广泛的应用。

来源: 电子产品世界

围观 514

单片机I/O口工作方式基本有以下几类:
1.准双向IO口配置(弱上拉)
小结:
• 灌电流能力强,拉电流能力弱
• 读外部状态前要先锁存“1”(断开下拉晶体管)
• 读IO口状态的原则是非高即低,只能准确识别外部的低电平信号,无法区分悬空和真正的高电平
• 作为输入时,输入阻抗不为高阻,可能出现将外部低电平误读为高电平的情况(例上拉电阻10K,外部电阻100K,IO=5*100/110=4.54V)

单片机IO口工作方式详细分析

其应用方式参考:
单片机IO口工作方式详细分析

准双向口用作输入时,可对地接按键,如图1,当然也可以去掉R1直接接按键,当按键闭合时,端口被拉至低电平,当按键松开时,端口被内部“极弱上拉”晶体管拉至高电平。
当端口作为输出时,不应对地外接LED如图2控制,这样端口的驱动能力很弱(拉电流能力弱),LED只能发很微弱的光,如果要驱动LED,要采用图3的方法,这样准双向口在输出为低时,可吸收20mA的电流(灌电流能力强),故能驱动LED。图4的方法也可以,不过LED不发光时,端口要吸收很大电流。

2.推挽输出配置
小结:
• 能真正输出高低电平,具有很强的驱动能力(灌电流,拉电流能力强)
• 如果当两个推挽输出结构相连在一起,一个输出高电平,即上面的MOS导通,下面的MOS闭合时;同时另一个输出低电平,即上面的MOS闭合,下面的MOS导通时。电流会从第一个引脚的VCC通过上端MOS再经过第二个引脚的下端MOS直接流向GND。整个通路上电阻很小,会发生短路,进而可能造成端口的损害。这也是为什么推挽输出不能实现" 线与"的原因。

单片机IO口工作方式详细分析

推挽输出可以用图2的方式通过拉电流驱动LED灯亮。

3.开漏输出配置
小结:
• 通过外部上拉电阻输出高电平
• 若有外部上拉,可作为输入IO读取外部状态(同准双向IO,先锁存“1”)
• 通过外部上拉电源进行电平转换与外部器件兼容

单片机IO口工作方式详细分析

4.高阻输入
小结:
• 电路无法流入流出,只能作为输入数据使用
单片机IO口工作方式详细分析

转自:
jbh18401的博客
围观 245

1引言

与传统模拟示波器相比.数字存储示波器不仅具有可存储波形、体积小、功耗低,使用方便等优点,而且还具有强大的信号实时处理分析功能。在电子测量领域,数字存储示波器正在逐渐取代模拟示波器。但目前我国使用高性能数字存储示波器主要依靠国外产品,而且价格昂贵。因此研究数字存储示波器具有重要价值。借于此,提出了一种简易数字存储示波器的设计方案,经测试,性能优良。

2 数字存储示波器基本工作原理

数字存储示波器与模拟示波器不同在于信号进入示波器后立刻通过高速A/D转换器将模拟信号前端快速采样,存储其数字化信号。并利用数字信号处理技术对所存储的数据进行实时快速处理,得到信号的波形及其参数,并由示波器显示,从而实现模拟示波器功能,而且测量精度高。还可存储信号,因而,数字存储示波器可以存储和调用显示特定时刻信号。

3 系统分析论证

3.1 A/D实时采样

根据奈奎斯特采样定理,采样速率必须高于2倍的信号最高频率分量。对于正弦信号,一周期内应有2个采样点。为了不失真恢复被测信号,通常一周期内需要采样8个点以上。为了配合高速模数转换器,采用FPGA控制M/D转换器的采样速率,以实现高速实时采样。实时采样可以实现整个频段的全速采样,本系统设计选用ADI公司的12位高速A/D转换器AD9220,其最高采样速率可达10 MHz。

3.2 双踪显示

本系统设计的双踪显示模块是以高速切换模拟开关选通两路信号进入采样电路,两路波形存储在同一个存储器的奇、偶地址位。双踪显示时,先扫描奇地址数据位,再扫描偶地址数据位。采用模拟开关代替一个模数转换器,避免两片高速A/D转换器相互干扰,降低系统调试难度,并且实现系统功能。

3.3 触发方式

采用FPGA内部软件触发方式,通过软件设置触发电平,所设置的施密特触发器参数易于修改,从而抑制比较器产生的毛刺。当采样值大于触发电平,则产生一次触发。该方式充分利用了FPGA的资源,减少外围电路,消除硬件毛刺产生的干扰,易于调整触发电压。

3.4 波形显示位置的调节

3.4.1 行扫描调节

通过控制FPGA内部双口RAM(1 KB)的起始地址的偏移量确定来控制波形的移动。其具体方法是将滑动变阻器R上的电平通过模数转换器转换为数字信号传输给FPGA,再与初始电平数字信号(显示位置复位时,滑动变阻器R的电平采样值)相比较决定起始地址ADR0的偏移量。该方法可易于实现波形满屏和自动显示功能。

3.4.2 列扫描调节

MAXl97采样A、B通道的Position电位器值,所得采样值经FPGA送至16位串行D/A转换器,MAX542产生直流电平,该直流电平与列扫描波形相加送至模拟示波器显示,实现波形上下移动。为分离A、B通道,在读A通道波形数据时,FPGA必须将Position A电位器的值送至D/A转换器;而在读B通道波形数据时,也必须将Position B电位器的值送至D/A转换器,这样可在调节某一电位器时,实现相应通道波形上下移动。

3.5 波形数据存储

数字示波器存储波形数据可采用外接的双口RAM或通用静态RAM,同时FPGA可控制RAM的地址线,从而实现波形数据的存储。双口RAM可同时进行读写操作,由于本系统设计采用FPGA,因此可充分利用FPGA的逻辑阵列和嵌入式阵列,可将双口RAM写入FPGA内部,从而无需外接RAM,减少硬件电路,提高简易数字示波器的可靠性。

4 系统设计方案

本系统设计框图如图1所示。整个系统是以FPGA为核心,包括前端模拟信号处理模块、单片机模块、显示模块和键盘输入模块。而信号的前级处理模块又包括射级跟随器、程控放大电路、整形电路。A、B通道的信号经前级处理变为O~4 V,AD9220对其采样。波形存储控制模块将其采样数据写入FPGA内部RAM,再由波形显示控制模块进行显示。FPGA通过编程设置实现测频、键盘扫描、显示驱动、波形存储控制等功能。单片机AT89S52控制整个系统键盘和点阵液晶模块实现人机交互。通过面板按键可方便调整波形显示方式。

基于单片机和FPGA的简易数字存储示波器设计

5 硬件电路设计

5.1 程控放大电路

采用模拟开关CD4051、宽带运算放大器AD844及精密电位器实现10 mV/div~2 V/div的多档垂直分辨率。FPGA含有通道选择寄存器模块,通过单片机写入通道号控制模拟开关以选通不同的反馈电阻,实现不同放大倍数,将信号调理在满足AD9220的0~4 V的范围内,具体电路如图2所示。

基于单片机和FPGA的简易数字存储示波器设计

5.2 数据采集模块

本系统设计采用ADI公司的高速模数转换器AD9220实现波形信号的采集,AD9220最高采样速率可达10 MHz,采用外部晶体振荡器8 MHz,FPGA内部通过采样实现波形存储。AD9220有直流耦合和交流耦合两种输入方式。本系统设计采用直流耦合,0~5 V的输入方式。采用内部2.5 V参考电压。由于系统垂直分辨率只需255级,故采用AD9220的高8位。数据采集电路如图3所示。

基于单片机和FPGA的简易数字存储示波器设计

5.3 FPGA设计

系统采用Verilog HDL语言,在QuartusII软件下对FPGA进行逻辑电路的描述编程,可灵活实现系统所需电路和控制模块。

5.3.1 触发模块

单片机先向FPGA模块写入设置的触发电压,FPGA内部相比较后,当采样值大于该触发电压时,则产生一次触发。图4为触发模块。

基于单片机和FPGA的简易数字存储示波器设计

5.3.2 程控放大控制模块

单片机首先以100 mv/div的档位对信号采样,通过比较与该信号最近的模拟开关的通道号,然后写入控制字,产生相应通道号,实现垂直分辨率的调整。

5.3.3 波形存储控制模块

该模块为RAM模块的写地址累加器,可控制波形的存储。H_sering为单次和多次触发控制引脚,当为高电平时,单次触发,停止向RAM写入数据,所显示波形为存储波形;为低电平时,多次触发,当检测到一次触发时,即向RAM写一次数据,共l K个点,并在写操作时屏蔽触发。写地址先写奇地址,存入通道一采样后的波形数据,后写偶地址,存入通道二采样后的波形数据。如果连续多次检测不到触发时,向RAM中写入全0,显示一条直线,即实现自动捕捉功能。波形存储控制模块如图5所示。

基于单片机和FPGA的简易数字存储示波器设计

5.3.4 波形显示控制模块

该模块为读地址累加器,从RAM中读取数据,并产生行扫描和列扫描数据。通过单片机写入累加器基地址,改变读取数据的起始位,实现波形的平移。该模块还可计算波形的峰峰值、平均值,单片机可直接读回数值。波形显示控制模块如图6所示。

6 系统软件设计

系统软件设计实现人机交互、信息提示、系统启动与复位等功能。首先系统初始化,显示默认通道波形,再等待按键按下。当按键按下后,完成相应功能,显示相应波形,然后循环等待。系统软件设计流程如图7所示。

基于单片机和FPGA的简易数字存储示波器设计

7 测试结果

使用自制的数字存储示波器和tektronix TDSl002型数字示波器测量输入信号,其中部分测量数据如表1所列。

基于单片机和FPGA的简易数字存储示波器设计

通过对比测试和结果分析,各种输入信号在自制数字存储示波器上可精确显示波形,并且实现波形的双踪显示及波形水平、垂直平移,频率、平均值、峰峰值的测量,误差小,达到一定的精度要求。
8 结语

本系统设计采用单片机作为核心控制器,充分利用FPGA的可编程逻辑功能,完成相关电路设计。软硬件有机结合实现简易数字存储示波器的设计,系统总体功能完善,稳定性高,使用方便。

来源: 电子工程世界

围观 492

本篇文章对于上拉电阻在单片机当中的重要作用进行了细致的介绍,相信在阅读过本篇文章之后,大家对于为什么要在单片机中添加上拉电阻有了一定的认识。希望大家在阅读过本篇文章之后能够有所收获。

在单片机系统当中,上拉电阻逐渐成为了最为稳定也最为可靠的主要组成部分。大多数人知道上拉电阻在单片机系统当中的重要作用,但却不知道为什么如此重要。

本篇文章就将为大家解释上拉电阻的重要性,为什么管脚和单片机大部分都要接上拉电阻呢? 专家称管脚和单片机接上拉电阻是必然的,上拉电阻和下拉电阻相比,上拉电阻要更胜一筹。

众所周知,上拉电阻就是将不确定的信号通过一个电阻钳位在高电平,输入电流,电阻同时起到限流的作用。阻值的强弱只是上拉电阻的组织不同,实际上并没有什么严格区分。对于非集电极开路输出型电路或漏极开路输出型电路来说,上拉在这种类型的电路中对提升电流和电压的能力是有限的,它的主要功能还是为集电极开路输出型电路输出电流通道。

通常来说,在管脚接上拉、下拉的设计方面有两个原因直接决定了上拉电阻的接入。一是在正常工作或单一故障状态下,管脚都是不应该出现不定状态的,如接头脱落后导致的管脚悬空情况。 二是从机体的功耗角度出发,长时间处于管脚等待状态下,管脚端口的电阻上不能消耗太多电流,这一点对电池供电设备的使用寿命和安全性来说尤为重要。

从抗扰的角度来说,信号端口也应当优先选择上拉电阻。接入上拉电阻时,在待机状态下源端输入常为高阻态。此时如果没有上拉电阻的接入,那么输入导线将会呈现天线效应,一旦管脚受到了辐射干扰,管脚输入状态就非常容易被感应发生变化。

除此之外,管脚接入上拉电阻后,最重要的一点就是能够提供一个泄流通道,防止高电平干扰。如果此时出现了强辐射干扰,强度甚至超过了Vcc的电平,那么导线上的高电平干扰会通过上拉电阻提供的泄流通道泻放到Vcc上去。因此,无论是怎样的辐射干扰,都不会产生误触发的情况,对系统的安全性能提供了极大的保障。

最近,一些工程师在处理IIC单片机接口的工作问题时,对外部接上拉电阻的做法感到疑惑。

由于单片机内部已经设置了上拉电阻,对于外部是否还需要接上拉的情况业界一直存在争议。 由于一些单片机型号内部就设置了上拉电阻,因此有些上拉能力够了,是可以不加上拉电阻,有些不够,那就必须在外部加上拉电阻。

在这种情况下,主要是取决于工程师所使用的单片机是否有标准的IIC标准接口。如果单片机使用了标准的IIC接口,那么接口在使能时引脚将进入漏极开路模式,可以省去外部接入的上拉电阻。但如果是使用单片机的引脚模拟IIC协议的话,就需要结合单片机引脚是否支持漏极开路模式或者上拉模式来进行判断,这种情况下一般是需要接入一个外部的上拉电阻的。

除此之外,在IIC接口接入上拉电阻,也可以起到保护作用。

由于I2C接口在工作时主要负责的是对高低电平检测的作用,一旦没有了上拉电阻的保护而直接接电源,出现器件拉低时整个系统就非常危险。根据I2C总线规范,总线空闲时两根线都必须为高。根据IIC总线规范的要求,总线空闲时两根线都必须为高。但由于IIC接口采用OpenDrain机制,本身只能输出低电平而无法主动输出高电平,所以只能通过外部上拉电阻RP将信号线拉至高电平。因此I2C总线上的上拉电阻是必须要接入的。

来源: 21ic

围观 390

1.引言

在电子仪器、仪表的制造及使用行业,有大量的印刷电路板需要调试、测量与维修,需要对电阻电容的数值进行测试。

本文介绍了一种基于AT89C51单片机和555定时器的数显式电阻和电容测量系统设计方案,然后制作出电路实物,实现系统的功能。系统利用555定时器和待测电阻(或电容)组成多谐振荡器,通过单片机定时器测量555输出信号的周期,根据周期和待测电阻(或电容)的数学关系再计算出电阻(或电容)值,再通过1602液晶显示器将其显示出来。经仿真结果表明该测量系统具有结构简单,方便实用等优点。

2.设计方案与原理

2.1 设计总方案

整个测量系统由单片机最小系统,按键,电阻、电容和555组成的多谐振荡器和液晶显示等几个电路模块组成。如图1所示。

采用555定时器和单片机的RC测量系统设计方案

2.2 多谐振荡器原理
采用555定时器和单片机的RC测量系统设计方案

如图2所示,测量电容时,利用555和待测电容CX和电阻R1和R2(R1和R2为已知电阻)等组成多谐振荡器,这样从555的输出端Q将输出周期性方波,接到示波器,如图2(b)所示。该信号不是一个占空比为50%的方波,根据参考文献2,一个周期T中高电平时间持续时间为:
采用555定时器和单片机的RC测量系统设计方案

测量电阻时,另用一个555组成一个多谐振荡器电路,将待测电阻RX接在R1的位置(或者将RX和一个已知电阻串联),CX替换成一个已知的电容C.这样一个周期时间为:
采用555定时器和单片机的RC测量系统设计方案

2.3 单片机计时原理

555输出的周期性方波信号送给单片机进行计时,测量出信号的一个周期时间T,再利用上面的数学关系进行计算处理,得到待测的电容或者电阻值。单片机计时的原理是:利用单片机的外部中断0和定时器0.555的输出信号接到单片机的外部中断0引脚P3.2,将其设置成下降沿触发。当555的输出信号为下降沿时,触发外部中断,开启单片机的定时器0开始计时,直到下一次下降沿到达时,即一个周期到达了,停止计时,这时定时器记下的就是一个周期的时间长度。

3.硬件模块设计

3.1 单片机最小系统

系统核心的控制器采用的是AT89C51单片机,图3所示为单片机最小系统,包括单片机和单片机正常工作需要的晶振电路和复位电路。Proteus中默认单片机电源和地已接好,所以图中省去了。

采用555定时器和单片机的RC测量系统设计方案

3.2 按键电路

按键电路用于确定是测量电容还是电阻,如图4所示,采用了一个单刀双掷按键。当按键打到上方接通单片机P3.6引脚时,用于测量电容;打到下方P3.7引脚时,用于测量电阻。

采用555定时器和单片机的RC测量系统设计方案

3.3 555多谐振荡器
采用555定时器和单片机的RC测量系统设计方案

如图5所示,利用555和待测电容或者电阻组成多谐振荡器,555产生的周期性方波从Q引脚输出,然后接至单片机的外部中断INT0引脚,即P3.2引脚。测量时,两电路只有一个接至单片机,分别用于测量电容和电阻。

3.4 液晶显示电路

采用555定时器和单片机的RC测量系统设计方案

测量的结果要显示出来,本系统采用LCD1602作为显示器,图6为LCD1602和单片机的连接电路,P0口接了上拉电阻,作为数据口;P2口的前3位作为读写和使能的控制引脚。

4.软件设计

系统软件流程图如7所示。接通电源,首先是初始化工作,包括定时器T0、外部中断0和LCD1602的初始化。然后启动555芯片,通过单片机判断是否有中断请求,若无的话,继续等待中断请求;若有的话,启动定时器开始计时直到有中断请求时停止计时。得到计时值,即555输出信号的一个周期后,判断是测量电阻还是测量电容。判断后将电阻或者电容值由LCD1602显示出来。

采用555定时器和单片机的RC测量系统设计方案

5.仿真结果

将上述各电路模块整合到一起,组成一个测量系统。采用Keil编写好程序无误后,在Proteus中进行电路仿真。分别测量一个50kΩ电阻和一个150μF电容的仿真结果如图8所示。从中可以看出,测量有一定的误差,这主要是因为采用前面公式计算时取了近似值。仿真通过后,按照仿真电路,购买需要的元器件,制作出实物电路。

采用555定时器和单片机的RC测量系统设计方案

6.结束语

本文介绍了一种基于555定时器和单片机的电阻和电容测量系统设计方案。在系统的设计和仿真中,是以Keil和Proteus两种软件为平台。在Keil中使用C语言编写了程序,再利用Proteus仿真了系统电路的功能。该测量电路简单可靠,较易实现,能够测量一定范围内的电阻和电容值从而证实了本设计方案的实用性。

来源: eepw

围观 425

本文分析了基于AT89S51 单片机的角度测量的硬件组成、电路设计原理。给出了主函数的工作流程和源代码。设计样机已通过多种环境实验的测试。

角度测量仪是某控制系统中瞄准装置的关键部件。在以往的控制系统中,多数都是仅凭设备操作人员眼睛瞄准指定目标,然后作出相应的控制,这样就带来一系列问题,如操作人员的经验、瞄准装置转盘的空回都可能会严重会影响瞄准目标的精确程度,从而严重影响控制系统的精度。为了提高控制系统的瞄准精度,在控制系统的瞄准装置中增加了角度测量仪部件,操作人员瞄准目标后的角度值能够精确定量地显示在操作面板上,帮助操作人员更加准确地瞄准目标,因此,极大地提高了控制系统的控制精确度。

角度测量仪利用光电编码器读取角度值,采用AT89S51 单片机实现角度值数码显示、角度值偏差范围的发光二极管指示功能(有三个指示灯,分别指示:偏高、偏低、适中)。不论在操作的复杂程度上还是在测量的精度上,都是传统的眼瞄方法、刻度测量及标识方法无法比拟的。

作为某控制系统的瞄准装置的重要技术改进,此仪器的应用大大提高了控制系统瞄准的精度,增加瞄准偏差范围的可读性,淘汰了传统的用刻度测量和标识角度的方法,使该控制系统的整体性能得到了显着提高。此外,该角度测量仪只要稍作改动即可广泛用于其它工业控制系统中。

1、硬件基本原理

首先,角度测量仪利用单片机读取光电编码器测出的角度值,再将角度值转换成密位值并显示在数码屏上(注意: 密位(mil) 是一种角度单位,密位100 = 角度6°)。单片机判断当前角度值的偏差范围,给出控制信号点亮相应的发光二极管指示灯。此外,角度测量仪还可以通过控制面板上的开关控制实现瞄准镜照明和低温环境下瞄准镜自动除霜功能。单片机的主要功能是实现角度值数码管显示、角度值范围的发光二极管指示。该系统的难点在于确保角度值转换成密位值的转换精度和系统在非常温环境下的工作可靠性。

硬件分为以下几个模块:控制面板、单片机、光电编码器、电源、数码显示器、发光二极管匹配指示装置、周视镜与直瞄镜照明与除霜,如图1所示。

基于AT89S51单片机的角度测量仪的设计

1. 1 单片机的选用

首先,根据项目的需求分析可以得知单片机要完成的主要功能是:从光电编码器(数据总线宽度是15 位) 读取角度值后,将该角度值与系统预设的角度值比较,判断瞄准的角度值范围,点亮相应的指示灯。然后将从光电编码器读得的角度值转换成密位值,发送给串行L ED 显示驱动器MAX7219 ,显示在LED 显示器上。
从以上分析可以得知,适合此需求的单片机至少应具备3 个8 位并行I/ O 端口(其中光电编码器占用2 个端口,其它占用1 个端口) ,才能有效工作。众所周知,产品的品质等级通常分为三级:军用级、工业级和商用级,其中,军用级等级最高,商用级等级最低。由于此工业控制设备通常在户外作业,工作环境比较恶劣,故单片机的品质的等级也是需要考虑的一个重要因素。

目前,MCS - 51 系列单片机技术成熟,开发所用的教材和技术资料多,开发工具齐全,市场上产品种类丰富、性价比较高、购买容易,开发语言简单易学(可以用汇编或C51) ,因此,该系列产品应用广泛,经久不衰。

经过综合考虑,单片机采用ATMEL 公司生产的AT89S51 芯片(MCS - 51 系列单片机的工业级产品) , 兼容MCS51 微控制器,4 K 字节FLASH 存贮器支持在系统编程( ISP) 1000 次擦写周期,128 字节片内RAM ,工作电压4. 0 V 到5. 5 V ,全静态时钟0 Hz 到33 MHz ,三级程序加密,4 个8 位的可编程I/ O 端口,2/ 3 个16 位定时/ 计数器,6/ 8 个中断源,全双工UART ,低功耗支持Idle 和Power down 模式,Powerdown 模式支持中断唤醒,双数据指针,上电复位标志。ATMEL 公司生产的89 系列单片机在工业、交通、仪器仪表、自动生产过程、航空、运输、汽车、家电等领域都有着极及其广泛的应用。所选型号为ATMEL 公司的AT89S51 - 24PI ,工业级。能适应- 45 ℃~ + 80 ℃环境工作。

单片机的I/ O 端口资源分配是: P0 和P2口分配给光电编码器,P1 口分配给显示驱动和匹配指示发光二极管控制以及MAX813.

1. 2 单片机主要外围电路的设计

监控电路:为了提高单片机在恶劣环境下的可靠性,必须采用μP 监控电路来增加单片机的稳定性和抗干扰能力。硬件监控电路有以下功能:(1) 上电复位:保障系统加电时能正确地启动。(2) 掉电复位:当电源失效或电压降到某一电压值以下时,产生复位信号对系统进行复位。(3)看门狗定时器:当处理器遇干扰,程序运行混乱产生"死锁"时,对系统复位。此处采用MAXIM公司的军用级芯片MAX813LMJA.
显示驱动电路: 为了节省单片机I/ O 口资源,降低单片机的计算量,选用串行L ED 显示驱动器MAX7219. 它能控制8 位共阴级L ED 数码管,具有16 级亮度控制、译码灵活,上电发光二极管全熄、只占用三根单片机I/ O 口线等优点。

单片机及主要外围电路的原理如图2 所示。

基于AT89S51单片机的角度测量仪的设计

1. 3 单片机与外围器件的数据通信

单片机与光电编码器:因为光电编码器获得角度值的速度远大于单片机的工作速度,所以,单片机可以认为光电编码器上的数据总是处于"准备好"状态,单片机随时可以读取有效数据,16 位的角度值分成高8 位和低8 位两次读取,它们之间的数据是并行无条件传送。

单片机与MAX7219 :从单片机和MAX7219的工作速度来看,CPU 两次发送数据给MAX7219 的时间间隔,足以保证单片机访问MAX7219 时,MAX7219 总是处于"准备好"状态。而MAX7219 又是串行L ED 显示驱动器,因此,单片机与MAX7219 的数据传送是串行无条件传送。

单片机与MAX813 :因为单片机向MAX813发送数据时,MAX813 只等待接收单片机的初始化数据而并无其它的工作其工作速度足够快,可以认为MAX813 总是处于"准备好"状态。因此,单片机与MAX813 的数据传送也是串行无条件传送。

2、软件设计原理

角度测量仪启动工作后,单片机的工作过程是:系统启动后,初始化外部看门狗,初始化显示驱动芯片MAX7219 ,给看门狗计数器赋初值,读取光电编码器获取的角度值,当角度偏差值处在某一特定范围时,单片机发出控制信号点亮与该范围相对应的指示灯,将当前的角度值转换成密位值显示在数码屏,又重新给看门狗计数器赋初值,进入下一个工作循环。主函数的工作流程如图3 所示。

基于AT89S51单片机的角度测量仪的设计

请注意,流程图中,带双线边的矩形框表示该部分为函数。在本课题的软件设计中,采用了C51 编程语言,因为用C51 编程不仅效率高,而且可读性很强。

下面给出主函数的源代码。

void main (void)
{
WDI = 0 ; / / 初始化看门狗
INItMax7219 () ; / / 初始化MAX7219 的函数
while (1) {
WDI = 1 ; / /"喂狗"
WDI = 0 ; / /"喂狗"
GetAngle () ; / / 读角度值的函数
MachView() ; / / 指示灯匹配显示的函数
GetMil () ; / / 计算密位值的函数
DisplayMil () ; / / 显示密位的函数
}
}

在主函数调用的几个函数中,InitMax7219() 的功能是初始化L ED 显示驱动器MAX7219 ,单片机向MAX7219 发送消影控制、亮度、扫描范围、译码方式信息。

GetAngle () 的功能是从光电编码器读角度值,先读高8 位,再读低8 位,然后将高8 位和低8 位合并,最后舍去最低位(光电编码器的有效数据是15 位) .

MachView() 的功能是角度偏差指示灯匹配显示,将该角度值与系统预设的角度值比较,判断瞄准的角度值是偏高、偏低还是适中。如果角度值偏高,那么单片机就发出控制命令,使偏高指示灯亮,如果偏低,则令偏低指示灯亮,否则令适中指示灯亮。

值得注意的是,计算密位值的函数GetMil() 的代码编写,要考虑角度的转换精度,在本课题中,采用了C51 中的long 型变量来分别存放密位的整数和小数部分,并将角度的小数部分放大十万倍后参加运算,保证转换精度。

DisplayMil( )的功能是驱动MAX7219 显示密位。首先显示密位,判断此角度是否进入预设区,如果是,熄灭符号灯,各位显示"0";如果没有,判断角度值是否为负,如果是,显示负号,如果是正,不显示负号,然后将角度值显示在L ED显示屏上。

3、结束语

为了使角度测量仪能在各种可能的恶劣环境下(如高温、低温、振动等环境) 正常工作,在整个设计过程中,要着重考虑的问题是硬件的可靠性和软件的可靠性。

设计时的注意事项如下:

(1)电源芯片的额定功率选择要留有余量。
(2) 元器件选择工业级或军用级产品。
(3) 采用硬件看门狗方案,防止单片机程序锁死。
本课题设计的样机已处于测试阶段,目前已通过了常温和多种环境试验的测试。

来源: 21ic.com

围观 327

MCS- 51系列单片机的指令系统是一种简明高效的指令系统,其基本指令共有111条,其中单字节指令49条,双字节指令4'5条,三字节指令17条。如果按功能可以讲这些指令分为五类:数据传送类(29条)、算术操作类(24条)、逻辑操作类(24条)、控制转移类(17条)以及位变量操作类(17条)。对于反向设计而言,我们关心的不是它的各种具体指令的多少而是指令的寻址方式。所谓的寻址方式就是寻找确定参与操作的数的真正地址。MCS-51系列单片机的111条指令一共只采用了5种寻址方式。5种寻址方式以及它们的寻址空间如表1所示。

基于EDA技术的8051单片机指令系统剖析
表1:表寻址方式及寻址空间

1.寄存器寻址

寄存器寻址方式可用于访问选定寄存器区的8个工作寄存器RO-R7。由指令操作码的低三位指示所用的寄存器,寄存器A, B, DPTR, AB和Cy位(位处理机的累加器)也可作为寻址对象。在这种寻址方式中被寻址的寄存器的内容就是操作数。

在实现这类寻址方式时,确定被寻址寄存器的物理地址时关键。由于选定寄存器区由PSW的相关位来决定,指令的低三位又指示了具体的寄存器,所以可以用下面的VHDL语句来确定相关寄存器的物理地址:

rr_ adr<=unsigned((psw and“00011000”)or(rom_data_i and“00000111”));

其中rr_ adr表示的是寄存器的物理地址,rom_data_i表示的是指令代码。物理地址确定以后,对RAM的操作就很好进行。

2.直接寻址

直接寻址是访问特殊功能寄存器的唯一方法。它也可以用于访问内部RAM(128个字节)。采用直接寻址方式的指令是双字节指令,其中第一个字节是操作码,第二个字节是内部RAM或特殊功能寄存器的直接地址。地址已经给出,显然不需要像寄存器寻址那样先计算地址,直接针对由ROM给出地址就可以对RAM进行相关操作。

3.寄存器间接寻址

寄存器间接寻址可用于访问内部RAM或者外部数据存储器。访问访问内部RAM或者外部数据存储器的低256个字节时,可以采用RO或R1作为间址寄存器。这类指令为单字节指令,其最低为表示采用RO还是R1作为间址寄存器。访问内部RAM和外部数据存储器时采用不同的指令,所以不会引起混淆。

访问外部数据存储器,还可用数据指针DPTR作为间址寄存器,DPTR是16位寄存器,故它可对整个外部数据存储器空Il(64K)寻址。

在执行PUSH(压栈)POP(出栈)指令时,也采用寄存器间接寻址,这时堆栈指针SP用作间址寄存器。

实现这类寻址方式必须分为两步,首先确定4个通用工作寄存器区中可以作为间接寻址寄存器的8个单元的地址,然后读出所选定的寄存器中的值,这个值就是当前指令要寻址的空间的物理地址。确定间接寻址寄存器的地址可以由下面的VHDL语句来实现:

ri_adr<=((psw and“00011000”)or(s-command (7downto 0) and“110000000111”)),

其中ri_ adr表示的是用于间接寻址的寄存器的物理地址,s_command表示的是当前指令的操作码。然后通过另外一个读RAM的进程就可以确定间址寄存器中的值,从而得到指令需要的存储器单元的地址。至千其他特殊功能寄存器作为间址寄存器的情况,由于间址寄存器的地址事先已经能够确定,所以这种方式下寻找存储器单元的地址就仅需要上述两步中的后一个步骤就可以确定指令需要的存储器单元的地址。

4.立即寻址

采用立即寻址方式的指令是双字节的,第一个字节是操作码,第二个字节是立即操作数。因此,这种寻址方式实现起来比直接寻址还要容易,操作数就是放在程序存储器内的常数。

5.基址寄存器加变址寄存器间接寻址

这种寻址方式用于访问程序存储器的一个单元,该单元的地址是基址寄存器(DPTR或PC)与变址寄存器A的内容之和。虽然这类寻址方式也是间接寻址,对于使用DPTR作为基址寄存器的情况,它的实现方法和用数据指针DPTR作为间址寄存器时的间接寻址的情况很相似,因为其间址寄存器事实上还是确定的。与用数据指针DPTR作为间址寄存器时的间接寻址的情况有所不同的是,确认最终需要的地址还要进行一次加法运算,这在使用VHDL语言描述的时候是很容易实现的。用PC作为基址寄存器时,需要知道PC当前值,但是PC和DPTR是不同的,DPTR是特殊功能寄存器,利用它的地址就可以读出其值,PC并没有被分配地址,不能使用读RAM的方式取得其值,所以内部有必要设置编写这样一个进程,它用于读出那些位于CPU内部、没有分配地址的辅助寄存器的值。

来源: EEPW

围观 289

页面

订阅 RSS - 单片机