51系列单片机

2024-10-04

51系列单片机(精选12篇)

51系列单片机 篇1

1 引言

在各种单片机控制程序中,常用到定时程序,单片机定时一是用定时器中断,二是用软件延时。一般来讲,定时器中断作定时相对是较为精确的,这一方面提高定时精度的研究也有许多[1],当然,绝对精确是不存在的,在一般常规控制领域,很高精度意义上的精确也是没有必要的,能满足应用系统需求即可。因为单片机的中断源数量有限,所以软件延时方法也很常用。

在很多应用场合,延时精确到ms级已足够,但也有一些地方如串行扩展系统中的时序控制,需要精确到μs级,不论精确到哪一级,用汇编语言设计延时程序都是比较容易的[2],而用C语言设计则较难,所以我们提议用C语言设计应用系统时,采用C语言和汇编语言混合编程的方法,应用系统中的延时程序用汇编语言设计。

很多人认为,编写延时程序是一项很麻烦的任务,需要多次修改才能满足要求,之所以如此,是因为很多人编写延时程序时往往先写出一个粗略的框架,然后去计算程序的延时时间,不满足要求时再修改循环次数,如此反复,直到满足要求,可以说是“凑”出来的延时程序。这是一种无计划的随机设计方式,没有统一的计算方法,每设计一个延时程序都要反复测试多次。在这一方面虽有许多研究,但因为没有规范的计算方法,有时设计的延时程序误差很大[3]。在这里提出一种规范的计算方法,由要求的延时时间计算出延时程序的循环次数并保证误差最小。

2 汇编语言设计延时程序

2.1 使用的符号和基本公式

f0:单片机晶振频率;

tm:单片机机器周期,tm=12/f0;

dt:要求的延时时间;

m:延时时间需要的机器周期数。

m=dt/tm=dtf0/12;(1)

(1)式即延时计算的基本公式,在公式中,如果f0以MHz为单位,则dt以μs为单位。根据需要的延时时间dt计算出延时所需的机器周期数m后,设计延时时间为dt的延时程序就变成了设计延时m个机器周期的程序。

2.2 延时程序的一般形式

把延时程序分成短暂延时、中等延时和长延时3种,形式不同,计算方法也不相同。

(1)短暂延时程序:短暂延时程序的延时时间在几十μs以下,常用于时序控制,如I2C接口时序需要5μs的延时,1-WIRE器件温度传感器DS18B20需要15μs和60μs的延时,这种延时只使用NOP指令即可,一个NOP指令执行时间为一个机器周期。例如:对11.0592MHz的晶振,设计15μs的延时程序,根据(1)式,计算得所需机器周期数为:

m=15*11.0592/12=13.824=14

因为调用延时程序时的一条LCALL或ACALL指令用2个机器周期,延时程序结束时的RET指令用1个机器周期,所以延时程序要用14-3=11个NOP指令,程序形式如下:

Delay:NOP;共11个NOP指令

NOP

RET

60μs的延时程序可调用4次15μs的延时程序。这种看似很笨的方法其实是既简单又精确的方法,完全可以满足各种时序的要求。

(2)中等延时程序:中等延时程序是指可以用一个8位寄存器构造的一重循环实现的程序,一般形式为:

delay:mov r7,#n;1个机器周期

dlp:

NOP;k个NOP,k个机器周期

NOP

djnz r7,dlp;2个机器周期

ret

延时的机器周期数m为(下式最后加3是调用和返回指令的机器周期数):

m=1+n(k+2)+3=4+n(k+2)(2)

在不加NOP指令时(k=0),(2)式变为:

m=4+2n(3)

取n=255,由(3)式得最大延时的机器周期数为:514,对11.0592MHz的晶振,由(1)式得最大延时时间为:557.726μs。如果延时时间不超过557.726μs,根据(1)、(3)式由延时时间计算出n值即可。例如,对11.0592MHz的晶振需要延时480μs的延时程序,计算得所需机器周期数:m=442.368,n=220,误差为-0.3993μs。延时程序为:

delay:mov r7,#220

djnz r7,$

ret

在内层循环中加若干条NOP指令可以很方便地扩展延时时间,例如加8条NOP指令(k=8),由(2)式得最大延时的机器周期数为:2554,对11.0592MHz的晶振,由(1)式得最大延时时间为:2771.27μs。当k≠0时,对给定的延时时间,先取n=255,由(1)、(2)式初步估算一个k值,将其进位取整,再将取整后的k代回(2)式重算n值,这样作的目的是在能保证延时时间的条件下尽可能减少内层循环的指令,从而减少误差。例如,对11.0592MHz的晶振需要延时约2000μs的延时程序,计算得所需机器周期数:m=1843.2,k=6,n=230,误差为+0.8681μs。延时程序为:

delay:mov r7,#230

dlp:NOP;6个NOP

djnz r7,dlp

ret

(3)中延时程序:中延时程序是指用两个8位寄存器构造的两重循环实现的程序,一般形式为:

delay:mov r7,#n1;1个机器周期

dlp1:mov r5,#n2;1个机器周期

dlp2:;加k个NOP

NOP;1个机器周期

NOP;1个机器周期

djnz r5,dlp2;2个机器周期

djnz r7,dlp1;2个机器周期

ret

延时的机器周期数m为:

m=1+n1(1+n2(k+2)+2)+3=4+n1(3+n2(k+2))(4)

在不加NOP指令时(k=0),(4)式变为:

m=4+n1(3+2n2)(5)

取n1=n2=255,由(5)式得最大延时的机器周期数为:130819,对11.0592MHz的晶振,由(1)式得最大延时时间为:141948μs。当k=0时,对给定的延时时间,先取n1=255,由(1)、(5)式初步估算一个n2值,将其进位取整,再将取整后的n2代回(5)式重算n1值,这样作的目的是在能保证延时时间的条件下尽可能减少内层循环的指令,从而减少误差。例如,对11.0592MHz的晶振需要延时约10ms的延时程序,计算得所需机器周期数:m=9216,n2=17,n1=249,误差为+1.0851μs。延时程序为:

delay:mov r7,#249

dlp1:mov r5,#17

djnz r5,$

djnz r7,dlp1

ret

同样,在内层循环中加若干条NOP指令可以很方便地扩展延时时间,例如加8条NOP指令(k=8),由(4)式得最大延时的机器周期数为:651019,对11.0592MHz的晶振,由(1)式得最大延时时间为:706401μs。当k≠0时,对给定的延时时间,先取n1=n2=255,由(1)、(4)式初步估算一个k值,将其进位取整,再将取整后的k代回(2)式并取n1=255重新估算一个n2值,将其进位取整,再将取整后的k和n2代回(2)式重新计算n1,这样做的目的也是在能保证延时时间的条件下尽可能减少内层循环的指令,从而减少误差。例如,对11.0592MHz的晶振需要延时约500ms的延时程序,计算得所需机器周期数:m=460800,k=6,n2=226,n1=254,误差为-870.226μs。延时程序为:

delay:mov r7,#254

dlp1:mov r5,#226

dlp2:NOP;6个NOP

djnz r5,dlp2

djnz r7,dlp1

ret

3 C51语言设计延时程序

直接用C51语言设计较准确的延时程序是比较困难的,人们提出的方法主要有软件仿真(4)和反汇编分析两种(5),其实这两种方法也都是无计划的随机设计方式,每设计一个延时程序要反复测试多次,严格地讲基本上不具备实用价值。实际上,C51语言可以非常方便地调用汇编语言程序,这样,在C51程序中用汇编语言设计延时程序即可。

3.1 C51程序中另一种短暂延时函数的设计

C51程序中的短暂延时除了调用汇编语言程序外,还有另一种更简单的方法,就是使用INTRINS.H头文件,这个文件主要包含了51单片机的空操作和循环移位等几条汇编指令的C语言调用接口。C51程序包含了INTRINS.H头文件后,可以用:_nop_();形式直接调用汇编语言的空操作指令,这样,C51程序中短暂延时函数形式为:

delay()

{_nop_();

_nop_();

}

同汇编语言程序一样,调用此函数要执行一条LCALL和一条RET指令,它们占用3个机器周期,要考虑到延时时间内。

3.2 C51程序调用汇编语言程序

在C51中使用汇编语言有内嵌和调用两种方式(6),对延时程序来讲,C51程序调用汇编语言程序比较合适,既可以无参调用也可以有参调用,编程方法如下:

(1)在工程中建立一个C程序文件(*.c)和一个汇编语言程序文件(*.asm);

(2)在C程序文件中声明汇编语言函数为外部函数,例如声明以下两个延时函数,一个无参,一个有参:

extern delay(),delay1(uchar,uchar);

在以后的程序中可随时调用这两个函数;

(3)在汇编语言程序文件中用汇编语言设计两个延时函数:

;无参函数delay

?PR?delay SEGMENT CODE;放在代码段

PUBLIC delay;声明为公共函数

RSEG?PR?delay;函数放代码段任意位置

delay:mov r7,#200

d1:mov r6,#250

d2:nop

nop

djnz r6,d2

djnz r7,d1

ret

;有参函数delay1,特别注意:函数名前加下划线(_delay1),两个参数由r7和r5传递

?PR?_delay1?DELAY1 SEGMENT CODE

PUBLIC_delay1

RSEG?PR?_delay1?DELAY1

_delay1:mov a,r5;保存r5

dlp1:mov r5,a

djnz r5,$

djnz r7,dlp1

ret

end

4 结语

介绍的方法是非常规范、实用的计算方法,在设计各种单片机应用系统中都可以直接使用。如果延时时间很长,加NOP指令的二重循环仍不能胜任,可用三重循环实现,计算方法完全类似,不难导出。

参考文献

[1]蹇兴亮.单片机定时中断的精确定时编程方法种种[J].单片机与嵌入式系统应用,2004,(8):70-71.

[2]沈舷.延时程序延时时间的精确计算[J].机械制造与自动化,2005,(6):152-153.

[3]彭志刚.51系列单片机延时程序运行时间的计算[J].仪器仪表用户,2008,(5):102-103.

[4]段向东,等.Keil C51程序设计中几种精确延时方法[J].单片机与嵌入式系统应用,2007,(12):33-35.

[5]薛小玲,等.C8051F单片机C程序精确延时的方法[J].单片机与嵌入式系统应用,2008,(9):77-79.

[6]沈洋,等.单片机C51与汇编语言的混合调用[J].电脑编程技巧与维护,2009,(s1):87-88.

51系列单片机 篇2

摘要:首先介绍了光幕测量高度的原理,给出了高度测量光幕的一种实现方法,分析了由该方法设计的系统结构和主要性能。从而彻底解决了相邻通路间的干扰,提高了测量精度。

关键词:单片机;测量光幕;分级

1 引言

光幕是电子测量系统中应用比较多的一种设备。利用光幕可以测量恒速传送带上的物体高度、长度或宽度等一系列数据,以便为后面的电子系统提供相应的参数。本文给出了一种利用单片机实现物体高度测量的光幕测量方法。

2 光幕测量物体高度的基本原理

图1所示是一个用普通光幕测量物体高度的测试原理结构示意图。图中,光幕的一边等间距安装有多个红外发射管,另一边相应的有相同数量同样排列的红外接收管,每一个红外发射管都对应有一个相应的红外接收管,且安装在同一条直线上。当同一条直线上的红外发射管、红外接收管之间没有障碍物时,红外发射管发出的.调制信号(光信号)能顺利到达红外接收管。红外接收管接收到调制信号后,相应的电路输出低电平,而在有障碍物的情况下,红外发射管发出的调制信号(光信号)不能顺利到达红外接收管,这时该红外接收管接收不到调制信号,相应的电路输出为高电平。当光幕中没有物体通过时,所有红外发射管发出的调制信号(光信号)都能顺利到达另一侧的相应红外接收管,从而使内部电路全部输出低电平。这样,通过对内部电路状态进行分析就可以得出物体的高度信息。由于上下相邻光路可能会相互干扰,因此,选取的红外发光管的发射角度要小于15°,此外,考虑到光幕要有一定的宽度,因而还应对红外发射管发出的信号进行调制。但在实际制作中,上下两路总存在干扰,很难提高测量精度。为了彻底从根本上解决相邻两路的干扰问题,本文给出了一种用C51单片机及相关芯片来实现高度测量的方法。

3 高度测量光幕系统结构及工作过程

高度测量光幕的系统结构如图2所示。器件的红外发射和接收通路数目理论上最大可有215个,考虑到实际光幕的高度和上下通路之间的间距,一般不会超过64个。为方便介绍,本文以通路数16为例,且按安装的高度从高到低依次标为1路、2路、3路。……16路。发射和接收部分的多路选择开关选用常见的多路选择器(如7LS15系列)。发送端的多路选择器的A0~A3接单片机的P1.0~P1.3,接收端的多路选择器的A0~A3接单片机的P1.4~P1.7,并入串出模块和串入并出模块选用8位移位寄存器(如74lLS165和74HC595)。并入串出模块的装载信号Ld=P1.4・WR? 串入并出模块的数据读出信号 E =P1.5・RD。移位控制信号端接TE同步信号。RAM用来存储数据,可将其接在单片机的P0和P2口上。其容量的大小视处理的数据量的多少而定。本文选择1kB。同步信号TE和移位时钟CP可用单片机的定时器产生,也可用CP时钟8分频来作为TE信号。对串入并出模块的读和对并入串出模块的写均可通过中断方式来完成。同时?用单片机的串口可将处理后的高度数据送出。直线扫描模式下,器件的工作流程如下:首先单片机在TE的下降沿到来后,向串入并出模块写入要发送的数据?如01H?,并同时向发送端和接收端送出相同的通路选择信号?即第一路地址信号?。而当TE的上升沿到来时,在移位时钟的控制下?数据01H开始经多路开关被送到第1路的红外发射电路,再经调制后以光信号形式发出,与此同时?红外接收电路在TE上升沿到来时开始启动接收。由于发送和接收的多路开关选择信号相同,因此,实际上只有与发射端相对应的一路(即第一路)才被接收。经解调后的数据一般可在移位时钟的作用下被移入串入并出模块,并在TE下降沿到来时接收完毕,同时触发单片机的中断处理程序,使数据被单片机读走。单片机再对发出的数据和接收到的数据进行比较,若不同?注:这里只有在该通路中有物体阻挡时,才接收不到发送信号,致使发送和接收的数据不同),则表明该路有

[1] [2]

★ 五年级下册《从三个不同方向观察物体》教案设计

★ 用手来测量科学教案

★ 《从不同角度画物体》教学反思

★ 用骇人听闻来造句

★ 怎么用恒牙来造句

★ 用不知不觉来造句

★ 怎么用迁客骚人来造句

★ 怎么用买椟还珠来造句

★ 用自得其乐来造句

培养学生51单片机应用能力 篇3

【关键词】单片机;应用能力;设计电路;编写程序

【中图分类号】G642【文献标识码】A【文章编号】1001-4128(2011)01-0183-02

作者简介:张仁杰(1959.1-),男,大连,本科,楼宇自动化,工程师。

51单片机是一门应用性很强的课程,他要求设计者,了解51单片机的工作原理,并能掌握各种电路特性的综合知识,才能达到应用目的。

1 51单片机重点要求

51单片机主要是以并行口为主,其时序关系(时序逻辑)清楚,根据实际要求,设计所需要的显示和键盘以及接口电路,达到经济适用的系统电路。根据51单片机的特点,掌握硬件电路设计是最基本的要求,在这个基础上,开发应用软件,就成为51单片应用机水平的体现。因此,硬件电路设计完后,应用程序就直接关系到这套系统应用范围和应用水平。

2 基础知识的掌握

51单片机有数据口、地址口、并行输入/输出口、串行口、中断、时序等电路组成。应用时,主要以扩展这些电路和时需配合为主,形成DI、DO、AO、AI、串行接口电路,这些电路构成一个系统。根据设计要求,编写应用程序。需要掌握并行口、译码电路设计、读/写信号的逻辑关系以及他们相配合的电路知识。

3 知识要点的应用

单片机应用很简单,只要能把单片机设计的出入/输出电路逻辑关系正确,模拟电路部分,逻辑合理,网络应用得当,剩下键盘和显示电路就根据自己的实际要求,设计有效、方便实用的电路,就达到设计目的。目前,最有竞争力的电路是一些显示和键盘模块集成在一起的电路,他们省去设计电路和调试电路的烦恼,并且电路稳定,运行效果很好,得到很多业内人士青睐。为此,很多设计这节省大量周期,缩短开发时间,这是一件很好的事情。事情总是有利,必然有弊。因为,每个设计者都要根据具体项目,要求设计最合理的电路,会使已经设计好的电路,完全满足项目设计要求是一件很难的事情。要想达到设计要求,就会采用更强大的应用电路,完成这次设计要求,会出现有些功能应用不上的现象。形成一种硬件资源浪费,同时加大开发成本。所以,我们认为,如果项目设计的电路规模小,就采用满足项目要求的电路模块,直接使用。如果项目规模很大,就应该自己开发,减少成本,让每一个硬件电路,都能发挥自己的作用。

上面是硬件电路的做法,而软件如何应用呢?我们认为,软件首先采用模块化软件程序,目的是为调试程序和修改程序方便。在这里只是对一些简单软件应用做法进行叙述。因为,每个程序员编写的程序都有所不同,使用方法也不同,没有统一标准。

电路中的抗干扰处理,经常可以看到的,采用软件进行抗干扰处理也是经常出现的。例如:模拟电路采集数据时,由于电路中的干扰信号的存在,就会影像数据采集的真实性,要想让每一个数据,都能得到真实有效的数据,就应该采用软件抗干扰处理功能。具体做法是,可以采集几个或几十个数据求出平均值,得到一个接近真实数据的数据。

另外,数据开关也是同样。实际电路中会有许多干扰信号,要想得到真实有效的的信号,就应该对此开关信号多次采集,确认真实性和有效性。

4 程序调试

程序调试过程说起来简单,调试程序,会感到特别麻烦的一件事情。因为在这个过程中,所有的问题都要实现,在此解决,最后应用到实际中去。在实际现场中,还会出现一些问题,这些问题是想象不到的问题,可以另行处理。调试的过程,就是解决项目中基本要求和可预见的问题的处理过程,每个功能都要进行测试并考核。调试基本操作虽然容易,但是需要讲究调试方法,方法得当,会加快调试速度,减少调试时间。怎样调试可以加快速度呢?一般是分段调试,测试现象,得到满意效果为止;然后联调,联调目的是为了解决模块相互配合的问题;最后统一调试,达到项目系统功能要求。在此期间分别对基本功能进行测试,然后对抗干扰进行测试,对系统稳定性等重要指标进行测试,只有把相应的测试都认真做一遍或几遍,才有可能在实际中不会出现问题。否则会在实际中出现很多预想不到的问题,这些问题与系统本身问题交织在一起,你很难找到解决问题的方法,这就是很多人在实际项目中失败的原因。

5 实际应用遇到的问题及解决方法

实际项目运行是一件很复杂的过程的集合。存在着各种复杂因素,稍不注意,就会导致,项目的失败。

在实际项目中经常会遇到的问题有:

一是工艺问题,这个问题主要出现在开发研究单位,这些单位主要的精力是开发项目,对项目的理论过程没有问题,处理解决问题方法也得当,就是产品工艺存在严重不足,即电路设计本身就存在问题,这是后天无法解决的事情,这种情况,最为麻烦,很不好解决。

二是电路欠考虑,即设计不周到。主要原因是设计这经验不足,缺少实际经验,需要长期磨练,才能很好的解决这个问题。

三是软件编写出现漏洞,这个问题还好办,出现这个问题后,只要把相应的软件匹配上,就可以了,达到完整的结果。

四是使用者随时提出新的条件。即设计单位根据实际项目要求,设计出相应电路和应用软件。使用单位在调试过程中,提出一些改进意见,使系统不能达到完美的结果。因为软件越修改,越容易出现更多的问题。

虽然在实际项目中,会遇到很多问题,主要是这几方面因数。解决这些问题的办法,就是认真调查项目本身的内容和相关细节内容。不能出现遗漏。电路设计不能出现差错,保证电路的逻辑功能和抗干扰性以及模拟电路的正常工作,对强电和弱点要有区分,分别处理。软件上采取模块化编程方法,测试软件时,尽可能把每个功能和细节地方都测试到,即各种条件下的情况都测试到,保证软件的稳定性,要充分考虑到软件修改的方便性,使软件运行在良好的状态下。

5 总结

单片机主要是应用,因为只有应用,才能发挥它的作用。因此硬件是系统运行的基础,软件是在此基础上更好的发挥硬件所提供的功能。两者相互依存,不能分开。只有统筹考虑,才能获得最佳效果,这就是单片机应用的灵魂。

参考文献

[1] 申文达、李可、董云峰.在电工电子实验教学中培养学生的实践与创新能力[J].北华航天工业学校学报.第20卷.2010年7月

[2] 周晓丹,刘凤春,王林.电子工程训练教学改革实践[J].北华航天工业学校学报.第20卷.2010年7月

51系列单片机 篇4

软件抗干扰的设计方法通常有:开机自检和初始化、软件陷阱、看门狗、关键信息三取二等等,这些设计能有效地防止程序走飞,或者在程序走飞后将程序拉回正常轨道。本文结合了作者在软件测试工作的经验和实例,讲述了51系列单片机软件的多种抗干扰设计方法及注意事项。

1 抗干扰设计方法

1.1 开机自检和初始化

开机自检和初始化是每个嵌入式软件上电运行的第一个抗干扰步骤,通常会有以下一些操作:

1)对程序ROM区的校验和;

2)对RAM区先写后读0xaa,0x55查看写入与读出的数是否一致;

3)检查I/O口;

4)检测其他接口电路,如扩展的EEPROM、A/D转换电路等。

程序自检和初始化设计时需要注意的问题有:

1)自检错误时程序应给出错误提示;

2)对接口进行自检时,应设定响应时间限制,以保证在硬件无响应的情况下程序不会陷入死循环,会及时报错;

3)初始化时注意考虑对自检结果带来的影响。

这里对于第3点举例说明:

某软件要求程序的遥测下传数据中应包含当前工作状态、硬件故障等信息,该软件具有冷、热启动功能。程序实现:冷启动时对所有的内存进行了初始化,热启动时对遥测下传数据进行初始化。程序自检和初始化流程如图1所示。

从流程可以看出,自检工作在初始化之前进行,导致自检错误信息被初始化,即自检错误不会被遥测记录并发送。

由于程序自检一般不会出错,因此该错误一直潜伏在程序中,直至第三方测试时构造了自检错误的测试案例才被发现。从这个实例我们得出:软件的初始化内容要慎重处理,不能简单地直接初始化所有使用资源,要充分考虑自检操作使用资源的因素,并在设计时梳理全局资源,避免全局资源的使用冲突。

1.2 软件陷阱

通常在程序存储器中未使用的EPROM空间填入空操作指令NOP(00H),最后再填入一条跳转指令,跳转到跑飞处理程序,或者直接填入指令LJMP 0000H(020000)。

软件陷阱的一般结构为:

由于51单片机有两个中断优先级,为了防止软件在二级中断嵌套时走飞,由软件陷阱转入初始化程序时,要用两个中断返回语句清除二级中断服务状态标志,如以下代码所示:

在某软件的测试中,将程序PC指针拉飞后程序运行至跑飞处理程序,确没有正确复位,跑飞处理程序如下:

与标准的跑飞处理程序比较可以看出,该程序的错误是在ERR子程序中地址压栈时高低位顺序错误。为什么设计师会犯这样的错误呢?因为设计师习惯了中断子程序中的现场保护写法,在普通的中断子程序中,通常会在中断开头保护现场,中断结束恢复现场,即:

设计师照着中断中现场保护的写法来涉及跑飞处理程序,却没有注意到,中断中的地址是先压栈后出栈的,而跑飞处理程序中该地址只有压栈操作,是靠RETI这个指令进行出栈操作的。

这里就涉及到对RETI这个指令的理解,在51系列单片机中,响应中断后,硬件自动生成LCALL addr16的指令,addr16是各中断源的中断矢量地址。被中断打断时程序运行至一个地址,我们称为断点地址。处理器首先将程序计数器PC的内容(断点地址)压入堆栈进行保护,先低位地址后高位地址,同时堆栈指针SP加2。然后将对应中断源的中断矢量地址addr16装入PC,使程序转向该地址去执行中断程序。在遇到RETI指令后,程序干两件事:一是撤销中断申请,弹出断点地址,先弹出高位地址,后弹出低位地址,同时堆栈指针SP减2,恢复原程序的断点地址执行;二是恢复中断触发器原先状态。

以上这些都是在中断响应时硬件自动执行的,因此,对于断点地址入栈的顺序设计师通常都不会注意,断点地址自动入栈时是先低位地址后高位地址,RETI恢复时是先弹出高位地址,后弹出低位地址。由于跑飞处理程序是一个子程序,而不是中断程序,因此硬件不会自动将断点地址压栈,这里ERR的PUSH语句就是为了将断点地址压栈,因此应当按照先低位后高位的顺序进行,以匹配之后RETI语句的出栈操作。

以上是汇编语言的跑飞处理程序,需要注意的是在51系列的高级语言编程程序中,要在跑飞处理程序中进行中断申请的撤销。因为通常中断子程序在结束处会对中断申请进行撤销,但是一旦在中断执行过程中程序走飞进入跑飞处理程序,那么中断子程序最后的撤销操作未被执行,即中断申请未被撤销,因此需要在跑飞处理程序中进行该操作,避免程序复位后中断未被释放而导致中断不响应。

1.3 看门狗

看门狗是防止软件陷入死循环的有效手段,在正常工作时,安插在循环程序中的清除脉冲信号周期性地清除看门狗,看门狗定时器不会溢出,当系统受到干扰使程序跑飞时,看门狗定时器得不到及时清除而溢出,产生CPU复位信号,使系统重新开始[2]。

由于看门狗对时间的要求非常精确,为了避免在正常的流程中超时喂狗而导致看门狗复位,设计师有时会陷入“喂狗综合症”,即过于频繁的清除看门狗,导致看门狗失去作用。

在某程序的测试过程中,设计师在主程序和某中断程序中均进行了喂狗操作,由于该中断触发频繁,且中断优先级高,导致喂狗过频。在这种情况下如果主程序走飞,看门狗也不能发现,因为频繁到来的中断中不停在喂狗,导致看门狗定时器不会溢出。因此在看门狗设置上,通常的建议是只在主程序中喂狗,以保证狗确实能看住“门”。

1.4 关键信息三取二

对于在太空环境中运行的软件来讲,关键数据三取二是防止单粒子翻转的有效且必要的手段,所谓三取二即是将关键的数据存储在三个不同的地方,访问数据应采取三取二表决方式裁决。

某软件的主要功能是控温,加热片温度低于加热点则控制进行加热,加热片温度高于断开点则控制停止加热。加热点/断开点的温度值由外部注入,程序中对加热点/断开点温度值进行了三取二操作。测试中针对三取二模拟了各种情况,当构造三取二操作两两相异的情况时,问题出现了。所谓两两相异,即温度值存放的三个地方的值各不一样。程序中当遇到三取二错误时,直接放弃了控温操作,既没有采取遥测下报措施,也没有考虑重要数据三取二错误后的备份控温方案。如果当前加热片处于加热状态,而外部也没有重新进行控温注数,那么加热片将一直加热下去,很可能导致硬件故障。

因此,三取二操作设计时应注意容错性的设计,即在三取二操作失效后程序的处理。

2 结束语

当前的科研生产均提倡“降本增效”,在硬件上增加抗干扰性设计提高成本,因此通过软件设计提高系统和产品的可靠性已越来越受到科技人员的重视。软件抗干扰设计方法多种多样,且都不是单独使用的,不同的软件需要根据实际情况结合实现多种抗干扰手段。设计师在进行抗干扰设计时应考虑全面,使程序做到防错、容错、纠错的全面性,保证单片机系统稳定可靠地工作。

参考文献

[1]于洪洲,程建.51系列单片机软件抗干扰设计[J].集成电路通讯,2007(6):1-2.

51单片机测距程序 篇5

按下按键k检测距离,松开锁定结果

按下按键find 查询历史测量数据,本程序可查询5次历史数据 按下out键 退出历史数据查询功能 Test可不接 */ #include

#define uchar unsigned char #define uint unsigned int #define duan P1

//数码管段选接口 sbit w1=P2^0;

//数码管位选接口 sbit w2=P2^1;

//数码管位选接口 sbit w3=P2^2;

//数码管位选接口 sbit w4=P2^3;

//数码管位选接口 sbit Trig=P0^5;

//测距模块Trig接口 sbit Echo=P3^2;

//测距模块echo接口 sbit test=P3^1;

//测试灯接口 sbit k=P3^4;

//测距按键接口 sbit find=P3^5;

//查询历史数据按键接口 sbit out=P3^6;

//退出历史查询按键接口 sbit find_light=P2^4;

//历史数据查询指示灯(绿灯)sbit whithout_light=P2^5;

//历史数据查询完毕指示灯(红灯)sbit warn=P2^6;bit succeed_flag;

//测量成功标志位 uint timeL=0,timeH=0;

//接收时间数据中间变量 uchar code temp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};uint save[6]={0,0,0,0,0,0};

//历史数据储存数组

/************************延时程序********************************/ void delay(uint z){ uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);} /**************************测距模块专用延时*******************************/ void delay_20us(){

uchar a;

for(a=0;a<100;a++);}

/*****************数码管显示****************/ void display(uint num){

uchar q,b,s,g;q=num/1000;b=num/100%10;s=num/10%10;g=num%10;w1=0;

duan=~temp[q];delay(2);

//对传入参数进行分解

//打开位选

//段选赋值

w1=1;

//关闭位选

duan=0xff;

w2=0;duan=~temp[b];delay(2);w2=1;duan=0xff;

w3=0;duan=~temp[s];delay(2);w3=1;duan=0xff;

w4=0;duan=~temp[g];delay(2);w4=1;duan=0xff;} /***************************************************************/ void main(){

uint d,time=0;uchar u,s=1;find_light=1;whithout_light=1;P0=0xdf;

test =0;

Trig=0;

EA=1;

//打开中断总开关

TMOD=0x10;

//定时器1工作在方式1

while(1){

if(k==0){

//按键按下则测量,松开则锁定

delay(10);

//延时消抖

if(k==0){

EA=0;

Trig=1;

delay_20us();

Trig=0;

while(Echo==0);

succeed_flag=0;

EA=1;

EX0=1;

TH1=0;

TL1=0;

TF1=0;

TR1=1;

delay(20);

TR1=0;

EX0=0;

if(d<100||d>3000){

warn=~warn;

delay(10);

}

} }else{

save[0]=d;

//关闭中断总开关

//给予Trig断高电平

//高电平持续20us //置Trig为低电平,以产生20US方波

//等待声波发出,发出后开启定时器中断

//测距成功标志位置0

//以下打开定时器中断并初始化

//关闭外部中断

//对测量数据进行储存

if(save[0]!=save[1]){

//若当前数值与前一数值不同,则数据整体后移

for(u=5;u>0;u--){

save[u]=save[u-1];

}

}

}

if(succeed_flag==1){

//若测距成功,对数据进行整理

time=timeH*256+timeL;

//声波收发时间=高8位*256+低8位

d=time*0.172;

//距离=时间*速度/2(单位为MM)

display(d);

}

if(succeed_flag==0){

//若测距失败则距离显示为0

d=0;

test =!test;

}

while(find==0){

//若按下历史数据查询按键,则进入查询程序

while(out!=0){

find_light=0;

display(save[s]);

if(find==0){

//每按下一次查询按键,就会显示前一次数据

s++;

if(s==6){

//若查询完一遍,则查询完指示灯亮起,从头重新显示

s=1;

whithout_light=0;

}

while(find==0);

}

if(out==0){

//若按下退出键,则退出查询

s=1;

find_light=1;

whithout_light=1;

break;

}

}

}

} } /**************************外部中断0********************************/ void exter()interrupt 0{

//当声波返回时获取TH1与TL1的数据

timeH =TH1;

timeL =TL1;

succeed_flag=1;

//成功标志位置1

EX0=0;

//关闭外部中断

} /****************************定时器1***********************************/ void timer1()interrupt 3{

//用于计算声波传播的时间

TH1=0;

TL1=0;

51系列单片机 篇6

关键词:AT89C51单片机;LCD;Proteus

中图分类号:TN702 文献标识码:A 文章编号:1674-7712 (2012) 12-0046-02

一、引言

亮丽实用的广告牌可以给我们的生活添加光彩、可以给店铺招揽生意。传统的广告牌都是固定的汉字,并且时间长了会掉色,使汉字模糊难认,这给我们的生活带来很多的不便。尤其是到了晚上传统的广告牌就失去了作用。因此我们需要一种造价低廉、使用方便、可以发光、可以方便改变汉字且比较耐用的电子显示广告牌。

二、设计过程及工艺要求

(一)基本功能

1.可以发光;

2.可以滚动;

3.可以用电脑改变汉字。

(二)主要技术参数

1.单片机选择AT89C51;

2.LCD显示器选择SMG12864A或AMPIRE128×64;

3.晶振选择12MHz;

4.两个输出电容选择30pF;

5.两个外围电阻选用10K和100Ω。

本设计的主要任务是显示标语,因此在硬件安装方面需要有适当的面积来安装电子显示屏,并且还要通过数据线把电子显示屏和电脑连起来。

三、系统的总体设计

(一)系统设计

本设计是基于51单片机的LCD汉字滚动显示,该设计是以AT89C51基本系统为核心的一套应用系统,其中包括单片机、复位电路、外围电路、显示电路、系统软件等部分的设计【1】。

(二)芯片AT89C51介绍

AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器, 该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。AT89C51的实物图如图所示。

AT89C51具有以下标准功能:8k字节Flash,256字节RAM,32 位I/O口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89C51可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止【2】。

(三) LCD显示屏介绍

LCD 液晶显示器是 Liquid Crystal Display 的简称,LCD 的构造是在两片平行的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电与否来控制杆状水晶分子改变方向,将光线折射出来产生画面。比CRT要好的多,但是价钱较其稍贵。LCD主要应用于电脑的显示屏,随着电子技术的发展越来越多的手写手机也大量使用LCD做显示屏,还有一些广告牌、标语栏等也都用LCD来显示。

液晶显示屏(LCD)用于数字型钟表和许多便携式计算机的一种显示器类型。LCD显示使用了两片极化材料,在它们之间是液体水晶溶液。电流通过该液体时会使水晶重新排列,以使光线无法透过它们。因此,每个水晶就像百叶窗,既能允许光线穿过又能挡住光线。液晶显示器(LCD)目前科技信息产品都朝着轻、薄、短、小的目标发展,在计算机周边中拥有悠久历史的显示器产品当然也不例外。在便于携带与搬运为前提之下,传统的显示方式如CRT映像管显示器及LED显示板等等,皆受制于体积过大或耗电量甚巨等因素,无法达成使用者的实际需求。而液晶显示技术的发展正好切合目前信息产品的潮流,无论是直角显示、低耗电量、体积小、还是零辐射等优 点,都能让使用者享受最佳的视觉环境。

液晶显示器,依驱动方式来分类可分为静态驱动(Static)、单纯矩阵驱动(Simple Matrix)以及主动矩阵驱动(Active Matrix)三种。其中,被动矩阵型又可分为扭转式向列型(Twisted Nematic;TN)、超扭转式向列型(Super Twisted Nematic;STN)及其它被动矩阵驱动液晶显示器;而主动矩阵型大致可区分为薄膜式晶体管型(Thin Film Transistor;TFT)及二端子二极管型(Metal/Insulator/Metal;MIM)二种方式。 TN、STN及TFT型液晶显示器因其利用液晶分子扭转原理之不同,

液晶显示屏在视角、彩色、对比及动画显示品质上有高低程次之差别,使其在产品的应用范围分类亦有明显区隔。以目前液晶显示技术所应用的范围以及层次而言,主动式矩阵驱动技术是以薄膜式晶体管型(TFT)为主流,多应用于笔记型计算机及动画、影像处理产品。而单纯矩阵驱动技术目前则以扭转向列(TN)、以及超扭转向列(STN)为主,目前的应用多以文书处理器以及消费性产品为主。在这之中,TFT液晶显示器所需的资金投入以及技术需求较高,而TN及STN所需的技术及资金需求则相对较低。

(四)LCD的主要参数如下

1.对比度

液晶显示器的对比度实际上就是亮度的比值,定义是:在暗室中,白色画面(最亮时)下的亮度除以黑色画面(最暗时)下的亮度。更精准地说,对比度就是把白色信号在100%和0%的饱和度相减,再除以用Lux(光照度,即勒克斯,每平方米的流明值)为计量单位下0%的白色值(0%的白色信号实际上就是黑色),所得到的数值。对比度是最黑与最白亮度单位的相除值。因此白色越亮、黑色越暗,对比度就越高。对比度是液晶显示器的一个重要参数,在合理的亮度值下,对比度越高,其所能显示的色彩层次越丰富。

nlc202309011129

2.亮度

LCD是一种介于固态与液态之间的物质,本身是不能发光的,需借助要额外的光源才行。因此,灯管数目关系着液晶显示器亮度。最早的液晶显示器只有上下两个灯管,发展到现在,普及型的最低也是四灯,高端的是六灯。四灯管设计分为三种摆放形式:一种是四个边各有一个灯管,但缺点是中间会出现黑影,解决的方法就是由上到下四个灯管平排列的方式,最后一种是“U”型的摆放形式,其实是两灯变相产生的两根灯管。六灯管设计实际使用的是三根灯管,厂商将三根灯管都弯成“U”型,然后平行放置,以达到六根灯管的效果。

3.信号响应时间

响应时间指的是液晶显示器对于输入信号的反应速度,也就是液晶由暗转亮或由亮转暗的反应时间,通常是以毫秒(ms)为单位。要说清这一点我们还要从人眼对动态图像的感知谈起。人眼存在“视觉残留”的现象,高速运动的画面在人脑中会形成短暂的印象。动画片、电影等一直到现在最新的游戏正是应用了视觉残留的原理,让一系列渐变的图像在人眼前快速连续显示,便形成动态的影像。人能够接受的画面显示速度一般为每秒24张,这也是电影每秒24帧播放速度的由来,如果显示速度低于这一标准,人就会明显感到画面的停顿和不适。按照这一指标计算,每张画面显示的时间需要小于40ms。这样,对于液晶显示器来说,响应时间40ms就成了一道坎,低于40ms的显示器便会出现明显的画面闪烁现象,让人感觉眼花。要是想让图像画面达到不闪的程度,则就最好要达到每秒60帧的速度。

4.可视角度

LCD的可视角度都是左右对称的,但上下可就不一定了。而且,常常是上下角度小于左右角度。当然了,可视角是愈大愈好。然而,大家必须要了解的是可视角的定义。当我们说可视角是左右80度时,表示站在始于屏幕法线80度的位置时仍可清晰看见屏幕图像,但每个人的视力不同;因此我们以对比度为准。在最大可视角时所量到的对比愈大愈好。一般而言,业界有CR3 10及CR3 5两种标准【3】。

四、系统调试

(一)硬件的设计

打开Proteus ISIS,在Proteus ISIS 编辑窗口中单击元件列表之上的“P”按钮,添加元件,画出电路图。硬件电路制作完成并调试好后,便可将程序编译好下载到单片机试运行。根据实际情况可以修改汉字的内容、大小以及滚动方向。源程序可以使用汇编语言也可以使用C语言,本文使用了汇编语言。

(二)程序的调试与运行

1.HEX文件的生成

(1)打开单片机软件开发系统Keil μVision,单击“μVision”菜单中的“Project”,在此下拉菜单中单击“New Project”选项后,弹出“Create New Project”对话框,键入新建项目名称。

(2)键入新建项目名并单击“确定”按钮后,在弹出的“Select Device”对话框中选择合适的单片机型号,选择AT89C51。

(3)单击“μVision”菜单中的“File”,在此下拉菜单中选择“New”后,打开一个空的文本编辑窗口,在此窗口中键入程序,创建新的源程序“汉字式LCD滚动显示.ASM”文件。

(4)在左边的“Project”窗口的文件页中单击文件组,再单击鼠标右键后,再弹出的窗口中选中“Add Files to Group ‘Source Group 1”选项,将“汉字式LCD滚动显示.ASM”程序导入到“Source Group1”中。

(5)在“Project”下拉菜单中,选择“Rebuild all Target Files”项。若程序编译成功,将生成“汉字式LCD滚动显示.HEX”文件【4】。

2.调试与仿真

(1)在Proteus ISIS 编辑窗口中,单击鼠标右键将AT89C51单片机选中并单击鼠标左键,弹出“Edit Component”对话框,在此对话框的“Clock Frequency”栏中设置单片机晶振频率为12MHz,在“Program File”栏中单击新建图标,选择先前用Keil μVision 2生成的“汉字式LCD滚动显示.DSN”文件。

(2)更改程序中汉字库的内容可显示不同的汉字。本设计系统采用了美国ATMEL公司生产的单片机AT89C51芯片。以及其它常用芯片如:SMG12864A、AMPIRE128×64等来设计LCD汉字滚动显示电路,实现了汉字的滚动和显示。本系统具有易安装检测、软件功能完善,工作可靠、准确度高等优点。

参考文献:

[1]张鑫.单片机原理及应用[M].电子工业出版社,2010

[2]张元良.单片机开发技术实例教程[M].机械工业出版社,2011

[3]韩雪涛.液晶显示器加工工艺[M].机械工业出版社,2011

[4]周润景.PROTEUS入门实用教程[M].机械工业出版社,2007

[作者简介]胡立波,教师,助教,江苏省南通商贸高等职业学校。

51系列单片机 篇7

Protues Is Is是英国Labcenter公司开发的电路分析与实物仿真软件。该软件不仅可以仿真和分析各种模拟器件和集成电路, 而且能仿真MCS 51系列单片机和它的外围电路的工作。Protues Is Is具有强大的原理图绘制功能, 能够实现仿真的在线调试。对于单片机实验, Proteus使实验过程变得自由、生动、直观和简便, 这一点, 对于刚刚接触到单片机的学生来说, 既增加了实验趣味, 又避免了传统实验中的损耗。用Protues Is Is实现单片机实验, 实验将不再受传统实验硬件的限制, Protues Is Is提供的大量虚拟的单片机及其外围电路的电子元器件, 为学生自由搭建功能相似、实现方法不同的实验电路提供了可能。也就是说, 学生可以根据自己的需要, 在满足实验目的和实验要求的前提下, 提出多种实验方案进行实验。

用Protues Is Is做单片机实验, 实验无疑是虚拟的。虚拟实验的虚拟性, 不可避免地会给学生带来不真实、脱离具体硬件环境等不利影响。为避免这些不利影响, 在实验中, 部分实验可以建立一个同物理实验环境相同的虚拟实验环境, 实验可以先在虚拟环境上实现, 再移植到物理实验环境上来完成, 通过虚拟实验和具体的、物理的实验的实验过程和实验结果对比, 提高学生对虚拟实验的认识和对物理实验的理解。

然而, 由于Protues Is Is对电路的分析和良好的仿真, 与实验相关的实验电路不仅在Protues Is Is环境中能正确运行, 同时能实时产生实验所要求的实验现象。以Protues Is Is为中心构建良好的、基于MCS 51系列单片机的虚拟实验室不仅是可行的, 而且是现实的, 具有专业水准的。

一、Protues简介

Proteus是英国Labcenter electronics公司开发的EDA工具软件, 自1989年出现以来已在全球得到广泛地使用。安装后的Proteus由Ares和Is Is两个程序组成。Ares用于PCB自动或人工布线及电路仿真, Is Is则采用布原理图的方法绘制电路并进行相应的仿真。Proteus革命性的功能在于它的电路仿真是互动的。针对微处理器应用, 可以直接在原理图的虚拟原型上编程实现软件调试, 以检验实验电路的正确与否, 而不必将程序烧写进单片机。用户可以一边搭电路, 一边测试电路的正确性, 在实时动态地模拟按钮、键盘输入的同时, LED, 液晶显示实时动态地给出输出, 加之系统配备的虚拟工具, 如示波器、逻辑分析仪等, 完成对系统的各种观察和测量。

和其它单片机仿真软件不同, Protues Is Is不仅能仿真单片机的工作, 而且能仿真单片机外围电路或没有单片机参与的其它电路的工作。这样, 在仿真和程序调试时, 可以不必关心由于某些语句执行时单片机寄存器和存储器内容的改变状况, 而是从工程的角度直接看程序的运行和电路工作的过程和结果。

Proteus软件提供了30多个元件库, 数千种元件, 涉及到数字和模拟、交流和直流等, 比如有三极管、稳压二极管、74系列、存储器、运算放大器、PLC集成电路等。Proteus软件提供的仪表有:示波器、逻辑分析仪、时间计数器、串口虚拟终端、信号发生器、图形信号发生器、直流电压表、直流电流表、交流电压表、交流电刘表等。除此之外, Proteus还提供了一个图形显示功能, 可以将线路上变化的信号, 以图形的方式实时地显示出来, 其作用与示波器相似但功能更多。

Proteus提供了比较丰富的、可用于电路测试的测试信号。这些测试信号包括模拟信号和数字信号, 可以测量直流信号、交流信号、脉冲信号、指数信号、调制信号、来自文件的信号、来自音频的信号、数字脉冲信号、数字时钟信号、数字模拟信号和数字边沿发出信号等。

二、在Protues Is Is中虚拟实验的建立方法

任何学生实验, 实验前都需要学生明确实验目的和实验要求, 用P r o t u e s I s I s做实验也不例外。在Protues Is Is上做实验, 实验电路可以由学生自己搭建, 也可以由老师以标准电路模板的形式提供给学生。但无论是那一种情况, 熟悉Protues Is Is应用环境都是必不可少的。

1. Protues Is Is操作环境

Proteus Is Is的工作界面是一种标准的Windows界面, 它包括标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口, 见图1。

使用Proteus Is Is的方法很简单。首先, 用户可以通过对象选择按钮选择实验中需要用到的元件, 这些元件将被存放在对象选择器窗口中, 然后从对象选择器窗口选择要在图形编辑窗口中完成的电路图的元件, 并将它放在图形编辑窗口的适当位置。当实验用的元件在图形编辑窗口中分布好后, 就可以把它们按需要连接 (连接的方法有直接连接和总线连接两种, 具体使用参见相关说明书) 起来。这样, 就建立了一个具体的实验电路。如果实验电路中不需要加入学生程序, 则通过仿真进程控制按钮中的即可控制电路运行。如果实验电路中需要加入学生程序, 则在学生程序与实验电路中的单片机绑在一起后, 通过控制电路运行。

2. 建立实验模板

良好的实验模板是学生成功实验的基础。实验模板可以由学生建, 也可以由教师提供。本文提供图2所示的实验模板并得到了较好的效果。其中, 实验标题给出学生的实验题目;实验电路及学生实验区包含了学生全部实验内容, 实验电路分布在这个区域, 实验中需要的接线也在这个区域中进行, 实验现象也在这个区域中发生, 学生的实验程序在这个区域同实验电路发生关系, 学生对实验的控制也同样在这个区域进行;实验提示区主要包含一些与实验题目有关内容, 如实验目的、实验要求、实验中的接线方法说明, 实验中编程要点难点、实验要点难点提示等均可以在这个区域提供;实验元器件库包含了实验用的所有元器件。学生在实验时, 通过阅读实验提示区的内容, 获得本实验的目的和要求, 再通过研究实验电路图及学生实验区的电路, 对照实验提示区的接线方法说明, 完成实验接线。当实验电路完成后, 如果需要为实验电路配实验程序, 则在实验提示区中编程要点难点和实验要点难点提示下完成设计, 进行实验。

当然, 如果学生自己搭建实验电路, 则可以在实验模板中只保留实验标题和实验提示区两部分内容, 这样, 学生就可以做设计性实验了。图3给出了一个利用图2设计的实验模板的例子。

3. 实验进行

使用图2设计实验模板进行实验的学生, 学生首先要进行实验连线。实验连线可根据实验面板给出的使用方法进行。当实验电路图中的线路连好后, 根据连线, 学生可以编写自己的实验程序。将实验程序编写完成后, 经编译、连接生成可以在实验电路图中运行的16进制目标代码文件。在实验电路图中选中单片机, 修改它的属性将16进制目标代码文件成为单片机运行的目标程序, 而后利用Protues Is Is功能控制十六进制目标代码文件在实验电路图中运行, 并观察实验结果。注意, 当连线正确并且程序无误时, 实验电路图中的可以产生发光或运动或显示信息的元件会发光或运动或显示相关信息。比如图3给出的实验模板中实验电路图的发光二极管会根据程序的需要发光。学生根据实验面板在实验中的运行情况, 或改进实验程序, 或调整实验线路, 以确保实验的顺利进行。

三、利用Protues Is Is建立基于MCS 51系列单片机的虚拟实验室

当可以使用Protues Is Is做单片机实验时, 利用Protues Is Is建立虚拟实验室就变得非常现实了。实验室毕竟和实验不同。一个好的实验室不仅要包含许多实验用的元器件, 而且还要包含许多实验用的实验仪器。这些实验仪器不仅可以帮助学生看到实验现象, 更重要的是可以帮助学生从更高的层次上分析实验。

Protues Is Is提供了示波器、逻辑分析仪、时间计数器、串口虚拟终端、信号发生器、图形信号发生器、直流电压表、直流电流表、交流电压表、交流电刘表等仪器仪表, 同时它的一个图形显示功能, 可以将线路上变化的信号, 以图形的方式实时地显示出来, 其作用与示波器相似但功能更多。有了这些虚拟的技术手段, 利用Protues Is Is建立基于MCS 51系列单片机的实验室的条件就已完全具备。利用Protues Is Is建立基于MCS 51系列单片机的实验室, 就是在不脱离Protues Is Is的技术条件下, 仅采用Protues Is Is给出的MCS 51系列单片机及其外围电路元器件, 加上Protues Is Is提供的仪器仪表, 就可以完成了。在这样的实验室里, 实验教师要做的事就是利用Protues Is Is制作出丰富多彩实验模板, 这些实验模板要尽可能地含盖单片机应用领域的所有内容。

当然, 在这样的实验室里, 完全可以放手让学生自己搭建自己的电路, 根据自己建立的电路做实验。这样做, 完全可以不必考虑元器件的损耗, 这正是虚拟实验室的优势。

四、虚拟实验室中可能存在的问题及其解决方案

任何一个虚拟实验室, 都可能存在这样的问题, 即由于其采用的实验环境是虚拟的, 实验的不真实感也就油然而生。实验结果可信吗?这样的实验能说明问题吗?

事实证明, 由于Protues Is Is是一种既可以进行电路分析, 又在电路分析的基础上完成实物仿真, 这就使Protues Is Is的虚拟实验结果变得正确可信。实验结果的正确性建立在Protues Is Is正确有效的电路分析上。但是, 还是有些物理电路上不行, 而在Protues Is Is可以的例子, 比如, 当一个单片机程序中不存在ORG 0000H程序在内存中定位的伪指令时, 在Protues Is Is环境下程序可能仍能正常运行, 但它却不能在与Protues Is Is环境想对应的物理单片机系统上运行。关于这种错误, 学生可以通过理解程序在P r o t u e s Is Is环境中和在物理单片机系统上的不同的运行方式来理解。有时, 一些可以Protues Is Is环境中完成的实验, 在物理系统上, 也许还要做某些转换。

五、小结

总之, 利用Protues Is Is构建基于MCS 51系列单片机的虚拟实验室是一个良好的思想。在实验中Protues Is Is环境中实现和物理单片机系统上实现的细微差别, 并不影响人们使用Protues Is Is做单片机实验的热情。它的虚拟造成的实验节省使得许多没有实际条件学习单片机的人们, 他们的学习不再是空想。当然, 对于那些有条件做单片机物理实验的人来说, 在Protues Is Is环境中做实验与在物理单片机系统上都是很好的选择, 利用前者可以自己驾驭实验, 利用后者使自己更加确认自己的实验, 并从深层上理解Protues Is Is环境和物理系统的不同。并且, 可以预想, 这些人会越来越多地使用Protues Is Is, 并把它当成自己的良师益友。

摘要:本文通过对Protues IsIs的讨论, 给出一种利用Protues IsIs构建MCS51系列单片机实验和相关实验室的方法。本文首先讨论了Protues IsIs的特点, 而后给出了基于Protues IsIs的虚拟实验的设计和建立和基于Protues IsIs的虚拟实验室的设计和建立方法, 最后就这样的实验室可能存在的问题及其解决方案进行了讨论。

关键词:虚拟实验,虚拟实验室,Protues IsIs,实验模板

参考文献

[1]赫建国, 郑燕, 薛延侠.单片机在电子电路设计中的应用[M].北京:清华大学出版社, 2006

[2]李学礼, 林海峰.基于Proteus软件的单片机实验室建设[J].单片机与嵌入式系统应用, 2005, 9

[3]ISIS User Manual.Labcenter Electronics

51系列单片机 篇8

当今微型计算机技术发展形成了两大分支, 一是以微处理器为核心所构成的通用微机系统;二是微控制器, 俗称单片机。单片机主要用于工业测控, 如家用电器、计算机外围设备、工业智能化仪表、机器人、生产过程的自动控制、农业、化工、军事、航空航天等领域。51系列8位单片机, 根据被控对象的要求, 以计算机技术为基础, 对其软、硬件切割、合成, 使软、硬件匹配后嵌入被控对象中, 以实现被控对象实时控制的需要。虽然近十年来也发展出16位和32位产品, 但在目前乃至今后相当长的时间内仍将以8位机为主。

二设计及制作目的

不少院校开设单片机课程, 51系列单片机面向中职、高职、大专、本科甚至研究生开设, 他们所用的实验实训设备大都技术不够先进, 注重演示、价格昂贵, 不利于普及。为此, 笔者结合自己多年从事单片机教学的工作经验, 经过反复研究、试验, 制作了积木式51系列单片机教学实验实训系统。

三系统的总体结构

1.电路原理图

2. 板上硬件资源

板上硬件包括: (1) 微控制器1套, 包括DIP40脚管座1个, 上插MCU芯片, 芯片下压晶振1个、起振瓷片电容2个; (2) 20脚管座, 上插活动数码管2个; (3) LED灯8个; (4) 1K电阻16个, 排阻2个; (5) 输入设备1套, 包括按键4个、4位拨码开关1个; (6) 滤波稳压电路1套, 包括3端稳压器7805一个、滤波电容4个、红色小LED灯1个、电阻1个; (7) 复位电路1套, 包括复位按键1个、电阻2个、二极管1个、电容1个, 采用电平复位, 复位时间大于30毫秒; (8) 跳线器32个, 用于选择板上或板外资源, 也可用于系统扩展。以上8个组成部分设置在一块电路板上, 构成完整良好的应用系统; (9) RS232电压转换板、51系列专用控制器、1个9针串口, 三者合成一个专用模块。该模块以积木的方式插在应用系统上并与个人机连接后构成仿真器、编程器。

四系统的软硬件制作方案

1. 设计及制作所要解决的技术问题

目前, 多数院校使用的单片机实验实训设备主要支持高级语言编程, 而该实验实训系统可支持汇编语言、C51高级语言、混编及实时多任务操作系统对照编程, 更能够适应市场编制软件的需要。

多数院校使用的单片机实验实训设备, 在硬件配置上注重演示, 使用者不能对其分解、合成, 难以培养学习者的动手能力与实际工作技能。该系统在现有同类产品的基础上进行了创新, 以实用为出发点, 针对学生的特点, 把教与学的重点放在现场控制上, 紧抓“通过口来实现控制”这一单片机核心内容, 辅之以微控器与负载之间有机结合 (对负载而言, 连接使用方便) ;负载之间在电气上严格独立, 使学生可以根据实际需要对该系统进行分解, 加入所需负载后, 重新合成, 以满足现场控制的需要, 进而培养操作人员的动手能力和实践技能。

多数院校使用的单片机实验实训设备多采购于大公司, 从应用角度看主要使用高级语言写作, 给出一个最终结果, 忽视数制在嵌入式控制中的核心地位, 无视汇编语言与特定硬件一一对应的动作匹配, 在教学环节上缺乏针对性。而该系统结合单片机应用特点及学习的一般规律, 面向学生将单片机的口全部开放, 且硬件以积木的方式自由组合, 将教材上的理论知识与现场应用相结合, 准确地控制现场硬件的任何一个动作。从技术应用角度看, 该系统实现了理实环节的统一, 并提供了一条学习和编程的捷径。

该实训系统易于继承用其他语言编制的软件, 减少了编程的工作量。

2. 设计及制作所采用的具体技术方案

该系统以Keil C51为工具软件, 设计思想上采用“层次化”“模块化”设计。 (1) 外围设备与整机控制系统, 通过32个跳线器完整隔离, 确保使用者自由选择板上资源或板外自挂资源; (2) 该系统专门制作了稳压模块, 不需要专用电源, 只要使用普通电源即可获得稳定的工作电压, 而且板上触及部位无危险电压, 确保人身安全; (3) 在该板上插入工作芯片, 即形成用户系统; (4) 在该板上或其他厂家的用户板上插入RS232/TTL转换板, 加上仿真芯片, 就可形成一台仿真器, 为学习嵌入式控制提供了极大的方便。该仿真器植入一段代码后, 可转变为一台PLC, 功能接近于专用PLC如西门子PLC等; (5) 在该板上或其他厂家的用户板上插入RS232/TTL转换板, 加上编程芯片, 就可形成一台编程器。该编程器模块还具有下载机、拷贝机、工作机三种实用功能; (6) 在该板上32个端口 (PORT) 通过跳线器全部引出, 学生可将自己设计的电路连入该板, 极大地减轻连线工作, 提高学生的应用效率; (7) 该系统上的资源大多为插拔式或可拆卸的, 学生可自设故障, 提高学生现场解决问题的能力; (8) 仅需配一个普通电源, 利用该系统上的键盘、数码管、微控制器, 系统可以独立运行; (9) 通过RS232通信接口, 在Keil C51支持下, 利用上位机丰富的软、硬件资源, 实现用户程序编辑、编译、调试、运行, 提高实验效率。

该系统紧紧围绕实验实训目的, 在使用汇编语言、C51高级语言、混编及实时多任务操作系统编程的基础上, 采用3+2形式 (用户板使用3次、电压转换板使用2次) 制作硬件, 体现了电路形式上的通用性 (仿真、编程必须在用户板上进行) , 突出了电路功能上的专用性, 贯穿了负逻辑控制的实用性。从应用角度看, 该系统克服了当今市场上相关产品的弱点, 集仿真、编程、应用于一体, 实现了现场编程、现场调试、现场完成的技术突破和创新。

五系统的特点及应用领域

该系统集实用性与先进性于一体, 应用领域较为广泛。它不仅可作为用户系统现场工作, 也可以作为仿真器进行程序编辑、编译、调试、运行, 还可以作为编程器使用, 该编程器同时具有下载机、工作机等实用功能。此外, 积木的方式突出了单片机用口实现控制的特点, 解决现有实验实训设备贪大求多、主次不明、价格昂贵、不利于普及等弊端。该系统既可满足单片机课程教学需要, 同时也为专业人员从事开发工作提供了稳定可靠的技术平台。

六系统的前景预测

51系列单片机 篇9

随着人们生活节奏的加快,对时间控制的要求越来越高,但市场上,此方面的产品精度不够或调时精度较低,本设计采用实时芯片DS1302来控制时间的显示,精确度可达秒级,同时,采用E22PROM 24C02来存储相应的数据,对应了一天中的每一分钟,可准确地对时间进行控制,在用户的要求下,可在任一时刻产生信号,以达到时间控制的目的。

2. 软件设计的总体思路

根据系统的要求及对实际应用可行性的分析,由于系统中数码管的动态显示部分的特殊要求,本系统软件设计分两部分完成,第一部分为主程序,第二部分中断显示子程序。其具体完成的功能和说明如下:

主程序主要完成的功能为:起动时钟,读取DS1302里的内容,通过数据转化,使其能正确在数码管显示。根据时间生成地址读24C02里相应单元的内容,将读出的内容送端口。按照对应原则,将某一位数据取出,并将它送端口。中断子程序主要完成的功能为:定时产生中断,读取单片机里的某一空间,确定段选码、位选码的选定。用查表的方式,进行一定的数据转化,确定显示的段选码,并应用移位的方式,取出其相对应的位选码。

3. 系统设计与实现

3.1 程序初始化部分

根据51系列单片机语言的设计原则,需要对主程序、中断子程序的入口地址进行设定,并对各寄存器、存储单元进行初始化操作。程序中,R0寄存器用于显示单元的跟踪,初始化时将其所指向的单元进行清零操作;R1寄存器用于中断子程序中段选码的选择;R2寄存器用于数码管显示部分位选码的确定;将用于读DS1302后存储读出数据的暂存空间进行清零;主程序还要对定时器的工作方式、初始值进行设置,使其定时产生中断。

3.2 数码管动态显示及中断显示部分

为增加系统设计的合理性,本系统中采用数码管动态显示技术和中断显示方式。程序中,首先对累加器、状态寄存器进行压栈操作,确保中断子程序的正常执行。随后对位选码进行选定,在对段选码的单元进行加1操作后,应判断单元是否到最后一位,如到最后一位,应给段选码、位选码进行初始化操作,如未到最后一位,则对位选码进行移位操作,最后CPU开中断,将累加器、状态寄存器进行出栈后返回主程序。

3.3 读写DS1302部分

读写DS1302部分应注意时序的关系,在每次读时、分、秒寄存器的内容时,必须先写入地址命令字,读写时分别调用单个字节读写子程序。在将时、分、秒寄存器里的数据读出后,由于数据格式的不一样,必须经过转化才得使数码管正常显示。定义三个单元作为从DS1302里秒、分、时寄存器读出的数据的暂存空间,然后再将其转化。定义六个单元作为转化后的数据暂存空间,此空间里的数据可由中断显示子程序经过查表操作后交由数码管直接显示。

3.4 操作E2PROM 24C02部分

从DS1302里读出的数据是BCD码格式,本系统中要将其作为地址关系的相应转化,为了方便与地址的转化,必须将BCD码格式转化成二进制形式。24C02是一个具有256字节单元的电可擦写存储器,本系统必须将一天中的每一分钟形成与24C02地址相对应的关系。一天共有1440分钟,而24C02共有2048个位,则需将时间按位存储,存储器的每一位代表一天中的一分钟,按照对应关系,可将24C02中每8个字节划分为一大段,每一大段中有64个比特位,可按位存储一小时中的60分,此时时间转化成对应24C02中的地址,转化方式为将时间中的小时位取出,乘以8即可得出24C02中每一大段的段首地址,再将时间中的分位取出,除以8可得到段内地址,此时,将段首地址加上段内地址即为真正的地址,分位除以8后得到的商即为段内字节中的对应分的位数。

4. 结束语

目前,市场上的时间控制器大部分设置的任意性能不好,且精度不够。本系统可对一天中任一分钟进行设置,只需通过软件对E2RPOM 24C02写入数据,则系统会根据24C02里的数据,准确地将信号输出,达到用户所需的功能。同时,本系统硬件电路简单,软件易操作,精度较高,性价比较高,可广泛投入市场使用,具有一定的使用价值。

摘要:本文设计的基于MCS-51系列单片机时间控制器主要应用AT89C51作为控制核心,采用实时时钟芯片DS1302、E2PROM 24C02及动态数码显示相结合。具有硬件电路简单、软件功能完善、控制系统可靠、性价比较高等特点,具有一定的使用和参考价值。

关键词:单片机,时间控制器,DS1302,24C02,动态数码管显示

参考文献

[1]张毅刚等.MCS-51单片机应用设计[M].哈尔滨:哈尔滨工业大学出版社,1997.

[2]陈志辉.I2C总线在MCS51系列单片机数据采集系统中的实现[J].微计算机信息,2005.

[3]沈德金等.MCS-51系列单片机接口电路与应用程序实例[M].北京:北京航空航天大学出版社,1990.

51系列单片机 篇10

1 各种语音播放系统的对比和分析

如表1所示。从表1不难看出, 采用ST C12+FLASH存贮芯片的方案在无论在成本及灵活性方面都具备很好的优势。

2 STC12系列增强型51单片机播放系统的硬件构成

如图1。本系统的MCU采用了宏晶公司的STC125404芯片, 它的P3.7具有PWM功能, 因此连接到功放电路LM4890上。语音的存贮芯片采用了旺宏 (MXIC) 公司的MX25xxx08系列串行NOR Flash芯片, 如果采用一片16Mbyte容量的芯片, 存放8KHZ、8bit采样频率的语音文件 (即8000字节/秒) , 按以下计算公式:

也就是可以播放时长大约为2097秒的语音文件。

语音数据是将音频wav文件的头信息去掉之后提取出来的, 然后按应用的需要, 分段烧录到Flash的固定位置, 将语音的存放位置和长度记录下来, 以供播放程序调用。

3 STC12系列增强型51单片机播放系统的软件构成

PWM产生声音的原理是:调节PWM的输出脉冲的占空比来产生不同幅度的电压, 这个幅值就接近于语音的声波。如图2所示声音的波形图。

而PWM输出频率越高, 产生的音波幅值就越精确。STC12系列增强型51单片机因为具有1T的机器周期, 它的时钟频率是传统的12T的51单片机的12倍, 因此它的PWM输出频率最高 (以11.0592M的晶振频率计算) 可以达到11059200/256=43200HZ。这个频率已经接近44.1k Hz的CD音质了, 因此用它来播放语音文件, 声音效果也十分理想。

软件设计工具采用Keil C51, 语音播放主要用到单片机的两个定时器。一个定时器用来产生8KHz的采样频率, 本设计中采用T1定时器的8位定时器中断功能, 定时125us;另一个定时器用来产生PWM波形, 本设计中采用T0定时器8位定时/计数器功能。设置好这两个定时器的功能是程序开发的关键所在。

下面给出设置PWM寄存器的关键代码:

4 总结

51系列单片机 篇11

摘要:本文介绍了一款基于红外遥控技术与单片机控制技术的遥控温度检测报警小车的设计。采用C语言编程控制单片机核心,设计和完成了能够遥控测温并在显示器上实时显示温度的小车。文章阐述了项目背景、模块设计、业务流程以及模块功能实现的分析;经测试达到功能目的,配合相关的电路设计图,可做为在校学生的实践项目进行使用。

关键词:单片机 无线遥控 温度检测小车

现代信息技术的三大基础是信息采集(即传感器技术)、信息传输(通信技术)和信息处理(计算机技术)。传感器属于信息技术的前沿尖端产品,尤其是温度传感器被广泛用,数量高居各种传感器之首。数字温度传感器可以直接将被检测的温度信息以数字化形式输出,而单片机微处理器越来越丰富的外围功能模块,更加方便了数字式温度传感器输出信号的处理。将单片机控制的小车和数字温度传感器结合起来,形成一个遥控的实时测温平台,对于在学院学习单片机控制专业课的学生来讲是一个好的研究项目。

1 总体设计思路及分析

本设计主要包括以下部分:主控制器STC89C52,红外收发,温度采集与显示,蜂鸣器报警,红外遥控,小车装置。为求的系统的稳定,且有较大的灵活性,其中温度采集采用高精度的数字温度传感器DS18B20,蜂鸣器进行报警,实测温度值通过数码管显示。同时为增加系统绝对可控性,自动化性,红外遥控发射遥控小车做大范围的测控无人化测控。如图1所示。

2 项目实现

2.1 单片机控制模块。STC89C52控制器是增强型的51微型控制器,本系统的软件程序用C语言编写,主要分为主程序,外部中断解码子程序,定时器1中断程序,显示子程序,小车行进子程序。主程序完成系统的硬件初始化,子程序调用的功能。关于定时器和外部中断初始化的部分设置如下:

TMOD=0x02;

TH0=0x00;

TL0=0x00;

EA=1;

ET0=1;

TR0=1;

IT0=1;

EX0=1;

......

2.2 温度检测模块。温度报警器采用DALLAS公司生产的单线数字温度传感器DS18B20,可以把温度信号直接转换成串行数字信号供微机处理;其测温范围-55℃~+125℃,可实现高精度测温在9位分辨率时最多在93.75ms内把温度转换为数字,且硬件电路十分简单。

本测温系统只有一个从机DS18B20,所以进行温度转换时先初始化,然后直接向ds18B20发温度转换命令进行温度转换,其过程如下所示:①初始化DS18B20:init();②紧接着发送温度转化指令write_byte(0xcc);write_byte(0x44);③再次初始化温感init();④发送温度读取指令write_byte(0xcc) ;write_byte(0xbe);⑤定义一个整形或字符型内存变量接受温度数据的高低位low=read_byte() ;high=read_byte();⑥合并温度数据的高低位使温度数据的二进制表示,转化后可得十进制温度。

2.3 红外遥控模块。TC9012作为红外遥控器控制核心,遥控编码脉冲信号是由引导码、系统码、系统反码、功能码、功能反码等信号组成。以PPM码(脉冲位置调制码)对红外数据调制在38KHz的载波上对外进行发射信号。

HS1838是用于红外遥控接收的小型一体化接收头,集成红外线的接收、放大、解调,不需要任何外接元件,就能完成从红外线接收到输出与TTL电平信号兼容的所有工作,而体积和普通的塑封三极管大小一样,它适合于各种红外线遥控和红外线数据传输,中心频率38.0kHz。

2.4 小车电机驱动模块。L9110直流电机的驱动芯片是为控制和驱动电机设计的两通道推挽式功率放大专用集成电路器件,将分立电路集成在单片IC 之中,使外围器件成本降低,整机可靠性提高。

Cargo()子程序完成从主程序接受从遥控器传递的参数,实现对应的小车控制操作:

void cargo(uchar right1,uchar right2,uchar left1 ,uchar left2)

{

youdj1=right1 ;

youdj2=right2 ;

zuodj1=left1 ;

zuodj2=left2 ;

}

其中youdj1,youdj2,zuodj1,zuodj2对应单片机P10,P11,P12,P13端口,对应的电机端分别是右电机负极,右电机正极,左电机正极,左电机负极。

传递参数对应小车控制为:

cargo(0,1,1,0) 左右电机全部正转,小车前进

cargo(0,0,1,0) 左电机停止,右电机正转,小车左拐

cargo(0,1,0,0) 右电机停止,左电机正转,小车右拐

cargo(0,1,1,0) 左右电机全部反转,小车后退

cargo(0,0,0,0) 左右电机全部停止,小车停止

3 结束语

设计采用STC89C52单片机作为控制器,使用C语言编写相关程序,调试完成了无线小车自动测温功能。电源部分应用轻便的锂电池材料使得动力得到保障,由于红外遥控下的电机灵敏度略低,故在小车行进控制上略显不足,后期将主要改进小车温度远程传送的问题,总体上满足在校大学生初级阶段的学习需要。

参考文献:

[1]吴健,侯文,郑宾.基于STC89C52单片机的温度控制系统[J]. 电脑知识与技术,2011(04).

[2]周鹏.基于STC89C52单片机的多功能测温仪设计[J].微型机与应用,2013(01).

51单片机记忆歌 篇12

Z:你怎么过来了,听说你最近迷上单片机了,怎么样,学得还顺利吗?

M:别提了,唉!这几天看书,越学越糊涂,只好过来请教你了,看你有没有什么好的学习方法。

Z:原来是这样啊,现在普通单片机教材,大都是从内存分配开始,内部寻址、寄存器和指令,有点枯燥乏味,让很多学习者望而生畏,无功而返,你这看得糊涂也属正常!

M:那你有没有好的方法,教教我吧,让我快速入门,早点摆脱那些枯燥的书本。现在一看书就头疼,一团糟,啥也记不清了。

Z:我自己总结了51单片机记忆歌,不知道对你有没有用,这可是我的秘密武器,虽然粗俗点,用起来却很方便。

M:单片机还有歌?你快说,只要能记住就行,越简单快速越好。

Z:记忆歌是我在单片机应用中总结出来的,读起来琅琅上口、准确快速。熟练以后,就不用再翻书看资料,非常有趣味性,你可以试试。

M:太好了,唉!那些汇编指令十分繁琐,实在是记不住啊!

Z:我先问你,你知道51单片机的管脚排列吗?比如复位是哪个脚,外存读选通是哪个脚?中断和定时器又是哪个脚?

M:C51复位脚好像是8……9脚,外存是第几脚忘啦,中断……定时器……等等,我得再翻翻书看看引脚图……

Z:在焊板子时,等翻完书后再回来,就什么都忘了!(接着念道)

C51管脚功能歌

C51单片机

管脚排列要牢记

引脚总共40个

IO 4 8 32

40、20正负极

M:噢,这是单片机的40个引脚,4个10口共32个脚还有正负极2个脚,剩下还有6个。

Z:对!(赵工接着念)

9脚RST来复位

18、19接晶振

29低电读外存

30锁存输脉冲

特殊管脚31

选外存时要置低

编程电压Vpp

最小系统接正极

M:原来29脚是选通外存啊,9脚复位,18、19接晶振。31脚最小系统接正极,什么意思,什么是最小系统啊?

Z:(在纸上画了一张图)这就是51系列单片机的最小系统,是单片机工作的最基本的电路,只有6个元器件,注意31脚必须接正级,好多初学者不成功就因为这个管脚。

M:原来是这样的,还挺简单的,我回去马上搭一个试试。对了,IO口引脚有32个,容易搞错位置。还有的管脚上有其它功能,怎么办?

Z:(继续念道)

IO管脚歌P1

引脚1到8P2,

P2,21到28

P3,10到17脚

P0,39倒着数

(即39脚p0.0,38脚p0.1,类推)

功能管脚歌:

特殊功能P3里

串行接发10、11 (脚)

12、13是中断

14、15定时器了

片外写读16、17

M:不错啊!这样读起来和谐押韵,记起来容易多了。我突然发现,现在再看单片机引脚图,清晰多了,印象也很深刻!还有这个最小系统,回去我重新做。我现在不看书和图纸就能记住,还不会错。

Z:(笑道)呵呵!对了!记忆歌的特点就是短小精悍,准确快速!以后用单片机,不清楚可随时背诵,不用手忙脚乱地翻书。

M:嗯,管脚还容易些,可汇编指令有一百多条,也没有规律,似连非连的,有的指令就一个字母不同,意义却不一样,编程时写着写着就乱了,根本没法记清。平时都是临时抱佛脚,随时翻书找资料,翻来翻去的很费时间。比如条件转移指令,DJ/DC/NZ的老是混在一起搞清,怎么能记住呀(皱眉)。

Z:(随口背诵)

条件转移要记清

判断数值是否0

JZ跳转是为0 (为0转)

JNZ跳转是非0 (非0转)

DJNZ减非0(减1非0转)

CJNE不相等(数值不相等转)

判位1转用JB

不为1转JNB

转时清零JBC

进位1转是JC

进位非1 JNC

判位命令要记齐

M:有意思,就是判断0和1啊,太好了,就几句话,明白了很多,非常好记,我得记住这句歌。

Z:对!你再看这几条命令都有字母J的。

J英文原词jmp就是:蹦、跳的意思

N英文原词not就是:非、不是

Z英文原词zero就是:0的第一个字母

B英文bit就是:位,高位1

M:有意思!书上可没有这些。以后不明白,我就背诵

这个歌曲,还有其他的吗?我记下来。

Z:其他指令歌有(注:括号内是注释或者语句的读音,无注释的按英文字母拼写)

数据传送

传送数据MOV

查表间接送加C (MO VC)

片外传送后X (MOVX)

堆栈指针SP

压入堆栈用PUSH

弹出就用POP

置位交换

SETB,置位1

CLR清零位成低

CPL,位取反

高位低位SWAP换

XCH全部换

半数交换D (XCHD)连

跳转语句

要跳转,寻语句

直接跳转JMP

左边加A是短转(AJMP)

左边L长转移(LJMP)

左边S相对移(SJMP)

不转不跳NOP (空语句)

调用语句

调用读作CALL,

A短调来L长调;(短调ACALL长调LCALL)

RET,返回了,

RETI中断返回了。

逻辑运算8个

逻辑运算后L

相与就是ANL

相或计算ORL

异或计算XRL

按位取反CPL

左移1位RL

带位左移RLC

带位右移RRC

RR右移低到高

算术运算8个

两数相加ADD

进位相加后加C (ADDC)

加1计算INC

减1就是DEC

借位减用SUBB

算乘法MUL

低位存A高存B

DA修正BCD

DIV就是相除以

商在A中余在B

伪指令

伪指令须牢记

ORG通常放首句

定地址,定起始

EQU两边相等的

重复定义DL

数据定义用DB

双字节的DW

保留内存DS

位定义,用BIT

内存定义是DATA

外存定是XDATA

特殊符号大S ($)

原地踏步等程序

程序结束END

M:哦!连伪指令都有,书上可没有写。比如那个大S ($),我还以为是搞错了。

Z:还有些特殊符号:

特殊符号

反斜杠/,位取反

分号;加在注释前

子程序行加冒号:

S$踏步不向前

立即进(斜井)#

@(圈a)间接寻

O是八进制,纯数十进制

B为二制数,H十六制

全部是字母,前面加个0

(16制数是全字母要加0,例如FAH写做0FAH)

M:好的,全记下来了!这样的记忆方法很好,我把歌曲背熟,还可以随时使用。

Z:对!按需选取,根据相应歌诀选指令。比如条件转移、调用指令都是简单的几句。例如需要跳转指令时,就背诵:直接跳转JMP,左边加A是短转(AJMP),L就是长转移(LJMP),左为S相对移(SJMP),不转不跳NOP(空语句)这是以左边的字母不同来区分,加强记忆,不容易记错和混淆。再比如逻辑运算,歌诀的第一句就把道了出来:逻辑运算后L也就是说逻辑运算符指令的后面是L,再根据歌诀区分相同或不同的字母,记忆就容易多了。

上一篇:情感化管理下一篇:高中班级民主管理