当前位置:文档之家› 51单片机总线方式1

51单片机总线方式1

51单片机总线方式1
51单片机总线方式1

单片机总线设计法全攻略

1、目前广大工程师在设计单片机系统时的两种方案之我见

针对51单片机,工程师们在设计系统时,从宏观上讲无非就是两种方案:总线式设计方案和非总线式设计方案。所谓总线式设计方案就是利用51单片机的读写外部RAM功能,将要设计的外部设备(比如说键盘、液晶等)统统挂到单片机总线上,使其统一按类似读写外部RAM功能的指令方法进行操作;而所谓非总线式设计方案,则是不利用单片机的读写外部RAM功能,而直接利用I/O 口读写方式进行外部设备的读写,比如说LED灯、液晶等,因为液晶有两种读写方式,总线方式和模拟I/O方式(贵刊也有文章介绍过),而这里读写液晶的模拟I/O方式就是这里我要说的非总线式设计方案。

那么这两种方案到底哪一种好呢?说这句话可能有点外行,我自己也这样认为,但是为了更好的让初学者了解其中的道理,我还是班门弄斧简单阐述一下:首先要说明,我的这种阐述是建立在有读写外部RAM功能的单片机的基础之上的。我个人认为,两种方案各有利弊:

对于总线式设计方案来说,优点就是能够充分发挥单片机的总线读写功能,系统一旦设计完成,易于日后的升级和扩展。缺点是灵活性差,硬件连接比较固定;同时由于单片机读写总线时必定要产生一定的总线时间延迟,这样对于低速的单片机来说,如果设计的系统非常庞大的话,那就需要设计人员考虑一下实时性要求了,但是根据我个人多年来的开发经验来说,只要设计得当,一般问题不大,但还是将此问题摆出来,让大家商榷。

对于非总线式设计方案来说,最大的优点就是灵活性强,这种方案可以根据设计者的爱好自由选择单片机端口进行外围设备的设计(当然是要在符合设计原则的前提下),缺点是升级需要重新设计电路图。

2、总线法设计单片机系统的原理和方法

2.1 总线法设计原理简介

总线式设计方案对于很多的初学者来说是比较困难的,因为对于这种方法

来说,牵扯到单片机和外围设备时序逻辑的分配、地址空间的分配、总线驱动能力等等的问题,一旦设计不好,系统便无法启动,或者说部分模块无法工作。确实,总线式设计方案存在一定的难度,我想这大概也就是很多初学者甚至包括很多单片机设计工程师们也更趋向于利用非总线式设计方案来进行单片机系统设计的原因吧(仅为个人观点,如有不对,还望切磋)。所以在这一节接下来的内容中我将会带领大家踏入单片机总线式设计方案的大门,让你领略一下在这块设计领域的无限精彩。

首先我们先来看看51单片机读写外部RAM的时序图,如图1、2所示:图1为51单片机读外部RAM的时序图。

图1 51单片机读外部RAM的时序图

注意在这里我们只需要关心ALE、RD、PORT0、PORT2四个信号的时序,而不必关心PSEN信号,因为这个信号是用来控制读写外部程序存储器的,跟我们的讨论不相关,有兴趣的可以自行研究,下同。下面我就跟大家一起讨论一下这四路信号是如何共同使用的。

有过设计经验的人都很清楚,ALE信号就是我们常说的地址锁存信号,那么它为什么要锁信号呢?锁谁的信号呢?又是如何锁的呢?第一、二个问题很简单,因为51单片机的P0口是地址/数据复用的8位端口,在读写外部RAM时,P0口上会顺序接连出现你要读写的地址信号和读到或要写的数据,如果当地址信号出现时不将此8位地址锁住,那么它将会迅速消失,便无法利用此地址进行

外部存储器的地址选择;而针对第三个问题,信号时如何锁的,稍微有点麻烦,因为灵活性很大。大家请仔细看图1的ALE 和PORT0两个信号,

LHLL t ——ALE 的有效脉冲宽度

AVLL t +——为P0口地址信号的有效时间长度

LLAX t 我们先暂且研究一下这两个信号便可解答上面的问题,注意到P0口地址的有效时间长度为+两个时间长度的和,那么我们到底在哪个时间段来锁存地址信号呢?通过时序图我们可以发现,显然必须在ALE 的有效脉冲宽度内来截取这个P0口的地址信号,那么有人会问多出这个时间段干什么用,在这个时间段内P0口其实也在继续保持有效的低8位地址,请继续往下看便可理解。好了,既然这样,我们要锁存此时的P0口地址信号很显然就要在ALE 的有效脉冲宽度内来动手脚了,大家一看,哈,这简单,这要在ALE 信号为高电平的时候,直接利用373芯片获取P0口地址信号不就完了嘛!不错,是的,目前大家都是这么做的。那么我现在问你,方法唯一吗?我这么一提醒,大家可能又会想,奥,对了,在ALE 信号的两个边沿也可以啊!那么你又错了,我说还有一个方法就是在ALE 信号的下降沿可以,上升沿是不行的啊!为什么啊?你看看图1的时序,P0口地址的有效起始时间的左边沿在ALE 信号的有效脉冲上升沿后面呢,这显然不行吧!当然我们经常用的方法还是利用74ls373这类高电平传输的芯片。这里告诉了大家两种方法,只是想提醒大家有时候方法是非常灵活的,后面我会就这两种锁存地址的方法分别以实例的形式体现在大家面前。

AVLL t LLAX t LLAX t AVLL t 好了,地址我们锁存完了,既然P0口是地址和数据复用端口,那我们再来研究一下后面的数据又是怎么传输的。为了更好的让大家同时了解外部存储器的读和写的原理,这部分我打算结合图2介绍一下数据的写入。

图2为51单片机写外部RAM 的时序图。

图2 51单片机写外部RAM 的时序图

同样在这里我们只需要关心ALE 、WR 、PORT0、PORT2四个信号的时序。 请看下面几个时间量:

LLWL t ——ALE 信号跳为低到WR 信号开始变低的时间段

WLWH t ——WR 信号有效宽度

QVWX t ——P0口数据有效开始到WR 信号开始有效

WHQX t ——WR 信号有效结束到P0口数据有效结束

通过上面我们可以看出,也就是说在ALE 信号跳为低电平以后,延迟这么长的时间后,LLWL t WR 低电平信号会紧跟着出现,注意这个信号是单片机自动产生的,很多读者总是以为要设置什么寄存器之类的东西,容易出现迷惑,只要我们在程序里一调用MOVX 或者在C 语言里读写XDATA (外部)的地址,WR 或者RD 便会自动出现了。于是乎这时候我们便可以写入我们需要传输的数据了。问题由来了,我们在什么时候把数据写入到外部RAM 或者说外部设备呢?这里请大家注意,我们发现P0口数据有效的总时间段为++,显然要长于WLWH t QVWX t WHQX t WR 信号有效宽度,并且将其包含在之内,所以在这里,根据这个时序原理,我们可以利用WLWH t WR 的下降沿时刻、低电平阶段或是上升沿时刻进行数据的写

入,但是我们最常用的是在WR的低电平时期和WR上升沿时刻将有效数据写入,

而利用WR的低电平时期写入数据又是最为普遍,因为好多公司生产的带外部总

线读写功能的芯片都是要求在WR的低电平时期写数据,跟上面一样,我们在这

里讨论这个,主要是给大家提供一种思路,在自己进行地址分配或时序逻辑设计

时也许用得上。在下面的实例中,这两种方法我都会做介绍,请大家仔细体会。

2.2 两种地址锁存法介绍

上面我已经提到,在进行地址锁存时有两种锁存方案:高电平地址锁存法和

下降沿地址锁存法,注意我这里所说的这两种方法名称是针对单片机的ALE端

信号而言。下面我将结合具体的电路给大家做一下详细介绍(为节省画图空间,

考虑到单片机复位电路和晶振电路不是本文所讨论的话题,故省略):

2.2.1 高电平地址锁存法

本小节介绍的高电平地址锁存法是单片机开发工程师使用最为广泛的一种

方法。在这种方法中选用373或者573芯片,以573为例,其真值表如表1所示:

表1 74HC573真值表

OE LE D Q

L H H H L H L L L L X Q0

H X X Z

由上述真值表我们不难看出,这个片子的特点是:在输出控制端OE有效(低

电平)的前提下,当锁存端LE为高电平时,输出端Q随着输入端D变化,而

当LE为低电平时,输出端Q保持上一次的输入端数据,这样的逻辑正好符合我

们在第一节分析的有关单片机ALE端信号的变化情况,即ALE端为高电平时,

单片机P0口的低8位地址信号输出到573的输入端,而输出端跟随变化,一旦

ALE变为低电平,573便不再跟随单片机的P0口地址,因为这时候(应该是过

一会)P0 口马上就要输出8位“数据”了,这样便完成了单片机低8位地址的

锁存。

图3 高电平地址锁存法

2.2.2 下降沿地址锁存法

本小节给大家介绍另一种方法——下降沿地址锁存法。这种方法在我们的实

际设计中并不是很常见,但是我仍然给大家做一个简单的介绍,目的是让大家开

拓思路,了解问题的实质。

在这种方法中选用374或者574芯片,以374为例,其真值表如表1所示:

表2 74HC374真值表

OE CLK D Q

L ↑H H L ↑L L L L X Q0

H X X Z

由上述真值表我们不难看出,这个片子的特点是:在输出控制端OE有效(低

电平)的前提下,当锁存端LE输入上升沿信号时,输入端D的信号才能送到输

出端Q,而当LE为非上升沿时,输出端Q保持上一次的输入端数据,这样的逻

辑正好符合我们在第一节分析的有关单片机ALE端信号的变化情况,即ALE端为高电平时,单片机P0口的低8位地址信号输出到374的输入端,但是输出端不跟随输入端变化,一旦ALE信号变为低电平,这样便瞬间产生了一个下降沿,但是374需要的是一个上升沿信号才能将数据从输入端打进输出端,为此,必须在ALE与CLK端进行一下反相。这样在单片机这次整个的读写数据的过程中,374的输出端,也就是锁存的单片机的低8位地址就不再变化了,因为,ALE端信号在一次读写过程中是始终保持低电平的,不会再次产生下降沿,也就不会再次更新374的输出端。这样也同样完成了单片机低8位地址的锁存。

图4 下降沿地址锁存法

3、总线法设计单片机模块全突破

通过上面第二节我们知道单片机总线低8位地址有两种锁存方法。在这一节里,我将就总线设计法中经常用到的一些单片机外围模块的设计思路或者方法详细的介绍给大家,希望大家看完后能从中有所体会。

首先我先把下面各个模块中用到的138地址译码电路摆出来:

图5 地址译码电路

地址分配:

CS_LED: 0X8000~0X8FFF; LED指示灯片选地址

CS_SHUMA: 0X9000~0X9FFF;数码管片选地址

CS_A/D: 0XA000~0XAFFF;A/D转换器片选地址

CS_D/A: 0XB000~0XBFFF;D/A转换器片选地址

CS_LCD: 0XC000~0XCFFF;液晶片选地址

CS_KEY_RD: 0XD000~0XDFFF;读键盘片选地址

CS_KEY_WR: 0XE000~0XEFFF;写键盘片选地址

地址分配解析:

首先咱们先来看看LED指示灯的地址控制端CS_LED为什么是0X8000~0X8FFF,74HC138首先要工作,必须将它的片选输入(E1、E2、E3)端置为有效,根据我们的硬件连接,E1、E2已经接地,这时我们只需要将E3置为高电平即可随时启动该74HC138芯片,又由于我们把单片机的最高位地址线A15接在了E3上,所以,我们所有外设的片选地址都必须让A15位置为高电平“1”,这样,74HC138片选输出就完全取决于C(A14)、B(A13)、A(A12)三个控制端了,显然要让LED指示灯的地址控制端CS_LED有效,也就是让74HC138的Y0输出端有效(为“0”),只需要C(A14)=“0”、B(A13)=“0”、A(A12)=“0”即可,也就是说只要让单片机地址总线的高四位为“1000”,

而其他12根低地址线可以任意取“0”和“1”,所以到此我们便推算出了LED 指示灯的片选地址是0X8000~0X8FFF。同理,数码管、A/D转换器、D/A转换器、液晶、键盘道理相同。但是在这里,有些读者不难发现一点,键盘的片选信号怎么还有两个呢?一个“读键盘地址”,一个“写键盘地址”,关于这一点,我会在键盘设计部分给大家做详细说明。

总之请大家记住一点:地址的分配是随具体硬件连接的不同而变化的。只要硬件连接固定了,外设地址也就固定了。

3.1 LED指示灯的总线设计法(开关量输出类似此法)

这一节给大家介绍一下LED指示灯的总线设计法,这种情况主要是涉及到单片机向外部设备写数据的情况。既然是单片机向外写数据,大家首先必须考虑到有一个信号必须用到,这就是WR。好,请看图6,在这个设计中,我们仍然采用上面介绍过的锁存芯片374,这样大家一眼便会想到如何输出数据了,那就是我们必须在374的CLK端给一个上升沿信号,那如何产生呢?这里我们用到了一个逻辑或门,比如说我们要给LED送一个数据,那么首先选中LED这个外部设备的片选地址,也就是说CS_LED是输出低电平的,而此时紧接着WR便有效,即输出“写”有效信号(低电平)。这样或门的两个输入都为低,根据逻辑,

t WR信号有效时间宽度)后,WR信号变为高,其输出为低,大约经过(即

WLWH

这时虽然CS_LED仍然为高,但是根据逻辑,或门的输出会变为高,这样便在374的CLK端产生了一个上升沿跳变信号,也就将要送给LED外设的数据传输了过来。

在这里我要再给初学者解释两点:

第一,程序如何写才能选中CS_LED?对于这个问题可能好多初学者困惑的问题,其实很简单,我以C语言给大家做以解释,请看下面这一语句:

XBYTE [0X8000]=0X0F;

这条语句是什么意思呢?XBYTE在51单片机里代表的是取外部数据存储器绝对地址中的数据;0X8000就是我们在前面我们为LED分配的地址,只不过在其地址范围之内我们任取一个即可。这样,上面这条语句的意思就是,将0X0F这个数据写入地址为0X8000的外部存储器内,有人可能要问,这里写的不是外部

存储器啊,是写外设啊。没错,关键点就出来了:当单片机执行上述语句时,单片机首先要做的时将16位地址0X8000迅速送到总线上,此时,根据我们前面的讨论,这个16位数据(其实主要是A14,A13,A12都为“0”)迅速使138选中CS_LED,注意这时地址信号虽然在总线上传输,但是该外设的这个374的CLK端没有上升沿信号,故地址信号不会传输给LED导致发光。紧接着单片机P0口再将数据0X0F送到总线上,根据上面刚刚讨论过的,这个数据便接着WR 的上跳沿将传输到了374的输出端,这样结果便是:图6中的右边四个LED被点亮,左边四个熄灭。

有些读者要问,能不能不要WR这个信号,直接将LED的片选信号CS_LED 加到374的CLK端呢?这就是我要给大家解释的第二个问题。请大家仔细捉摸一下,我们的关键问题是给芯片374的CLK端一个上跳沿信号,那么去了WR这个“写”信号而直接将LED的片选信号CS_LED加到374的CLK端是否能产生上跳沿信号呢?答案是不能,因为CS_LED的选中是靠单片机P2口(即高8位地址)进行译码的,如果不再写其他外部设备或外部存储器或不人为改变P2口数据,那么CS_LED是始终选中的,也就一直保持低电平。自然也就不会产生374CLK端所需要的上跳信号。

图6 LED指示灯的总线设计法

3.2 数码管的总线设计法

本节关于数码的总线设计法基本上类似于上述LED的设计法,故在此只将

电路图给出,如图7所示,留给读者自行分析。

图7 数码管的总线设计法

3.3 A/D转换的总线设计法

这一节我以工程中常用的8位A/D采集芯片ADC0809给大家介绍一下A/D 转换的总线设计法,如图8所示。

因为A/D操作包含了启动转换和读转换后数据两个步骤,所以在电路设计中,我采用了两个或非门作为控制逻辑,至于为什么选用或非门,大家可以自行分析。

要获取AD信号,第一步必须首先启动AD,由高位地址线A12~A15通过138组成译码电路产生ADC0809的片选信号CS_AD。要启动ADC0809必须首先启动ADC0809的ALE端和START端,这两个信号有CS_AD和CPU来的WR 信号控制,因此要启动AD必须首先向使能CS_AD信号的对应译码地址写任意一个数值,以给ALE和START端产生启动脉冲。这个对应的译码地址从74HC138的电路可以看出是0xA000H,在其有效地址范围内任取其一即可。当在ADC0809的ALE和START端产生了启动脉冲后,ADC0809就进入转换工作,EOC端输出低电平,当转换完成后,EOC端会产生一个上升沿信号,变成高电平。以触发单片机中断,告诉单片机此时数据转换完毕,可以读取转换后的数据了。

读数据信号要使能ADC0809的ENABLE信号(高电平),这个信号就由RD信

号和CS_0809来组成,所以要读取数值,必须向ADC0809对应的片选地址发一

个读命令就能获取数据线上的数据了。

启动A/D转换程序示例:

XBYTE [0XA000]=0X0F(注意这个数据可以任意);

读取A/D转换程序示例:

Temp=XBYTE [0XA000];

注:Temp是一个临时变量。

图8 A/D转换的总线设计法

3.4 D/A转换的总线设计法

这一节我以工程中常用的8位D/A采集芯片DAC0832给大家介绍一下D/A 转换的总线设计法,如图8所示。

注意在这里我们将DAC0832内部第一级缓冲器的控制端ILE挂在了高电平上,这样,对于DAC0832的内部数据传输来说就只有一级缓冲了,也就是说,在这种情况下,按照DAC0832的启动转换原理,首先将要转换的8位数据送到DAC0832的8位输入端口,然后同时将WR1、WR2、CS、Xfer四位同时置为低电平后,便会马上启动D/A转换,这样,如果用非总线式读写方式启动D/A 转化的话,我们可以将WR1、WR2、CS、Xfer四个端子连在一块,并假设将其

连在单片机的P1_1口,那么可以利用下面的示意性代码进行转换:

P0=0XF0;(假设0XF0为要转换得数据)

P1_1=0;(同时置低WR1、WR2、CS 、Xfer ,以启动D/A 转换)

那么按照我们图8所示的设计原理图应该如何进行总线读写方式的程序编写呢? 原理图中DAC0832的片选信号CS_D/A 有74HC138译码器产生,所以要操作DAC0832,必须向CS_D/A 的片选地址写数据。这个地址是0XB000H ,当然只要在0XB000~0XBFFF 任选其一即可。这样按照我们在第二节的讨论,便可以得出利用下述语句进行总线式方法启动D/A 转换:

XBYTE [0XB000]=0X0F ;(假设0XF0为要转换的数据)

解释一下:当单片机执行上述语句时,首先将输出16位地址,P2口高8位地址用来选通138的CS_D/A 输出端,由于DAC0832的CS 、Xfer 连在了一起,这样便导致这两个控制端同时为0,但是这时由于单片机的WR 信号还没有到来,故此时挂在DAC0832输入总线上的低8位地址不会进入到其内部,当单片机的WR 信号到来时,即DAC0832的WR1、WR2也同时被WR 置为低电平时,挂在DAC0832输入总线上的8位数据信号被传入其内部自动进行转换,事实上,在单片机的WR 信号到来前的时刻,单片机P0口输出的就已经不是刚才的低8位地址信号了,而改成了8位数据信号,若读者还是不明白,请再仔细研究图2时序。

QVWX t

图9 D/A转换的总线设计法

3.5液晶的总线设计法

在这一节里我以KS0107B为驱动控制器的常用12864液晶为例给大家讲解一下液晶的总线式设计。

该液晶的内部原理框图如图10所示,由图可见,其总共有20个管脚,在这里我们只关心15个管脚,即液晶的8位数据总线DB0 ~ DB7,读写控制信RS, R/W号,详见表3,液晶片选信号E,液晶左右半屏选择信号CS1、CS2,详见表4。

表3 读写控制信号选择

RS R/W 功能

0 写指令

1 读状态(忙检测)

0 写数据

1

1 读数据

表4 左右半屏选择信号

CS1CS2选择

0 禁止

1 左半屏

0 右半屏

1

1 禁止

图10 KS0108B驱动控制器液晶内部框图

按照我们液晶分配的片选地址CS_LCD为0XC000~0XCFFF,这里我们取

0XC000,根据图11的电路硬件连线,液晶的8位数据线直接挂到单片机的数据

总线上,A0、A1分别连到液晶左右半屏的选择信号CS1、CS2上,A2、A3分

别连到液晶的读写控制信号RS, R/W上,这样根据上面的讨论我们便很容易得

出下面有关本液晶控制的8个地址:

#define LCD1_ORD XBYTE[0XC002] /*LCDCS1命令字地址*/

#define LCD2_ORD XBYTE[0XC001] /*LCDCS2命令字地址*/

#define LCD1_WD XBYTE[0XC006] /*CS1写数据地址*/

#define LCD2_WD XBYTE[0XC005] /*CS2写数据地址*/

#define LCD1_RD XBYTE[0XC00E] /*CS1读数据地址*/

#define LCD2_RD XBYTE[0XC00D] /*CS2读数据地址*/

#define LCD1_RS XBYTE[0XC00A] /*CS1读状态地址*/

#define LCD2_RS XBYTE[0XC009] /*CS2读状态地址*/

程序举例:

/*******液晶左半屏判忙子程序*******/

void busy(void)

{

unsigned char m_lcdStatu;

do{m_lcdStatu=LCD1_RS;}while(m_lcdStatu&0x80);

}

/********开液晶显示子程序********/

void Playon()

{

busy ();LCD1_ORD=0x3F; //开左屏显示

busy ();LCD2_ORD=0x3F; //开右屏显示

}

图11 液晶的总线设计法

3.6矩阵键盘的总线设计法

下面给大家介绍一下标准的总线式矩阵行列键盘设计方法,参见图12。该电路最大可以扫描64个键,分为8行,8列。其工作原理是:

574进行行扫描输入,245进行列扫描输出。下面以程序语句进行举例叙述:

XBYTE[0XE000]=0XFE;

这条语句表示将行输入值0XFE通过单片机总线输入到574的输出端。至于具体过程如何实现的,其原理类似上面的LED设计法,请读者自行分析。

temp =XBYTE[0XD000];//temp为自定义临时变量这条语句表示将列扫描输出值XBYTE[0XD000]通过单片机总线输入到245的输出端,原理仍然请读者自行分析。

我以扫描第一行8个按键为例,给出示例程序如下:

unsigned char keyscan_test(void)

{

unsigned char temp,keyvalue;

//以下扫描第一行

XBYTE[0XE000]=0XFE; //第一行输出“0”信号

temp= XBYTE[0XD00E]; //读取此时的列扫描输出值

switch(temp) //判断第一行键盘扫描值

{

Case 0X7F: keyvalue=1;

Case 0XBF: keyvalue=2;

Case 0XDF: keyvalue=3;

Case 0XEF: keyvalue=4;

Case 0XF7: keyvalue=5;

Case 0XFB: keyvalue=6;

Case 0XFD: keyvalue=7;

Case 0XFE: keyvalue=8;

}

//以下扫描第二行

…… …… ……

return keyvalue;

}

图12 键盘的总线设计法

4、谈谈如何从节省资金和提高开发速度两个方面上进行单片机系统开发

我们在进行单片机系统的产品设计,往往要考虑产品的开发成本,这尤其是对于在针对某一设计好的产品进行大规模生产时,就显得更为重要,比如某产品要批量生产十万件,而此时如果我们能够在此产品的设计中节省出一块芯片,比如1元钱,那么我们便可以节省十万元钱,由此可以,在能够完成指定功能的基础之上,如何更好的去节约设计成本是多么的重要啊!下面我就结合本文所讨论的单片机总线设计法来谈谈在有些情况下是如何降低产品设计成本的。

4.1 地址译码电路的的简化设计

4.1.1小型系统中可以去掉138,直接采用线选法译码

在上面的设计中,我们采用了138译码,有时候在设计小型系统,如果总线上的外部设备不超过8个的话,我们完全可以去掉138这个芯片以节省电路板空间和成本,具体硬件连接如图13所示,也就是直接用单片机的高8位地址线分别作为外部设备的片选信号,这就是所谓的线选法地址译码。

51单片机寻址方式资料讲解

51单片机寻址方式

51单片机的寻址方式 寻址方式:指定操作数所在单元的方法。 在我们学习的8051单片机中,有7种寻址方法,下面我们将逐一进行分析。 一、立即寻址 用“#”作前缀 MOV A,#20H 在这种寻址方式中,指令多是双字节的。立即数就是存放在程序存储器中的常数,换句话说就是操作数(立即数)是包含在指令字节中的。 例如: MOV A,#3AH 这条指令的指令代码为74H、3AH,是双字节指令,这条指令的功能是把立即数3AH送入累加器A中。 MOV DPTR,#8200H在前面学单片机的专用寄存器时,我们已学过,DPTR是一个16位的寄存器,它由DPH及DPL两个8位的寄存 仅供学习与交流,如有侵权请联系网站删除谢谢2

器组成。这条指令的意思就是把立即数的高8位(即82H)送入DPH寄存器,把立即数的低8位(即00H)送入DPL寄存器。 二、直接寻址 指令中直接给出操作数的地址。 MOV A,30H;这条指令中操作数就在30H单元中,也就是30H 是操作数的地址,并非操作数。 MOV 30H,DPH 在80C51单片机中,直接地址只能用来表示内部数据存储器、位地址空间以及特殊功能寄存器,具体的说就是: 1、内部数据存储器RAM低128单元。在指令中是以直接单元地址形式给出。 我们知道低128单元的地址是00H-7FH。在指令中直接以单元地址形式给出这句话的意思就是这0-127共128位的任何一位,例如0位是以00H这个单元地址形式给出、1位就是以01H单元地址给出、12 7位就是以7FH形式给出。 2、位寻址区。20H-2FH地址单元。 仅供学习与交流,如有侵权请联系网站删除谢谢3

利用51单片机实现SPI总线通信

利用51单片机实现SPI总线通信 一:题目及要求 1:基本内容 1.1:理解51单片机和SPI总线通信的特性和工作原理; 1.2:以51单片机为核心分别设计SPI总线通信发送及接收电路; 1.3:熟练应用C语言或汇编语言编写程序; 1.4:应用Protues软件完成仿真,仿真结果需包括示波器波形,通过一定的 方式(如LED灯、LED显示器等)显示发送和接受数据结果; 1.5:下载程序到开发板,实现串口通信功能(选做); 1.6:提交设计报告。 2:基本要求 本设计采用三线式SPI总线,一条时钟线SCK,一条数据输入线MOSI,一条数据输出线MISO。时钟极性CPOL=0,时钟相位CPHA=0。 二:设计思路 1:掌握51单片机和SPI总线通信的工作原理; 2:利用1中的原理设计SPI总线通信发送和接受电路; 3:编程模拟SPI时序,包括串行时钟、数据输入和输出; 4:利用Protues软件仿真,观察结果; 5:顺利仿真后,下载到开发板实现串行通信功能。 三:设计过程及内容 1:SPI总线简介 SPI ( Serial Peripheral Interface ——串行外设接口) 总线是Motorola公司推出的一种同步串行接口技术。SPI总线系统是一种同步串行外设接口,允许MCU(微控制器)与各种外围设备以串行方式进行通信、数据交换。外围设备包括FLASHRAM、A/ D 转换器、网络控制器、MCU 等。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现

基于51单片机的波形发生器的设计讲解

目录 1 引言 (1) 1.1 题目要求及分析 (1) 1.1.1 示意图 (1) 1.2 设计要求 (1) 2 波形发生器系统设计方案 (2) 2.1 方案的设计思路 (2) 2.2 设计框图及系统介绍 (2) 2.3 选择合适的设计方案 (2) 3 主要硬件电路及器件介绍 (4) 3.1 80C51单片机 (4) 3.2 DAC0832 (5) 3.3 数码显示管 (6) 4 系统的硬件设计 (8) 4.1 硬件原理框图 (8) 4.2 89C51系统设计 (8) 4.3 时钟电路 (9) 4.4 复位电路 (9) 4.5 键盘接口电路 (10) 4.7 数模转换器 (11) 5 系统软件设计 (12) 5.1 流程图: (12) 5.2 产生波形图 (12) 5.2.1 正弦波 (12) 5.2.2 三角波 (13) 5.2.3 方波 (14) 6 结论 (16) 主要参考文献 (17) 致谢...................................................... 错误!未定义书签。

1引言 1.1题目要求及分析 题目:基于51单片机的波形发生器设计,即由51单片机控制产生正弦波、方波、三角波等的多种波形。 1.1.1示意图 图1:系统流程示意图 1.2设计要求 (1) 系统具有产生正弦波、三角波、方波三种周期性波形的功能。 (2) 用键盘控制上述三种波形(同周期)的生成,以及由基波和它的谐波(5次以下)线性组合的波形。 (3) 系统具有存储波形功能。 (4) 系统输出波形的频率范围为1Hz~1MHz,重复频率可调,频率步进间隔≤100Hz,非正弦波的频率按照10次谐波来计算。 (5) 系统输出波形幅度范围0~5V。 (6) 系统具有显示输出波形的类型、重复频率和幅度的功能。

(完整word版)at89c51单片机中文资料

AT89C51的概况 1 AT89C51应用 单片机广泛应用于商业:诸如调制解调器,电动机控制系统,空调控制系统,汽车发动机和其他一些领域。这些单片机的高速处理速度和增强型外围设备集合使得它们适合于这种高速事件应用场合。然而,这些关键应用领域也要求这些单片机高度可靠。健壮的测试环境和用于验证这些无论在元部件层次还是系统级别的单片机的合适的工具环境保证了高可靠性和低市场风险。Intel 平台工程部门开发了一种面向对象的用于验证它的AT89C51 汽车单片机多线性测试环境。这种环境的目标不仅是为AT89C51 汽车单片机提供一种健壮测试环境,而且开发一种能够容易扩展并重复用来验证其他几种将来的单片机。开发的这种环境连接了AT89C51。本文讨论了这种测试环境的设计和原理,它的和各种硬件、软件环境部件的交互性,以及如何使用AT89C51。 1.1 介绍 8 位AT89C51 CHMOS 工艺单片机被设计用于处理高速计算和快速输入/输出。MCS51 单片机典型的应用是高速事件控制系统。商业应用包括调制解调器,电动机控制系统,打印机,影印机,空调控制系统,磁盘驱动器和医疗设备。汽车工业把MCS51 单片机用于发动机控制系统,悬挂系统和反锁制动系统。AT89C51 尤其很好适用于得益于它的处理速度和增强型片上外围功能集,诸如:汽车动力控制,车辆动态悬挂,反锁制动和稳定性控制应用。由于这些决定性应用,市场需要一种可靠的具有低干扰潜伏响应的费用-效能控制器,服务大量时间和事件驱动的在实时应用需要的集成外围的能力,具有在单一程序包中高出平均处理功率的中央处理器。拥有操作不可预测的设备的经济和法律风险是很高的。一旦进入市场,尤其任务决定性应用诸如自动驾驶仪或反锁制动系统,错误将是财力上所禁止的。重新设计的费用可以高达500K 美元,如果产品族享有同样内核或外围设计缺陷的话,费用会更高。另外,部件的替代品领域是极其昂贵的,因为设备要用来把模块典型地焊接成一个总体的价值比各个部件高几倍。为了缓和这些问题,在最坏的环境和电压条件下对这些单片机进行无论在部件级别还是系统级别上的综合测试是必需的。Intel Chandler 平台工程组提供了各种单片机和处理器的系统验证。这种系统的验证处理可以被分解为三个主要部分。系统的类型和应用需求决定了能够在设备上执行的测试类型。 1.2 AT89C51提供以下标准功能:

51单片机的寻址方式

51单片机的寻址方式 学习汇编程序设计,要先了解CPU的各种寻址法,才能有效的掌握各个命令的用途,寻址法是命令运算码找操作数的方法。 指令的寻址方式 MOV P1,#0FFH这条指令,第一个词MOV是命令动词,也就是决定做什么事情的,MOV是MOVE少写了一个E,所以就是“传递”,这就是指令,规定做什么事情,数据传递必须要有一个“源”也就是你要送什么数,必须要有一个“目的”,也就是你这个数要送到什么地方去,显然在上面那条指令中,要送的数(源)就是0FFH,而要送达的地方(目的地)就是P1这个寄存器。 寻址方式:指定操作数所在单元的方法。 注意:源操作数、目的操作数都有各自的寻址方式。掌握指令的7种寻址方式的作用以及不同寻址方式所查询的存储空间及范围,对于常用的指令,能够给出指令的寻址方式。 在我们学习的8051单片机中,有7种寻址方法,下面我们将逐一进行分析。 立即寻址 所要找的操作数是一二进制数或十进制数,出现在指令中,用“#”作前缀 MOV A,#20H 在这种寻址方式中,指令多是双字节的,一般第一个字节是操作码,第二个字节是操作数。该操作数直接参与操作,所以又称立即数,有“#”号表示。立即数就是存放在程序存储器中的常数,换句话说就是操作数(立即数)是包含在指令字节中的。 例如: MOV A,#3AH 这条指令的指令代码为74H、3AH,是双字节指令,这条指令的功能是把立即数3AH送入累加器A中。MOV DPTR,#8200H 在前面学单片机的专用寄存器时,我们已学过,DPTR是一个16位的寄存器,它由DPH及DPL两个8位的寄存器组成。这条指令的意思就是把立即数的高8位(即82H)送入DPH寄存器,把立即数的低8位(即00H)送入DPL寄存器。 这里也特别说明一下:在80C51单片机的指令系统中,仅有一条指令的操作数是16位的立即数,其功能是向地址指针DPTR传送16位的地址,即把立即数的高8位送入DPH,低8位送入DPL。 直接寻址 指令中直接给出操作数的地址。 MOV A,30H MOV 30H,DPH 直接寻址方式是指在指令中操作数直接以单元地址的形式给出,也就是在这种寻址方式中,操作数项给出的是参加运算的操作数的地址,而不是操作数。

基于51单片机的USB键盘设计与实现

三江学院 本科生毕业设计(论文)题目基于51单片机的USB键盘设计与实现高职院院(系)电气工程及其自动化专业 学生姓名梁邱一学号 G105071013 指导教师孙传峰职称讲师 指导教师工作单位三江学院 起讫日期 2013年12月10日至2014年4月12日

摘要 随着计算机技术的不断更新和多媒体技术的快速发展,传统的计算机外设接口因为存在许多缺点已经不能适应计算机的发展需要。比起传统的AT,PS/2,串口,通用串行总线USB,具有速度快,使用方便灵活,易于扩展,支持即插即用,成本低廉等一系列优点,得到了广泛的应用。 本论文阐述了51系列单片机和USB的相关内容,详细介绍了系统的一些功能设计,包括硬件设计和软件设计。在程序调试期间用简单的串口通信电路,通过串口调试助手掌握了USB指令的传输过程,这对整个方案的设计起到了很大的指导作用。论文以单片机最小系统配合模拟键盘组成的USB键盘硬件系统,通过对D12芯片的学习与探索,在其基本命令接口的支持下,结合硬件进行相应的固件程序设计,使其在USB协议下,实现USB模块与PC的数据通信,完成USB键盘的功能模拟。 总结论文研究工作有阐述USB总线的原理、对本设计的系统要求作出了分析、根据要求选定元件和具体编程方案、针对系统所要实现的功能对相关芯片作了详细介绍以及在硬件部分设计了原理图。 关键词:USB;D12;PC

Abstract With the rapid development of computer technology and multimedia technology constantly updated, traditional computer peripheral interface because there are many shortcomings have been unable to meet the development needs of the https://www.doczj.com/doc/c916370054.html,pared to traditional AT, PS / 2, serial, Universal Serial Bus USB, with fast, flexible and easy to use, easy to expand, support Plug and Play, a series of advantages, such as low cost, has been widely used. This paper describes the 51 series and USB related content, detailing some of the features of the system design, including hardware and software design.During debugging a simple serial communication circuit, through the serial port debugging assistant master USB transfer instructions, which designed the entire program has played a significant role in guiding.Thesis smallest single-chip system consisting of analog keyboard with a USB keyboard hardware system, by learning and exploration D12 chips, with the support of its basic command interface, in conjunction with the corresponding hardware firmware design, making it in the USB protocol, USB module data communication with the PC, the USB keyboard to complete the functional simulation. This paper summarizes research work has elaborated the principle of the USB bus, the system is designed to require the analysis, components and solutions based on the specific requirements of the selected programming for the system to achieve the function of the relevant chips are described in detail in the hardware part of the design as well as the principle of Figure. Keywords:USB;D12;PC

单片机的寻址方式

单片机的寻址方式 指令给出参与运算的数据方式称为寻址方式。换句话说,寻址方式就是寻找确定参与操作的数的真正地址。 在MCS-51 系列单片机的指令系统中寻址方式共有7 种, 立即寻址方式,mcs-51 单片机的一种寻址方式,操作数就写在指令中,和操作码一起放在程序存贮器中。把“#”号放在立即数前面,以表示该寻址方式为 立即寻址,如#20H,立即寻址方式通常用于对通用寄存器或内存单元赋初值。直接寻址方式,指令操作数域给出的是参加运算的操作数地址。在MCS-51 单片机中,直接地址只能用来表示特殊功能寄存器、内部数据寄存器和位地址空间。其中,特殊功能寄存器和位地址空间只能用直接寻址方式访问。 寄存器寻址方式,操作数在寄存器中,由指令操作码中的rrr 三位的值和PSW 中RS1 及RS0 的状态,选中某个工作寄存器区的某个寄存器,然后进行相应的指令操作。指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。把在指令中指出所使用寄存器(即:寄存器的助忆符)的寻址方式 称为寄存器寻址方式。 间接寻址方式,指令操作数给出的是存放操作数地址的寄存器。在MCS-51 指令系统中,可作为寄存器间接寻址的寄存器有工作寄存器R0~R1、堆栈批示器SP 和地址寄存器DPTR。在指令助记符中,间接寻址用符号@来表示。 相对寻址方式,以当前程序计数器pc 的内容为基址,加上指令给出的一字 节补码数(偏移量)形成新的pc 值的寻址方式称为相对寻址。 变址寻址方式,在通用寄存器中,有些寄存器可作为变址寄存器。把变址寄存器的内容(通常是首地址)与指令地址码部分给出的地址(通常是位移量)之和作为操作数的地址来获得所需要的操作数就称为变址寻址。

单片机常用总线讲解

第8章单片机常用总线讲解 8.1 C总线接口 80C51单片机本身不具有总线接口,但是通过软件进行模拟,可以挂接具有C接口的芯片。 8.1.1 C总线的介绍 串行扩展总线在单片机系统中的应用是目前单片机技术发展的一种趋势。在目前比较流行的几种串行扩展总线中,总线以其严格的规范和众多带接口的外围器件而获得广泛应用。总线是PHILIPS公司推出的芯片间串行传输总线,它由两根线组成,一根是串行时钟线(SCL),一根是串行数据线(SDA)。主控器利用串行时钟线发出时钟信号,利用串行数据线发送或接收数据。总线由主控器电路引出,凡具有接口的电路(受控器)都可以挂接在总线上,主控器通过总线对受控器进行控制。 随着总线研究的深入,总线已经广泛应用于视/音频领域、IC卡行业和一些家电产品中,在智能仪器、仪表和工业测控领域也越来越多地得到应用。 8.1.2 总线的特点 总线的广泛应用是同它卓越的性能和简便的操作方法分不开的。总线的特点主要表现在以下几个方面: 硬件结构上具有相同的硬件接口界面。总线系统中,任何一个总线接口的外围器件,不论其功能差别有多大,都是通过串行数据线(SDA)和串行时钟线(SCL)连接到总线上。这一特点给用户在设计用用系统中带来了极大的便利性。用户不必理解每个总线接口器件的功能如何,只需将器件的SDA和SCL引脚连到总线上,然后对该器件模块进行独立的电路设计,从而简化了系统设计的复杂性,提高了系统抗干扰的能力。 线接口器件地址具有根大的独立性。每个接口芯片具有唯一的器件地址,由于不能发出串行时钟信号而只能作为从器件使用。各器件之间互不干扰,相互之间不能进行通信,各个器件可以单独供电。单片机与器件之间的通信是通过独一无二的器件地址来实现的。 软件操作的一致性。由于任何器件通过总线与单片机进行数据传送的方式是基本一样的, .v .. ..

MAX813看门狗电路

看门狗电路设计 在工业现场运行的单片机应用系统,由于坏境恶劣,常有强磁场、电源尖峰、电火花等外界干扰,这些干扰可能造成仪表中单片机的程序运行出现“跑飞”现象,引起程序混乱,输出或显示不正确,甚至“死机”。系统无法继续正常的运行,处在一种瘫痪状态,它的硬件电路并没有损坏,只是内部程序运行出现了错误,这时,即使干扰消失,系统也不会恢复正常,这就需要采取一些措施来保障系统失控后能自动恢复正常,“程序运行几天来视系统”(Watchdog看门狗)就是常用的一种抗干扰措施,用以保证系统因干扰失控后能自动复位。为了提高仪表可靠性及抗干扰能力,通常在智能仪表中采用“看门狗”技术。 看门狗电路它实质上是一个可由CPU复位的定时器,它的定时时间是固定不变的,一旦定时时间到,电路就产生复位信号或中断信号。当程序正常运行时,在小于定时时间隔内,单片机输出一信号刷新定时器,定时器处于不断的重新定时过程,因此看门狗电路就不会产生复位信号或中断信号,反之,当程序因出现干扰而“跑飞”时,单片机不能刷新定时器,产生复位信号或产生中断信号使单片机复位或中断,在中断程序中使其返回到起始程序,恢复正常。 它的工作原理如同图3-4所示的两个计时周期不同的定时器T1和T2是两个时钟源相同的定时器,设T1=1.0s,T2=1.1s,而用T1定时器的溢出脉冲P1同时对T1和T2定时器清零,只要T1定时器工作正常,则定时器T2永远不可能计时溢出。当T1定时器不在计时,定时器T2则会计时溢出,并产生溢出脉冲P2。一旦产生溢出脉冲P2,则表明T1出了故障。这里的T2即是看门狗。利用溢出脉冲P2并进行巧妙的程序设计,可以检测系统的出错,而后使“飞掉”的程序重新恢复运行。 图3-4 看门狗工作原理示意图 看门狗电路的应用,使单片机可以在无人关态下实现连续工作。看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过程序控制它定时地往看门狗的这

C51单片机的波形发生器

通信专业技能实训报告 题目基于Proteus的波形发生器设计 学院信息科学与工程学院 专业通信工程 班级 学生 学号 指导教师魏长智 二〇一九年一月五日

济南大学通信专业技能实训报告 目录 1 前言 ...................................................................................................................... - 1 - 2 硬件设计 .............................................................................................................. - 2 - 2.1 启动方式选择 ........................................................................................... - 2 - 2.2 框图设计 ................................................................................................... - 2 - 2.3 电路图设计 ............................................................................................... - 3 - 3 DAC0832性能与特征....................................................................................... - 4 - 3.1 D/A转换器与单片机接口探究 ............................................................. - 4 - 3.1.1 数据线连接 .................................................................................... - 4 - 3.1.2 地址线连接 .................................................................................... - 4 - 3.1.3 控制线连接 .................................................................................... - 4 - 3.2 DAC0832的认识.................................................................................... - 5 - 3.2.1 DAC0832的结构......................................................................... - 5 - 3.2.2 DAC0832的引脚......................................................................... - 6 - 3.2.3 DAC0832的启动控制方式......................................................... - 7 - 4 程序设计 .............................................................................................................. - 8 - 4.1 程序流程图 ............................................................................................... - 8 - 4.1.1 程序设计思路 ................................................................................ - 8 - 4.1.2流程图 ............................................................................................. - 8 - 4.2 用C语言实现 ........................................................................................ - 10 - 5 Proteus仿真及结果 ......................................................................................... - 13 - 5.1方波: ...................................................................................................... - 13 - 5.2正弦波: .................................................................................................. - 14 - 5.3三角波: .................................................................................................. - 15 - 5.4梯形波: .................................................................................................. - 16 - 5.5锯齿波: .................................................................................................. - 17 -实训结语: ............................................................................................................ - 18 -参考文献 ................................................................................................................ - 19 -

51单片机实例(含详细代码说明)

1.闪烁灯 1.实验任务 如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。 2.电路原理图 图4.1.1 3.系统板上硬件连线 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 4.程序设计内容 (1).延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要 求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在 执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程 序是如何设计呢?下面具体介绍其原理:

如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒 MOV R6,#20 2个 2 D1: MOV R7,#248 2个 2 2+2×248=498 20× DJNZ R7,$ 2个2×248 (498 DJNZ R6,D1 2个2×20=40 10002 因此,上面的延时程序时间为10.002ms。 由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时, 延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms, 10ms×R5=200ms,则R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2).输出控制 如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管 的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平, 即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0 端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 5.程序框图 如图4.1.2所示

基于51单片机波形发生器的设计与实现开题报告

基于51单片机波形发生器的设计与实现开题报告合肥师范学院本科生毕业论文(设计)开题报告 (学生用表) 课题基于51单片机波形发生器的设计与实现 系部电子信息工程学院专业电子信息工程学科工学 学生屠宝轩指导教师吴剑威一、课题的来源、背景及意义 (1)来源:科研/生产 (2)背景:单片机是再20世纪70年代中期发展起来的一种大规模集成电路芯 片,是由中央处理器(CPU), ROM、RAM芯片及I/O接口和一些外围电路等通过印刷版总线连接在一起的一个完整的讣算机系统。信号发生器是一种作为激励源或者信号源的电子设备,它能够产生各种各样的波形和频率,其在教学实验,生产装实践和科技领域有着广泛的应用,是最普遍使用的电子仪器之一。对于电子类专 业的学生,除了学习理论知识外,还必须将所学的理论知识付诸实践,在实践中订应用理论知识,提高动手能力,从而提高发现,解决问题的能力,所以试验是必 不可少的环节,而信号波形发生器是实验过程最普遍,最基本,也是应用最广泛线的电子设备之一,本研究不是针对高端的信号发生器开发,而是从降低经 济成本, 操作方便简单,输出波形实用角度出发,研究一套设备。

(3)意义:传统的正弦信号源根据实际需要一般价格昂贵,低频输出时性能不好且不便于自动调节,丄程实用性较差。现在利用单片机的优越性,制作一种体积小,实用性强,使用方便的低频信号发生器,以AT85C51单片机为核心,结合低俗D/A转换器,通过设计与编程实现了正弦波、方波、锯齿波的产生及其自山切换以及频率、相位的可调与多相波的同时输出。 二、国内外发展现状 信号波形发生器历史非常的久远,它产生于上个世纪20年代,那会,电子设备刚刚诞生,随后,雷达发展了起来,通信技术也在不断地发展,到了40年代,标准信号发生器开始出现,它的出现主要是为了进行各种接收机的测试,使信号发生器诞生之初主要是用来做定性分析的,随着使用的要求不断提升,慢慢发展成为了定量分析的测量仪器,还是在这个时期,脉冲信号发生器也出现了,这个主要是用于脉冲方面的测量的,上面说的这些信号波形发生器都是早期的一些产品,复杂的机械结构,比较 [1]大的功率,比较简单的电路,速度发展总体是比较慢的。这种发展速度一直持续到1964年,笫一台全电子晶体管做的信号发生器出现。 从60年代以后,信号波形发生器的发展速度就开始加快了,有个代表产品,那就是函数信号发生器,但是模拟的电子方面的技术在这段时期是占主要的,组成的部分一般都是分立元件,或者是采用模拟的集成方面的电路,电路结构相比于60年代以前,要复杂了,产生的波形就多了一些,比如有方波、正弦波、三角波,还有了锯齿波,但是波形还是比较简单的,加上模拟电路会产生较大的漂移,输出波形的稳定性还是比较差的,70年代乂是一个转折点,出现了微控制器,这个时候信号波形发生器的功能就开始强大了起来,波形的产生也比较复杂了。对信号波形发生器而言,软件成为这个时期的主要特征,通过程序用微控制器进行相应的处理就能方便灵活的获得一些简单的信号波形,当然这种方式也是有缺陷的,那就是波形输出的频率不会很

单片机寻址方式

51单片机的寻址方式 寻址方式:指定操作数所在单元的方法。 在我们学习的8051单片机中,有7种寻址方法,下面我们将逐一进行分析。 一、立即寻址 用“#”作前缀 MOV A,#20H 在这种寻址方式中,指令多是双字节的。立即数就是存放在程序存储器中的常数,换句话说就是操作数(立即数)是包含在指令字节中的。 例如: MOV A,#3AH 这条指令的指令代码为74H、3AH,是双字节指令,这条指令的功能是把立即数3AH送入累加器A中。 MOV DPTR,#8200H在前面学单片机的专用寄存器时,我们已学过,DPTR 是一个16位的寄存器,它由DPH及DPL两个8位的寄存器组成。这条指令的意思就是把立即数的高8位(即82H)送入DPH寄存器,把立即数的低8位(即00H)送入DPL寄存器。 二、直接寻址

指令中直接给出操作数的地址。 MOV A,30H;这条指令中操作数就在30H单元中,也就是30H是操作数的地址,并非操作数。 MOV 30H,DPH 在80C51单片机中,直接地址只能用来表示内部数据存储器、位地址空间以及特殊功能寄存器,具体的说就是: 1、内部数据存储器RAM低128单元。在指令中是以直接单元地址形式给出。 我们知道低128单元的地址是00H-7FH。在指令中直接以单元地址形式给出这句话的意思就是这0-127共128位的任何一位,例如0位是以00H这个单元地址形式给出、1位就是以01H单元地址给出、127位就是以7FH 形式给出。 2、位寻址区。20H-2FH地址单元。 3、特殊功能寄存器。专用寄存器除以单元地址形式给出外,还可以以寄存器符号形式给出。例如下面我们分析的一条指令 MOV IE,#85H 前面的学习我们已知道,中断允许寄存器IE的地址是80H,那么也就是此指令也可以以 MOV 80H,#85H的形式表述。

用CD4060制作看门狗报警电路

用CD4060制作看门狗报警电路 看门狗定时器(WDT,Watch Dog Timer)是单片机的一个组成部分,它实际上是一个计数器,一般给看门狗一个大数,程序开始运行后看门狗开始倒计数。如果程序运行正常,过一段时间CPU应发出指令让看门狗,重新开始倒计数。如果看门狗减到0就认为程序没有正常工作,强制整个系统复位。 原理图: CD4060芯片特性 1) 电压范围宽,应该可以工作在3V~15V,输入阻抗高,驱动能力差外,跟74系列的功能基本没有区别; 2) 输入时,1/2工作电压以下为0,1/2工作电压以上为1; 3) 输出时,1=工作电压;0=0V; 4) 驱动能力奇差,在设计时最多只能带1个TTL负载; 5) 如果加上拉电阻的话,至少要100K电阻; 6) 唯一现在使用的可能就是计数器,CD4060的计数器可以到14级二进制串行计数。 以AT89C51为例: 看门狗电路由14位二进制计数器CD4060和三极管VT1、VT2等组成。

Vout接单片机AT89C51的引脚输出口P1.7,由单片机的CPU向看门狗电路发送喂狗信号——正脉冲,在两个正脉冲间隔内,P1.7保持为低电平(此功能要结合软件才能实现,相应的软件设计在下面介绍)。我们知道,单片机AT89C51的I/O口带灌电流负载的能力比较大,每个引脚低电平时的吸入电流为20 mA,带拉电流负载的能力却很小,实测情况是,每个引脚高电平时的输出电流仅25μA,现在P1.7口被设计成带拉电流负载的方式,为了提高P1.7口带拉电流负载的能力,所以,电路中设置了上拉电阻R3。 14位二进制计数器CD4060的计数脉冲由其内部振荡器和外接阻容元件R1、R2、C1组成的电路产生,振荡周期为 T0SC=2.2×R1×C1=0.22 ms 振荡器产生的计数脉冲(矩形波)可以直接引出,同时还可以从CD4060的10个输出端Q4~Q10和Q12~Q14得到不同分频系数的方波输出,各方波输出信号的周期如表1所示。这样,如果CD4060得不到CPU通过P1.7口发送来的喂狗信号——正脉冲,则CD4060的输出端Q14在1.8S内将产生一个完整周期的方波信号,而且低电平在前,高电平在后,其高电平经三极管VT1、VT2处理后形成单片机AT89C51的复位信号,使单片机AT89C51复位。由此可见,单片机AT89C51正常工作时,只要在0.9S内从P1.7口送出一个正脉冲,便可及时清零看门狗,输出端Q14就不会产生定时溢出信号,从而使看门狗电路对单片机系统不起作用。并且,从CD4060的10个输出端Q4~Q10和Q12~Q14可以得到不同周期的方波信号,经三极管VT1、VT2处理后形成单片机系统的复位信号,可以适应不同用户应用程序,从而该硬件看门狗电路可以适应不同的单片机应用系统。 对MCS-51系列的单片机而言,它所需要的复位信号是高电平宽度大于2个机器周期的正脉冲,例如,单片机的时钟脉冲频率为12 MHz时,则所需要的复位信号高电平宽度为2μs以上就可以了,而由上面的分析可知,CD4060的Q14输出的是高电平宽度为0.9 s的方波,如果让它直接作为单片机的复位信号,则单片机的复位时间势必在0.9 s以上,这样尽管可以使程序跑飞的单片机复位,但是显然没有做到尽快地引导跑飞的程序到正确的轨道来,如果这样做的话,对于某些单片机应用系统而言可能带来非常严重的后果。图1中的三极管VT1、VT2及其周围阻容元件构成波形转换电路,把较宽的正脉冲变换为较窄的正脉冲,从而较好地解决了上述的问题。三极管VT1、VT2构成的2级直接耦合放大器作为缓冲器使用,它是CD4060的输出端Q14的灌电流负载,C2、R8是微分电路。 经分析后不难看出,电路中的R7、R8、C2还具有单片机上电复位的功能。 2 上电复位与看门狗信号复位的不同处理过程 由于程序跑飞很可能会造成一些随机破坏事件,对某些系统而言,希望尽可能从断点处恢复运行,因此,有必要妥善解决跑飞的程序回复后的处理。 单片机应用系统上电时,上电复位电路会使得单片机处于复位状态,这一般称为冷启动,这种情况下,单片机处于复位状态表现为: (1) 程序计数器PC的值为0000H。 (2) I/O口(P0、P1、P2、P3(1))为FFH状态,即准双向I/O口的输入状态。 (3) 堆栈指示器SP=07H,即堆栈底为片内RAM的07H单元。 (4) 除上述状态外,所有特殊功能寄存器SFR的有效位均为0。 (5) 上电复位时,由于是重新供电,RAM在断电时数据丢失,上电复位后为随机数。

51单片机制作的波形发生器

51单片机制作的波形发生器 相信很多朋友都可能接触到一个波型发生器的制作,可能刚刚入门,做的东西也不会说是很复杂。可能就一 个矩形波,或者是三角波。但是网上的很多资料是忽悠 人的,就此,我也提供一个比较完整的波型发生器 C51 原代: 该系统的软件比较典型:包括键盘的应用,显示的 应用和 DA 转换器的应用。本设计中,输出的波形有三种:正弦波,方波,三角波。 方波的输出最为简单,只要按照设定的周期值将输 出的电压改变即可。 三角波的输出也比较简单,单片机的输出只要完成 数字量递增和递减交替进行即可。、 正弦波的输出最麻烦,如果在软件中计算出输出的 各点电压值,将会浪费很多的 CPU 时间,以至于无法满足频率的要求。通常最简单的方法是通过手动的方法计 算出输出各点的电压值,然后在编写程序时以数组的方 式给出。当需要时,只要按照顺序进行输出即可。这种 方法比运算法速度快且曲线的形状修改灵活。在本设计 中将 360 度分为 256 个点,则每两个点之间的间隔为1.4 度,然后计算出每个点电压对应的数字量即可。只

要反复输出这组数据到 DAC0832, 就可以在系统输出端得到想要的正弦波。 具体程序如下: #include ; #define uchar unsigned char #define uint unsigned int #define DAdata P0 uchar code Sinetab[256]= { 0x80,0x82,0x84,0x86,0x88,0x8a,0x8c,0x8e, 0x90,0x92,0x94,0x96,0x98,0x9a,0x9c,0x9e, 0xa0,0xa2,0xa4,0xa6,0xa8,0xaa,0xab,0xad, 0xaf,0xb1,0xb2,0xb4,0xb6,0xb7,0xb9,0xba, 0xbc,0xbd,0xbf,0xc0,0xc1,0xc3,0xc4,0xc5, 0xc6,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce, 0xce,0xcf,0xd0,0xd1,0xd1,0xd2,0xd2,0xd3, 0xd3,0xd3,0xd2,0xd2,0xd1,0xd1,0xd0,0xcf, 0xce,0xce,0xcd,0xcc,0xcb,0xca,0xc9,0xc8, 0xc6,0xc5,0xc4,0xc3,0xc1,0xc0,0xbf,0xbd, 0xbc,0xba,0xb9,0xb7,0xb6,0xb4,0xb2,0xb1, 0xaf,0xad,0xab,0xaa,0xa8,0xa6,0xa4,0xa2, 0xa0,0x9e,0x9c,0x9a,0x98,0x96,0x94,0x92,

51单片机基础知识及期末复习

51单片机简答题部分(经典) 1、什么叫堆栈? 答:堆栈是在片内RAM中专门开辟出来的一个区域,数据的存取是以"后进先出"的结构方式处理的。实质上,堆栈就是一个按照"后进先出"原则组织的一段内存区域。 2、进位和溢出? 答:两数运算的结果若没有超出字长的表示范围,则由此产生的进位是自然进位;若两数的运算结果超出了字长的表示范围(即结果不合理),则称为溢出。 3、在单片机中,片内ROM的配置有几种形式?各有什么特点? 答:单片机片内程序存储器的配置形式主要有以下几种形式:(1)掩膜(Msak)ROM型单片机:内部具有工厂掩膜编程的ROM,ROM中的程序只能由单片机制造厂家用掩膜工艺固 化,用户不能修改ROM中的程序。掩膜ROM单片机适合于 大批量生产的产品。用户可委托芯片生产厂家采用掩膜方法 将程序制作在芯片的ROM。 (2)EPROM型单片机:内部具有紫外线可擦除电可编程的只读存储器,用户可以自行将程序写入到芯片内部的EPROM 中,也可以将EPROM中的信息全部擦除。擦去信息的芯片 还可以再次写入新的程序,允许反复改写。 (3)无ROM型单片机:内部没有程序存储器,它必须连接程序存储器才能组成完整的应用系统。 无ROM型单片机价格低廉,用户可根据程序的大小来选择外接 程序存储器的容量。这种单片机扩展灵活,但系统结构较复 杂。 (4)E2ROM型单片机:内部具有电可擦除叫可编程的程序存储器,使用更为方便。该类型目前比较常用 (5)OTP(One Time Programmable)ROM单片机:内部具有一次可编程的程序存储器,用户可以在编程器上将程序写入片内程 序存储器中,程序写入后不能再改写。这种芯片的价格也较 低。 4、什么是单片机的机器周期、状态周期、振荡周期和指令周期?它们之间是什么关系? 答:某条指令的执行周期由若干个机器周期(简称M周期)构成,一个机器周期包含6个状态周期(又称时钟周期,简称S周期),而一个状态周期又包含两个振荡周期(P1和P2,简称P周期)。也就是说,指令执行周期有长有短,但一个机器周期恒等于6个状态周期或12个振荡周

相关主题
文本预览
相关文档 最新文档