89C51单片机

2024-07-04

89C51单片机(精选5篇)

89C51单片机 篇1

0 引言

随着电子技术的迅猛发展,单片机技术的应用渗透到各个领域,在实际中从方案设计到技术应用,所涉及的实验实践环节多,硬件设备投入大,且实际方案时有受限,所以各类仿真竞相问世。仿真技术是以与实际应用相似原理、系统技术、信息技术以及仿真应用领域的有关专业技术为基础,以计算机系统及仿真器为工具,利用模型对系统进行研究的综合性的技术。

89C51是目前比较新的一款单片机,其功能更强,除保留了51系列的功能外,内部有ROM,也有中断源,还增加了可随时擦写程序,为用户提供了更为方便的使用环境。在计算机上以89C51作为核心器件创建虚拟操作平台,此平台是可视化的,各种实验仪器和设备都由此平台中的各个可视化仿真物体代表,开展各种复杂的实验或是测试时可以对这些虚拟的仪器或设备进行操作,达到与真实实验环境相一致的要求和目的。

1 虚拟仿真平台各模块的实现

1.1 总体设计构架

传统的单片机实验系统是由硬件实验台支撑的,而单片机虚拟仿真平台则是将硬件实验台虚拟化设计,即重新设计以前的调试工具像汇编程序等,用软件形式代替硬件平台。设计过程采取封闭式方式,使应用环境拥有更高的可靠性和稳定性。这样一来,在虚拟平台中获得的数据更加接近硬件条件下的实验结果。

从图1仿真平台总体框架图可知,89C51和存储器构成了虚拟的CPU,负责执行汇编语句,其他所有模块都直接或间接地接受其控制。在实际操作中作为虚拟存储空间的通信桥模块,由三部分构成,分别为输入桥、输出桥和芯片桥,它是接口芯片数据和外设间数据进行交换的场所。输入桥由开关与芯片连接构成;LED或者显示器连接到芯片,形成输出桥;芯片桥则是芯片与芯片连接形成的。

1.2 仿真平台编译原理

在编译汇编语言时,仿真平台是对真实的CPU的模拟。CPU执行汇编程序的实质是对执行函数的运行,其工作过程:首先启动一个新的mainthread,运用qrun函数对取出的线程源程序逐行的执行。Qrun函数从源程序的第一行开始执行,对这一行取得的数据进行预处理,去掉注释和标号,然后再按照汇编语言的固定格式取得指令名称和操作数,每一个指令名称都有一个与之相对应的执行函数,这些函数负责完成对应指令的功能,例如:MOV函数和MOV指令是对应的,此函数负责把第二个参数的值放到第一个参数里面,程序就这样逐行执行。

与真实试验的指针不同,虚拟的编译系统的内存地址由行号代替。一般,程序按照执行一行指针加一行的方式运行,即指针跳到下一行继续执行。当然也有例外,出现跳转指令或类跳转指令时,就要到在编译时间里的数据库中找出跳转的目的标号,指针的IP值即寻找获得的行号,然后程序就要跳到对应的航继续执行运行程序。

1.3 各硬件模块设计

1.3.1 虚拟实验操作台

虚拟操作台包含了89C51的四个并行I/O端口(P0口~P3口),8259A的八条中断请求输入线(IR0~IR7),8255的三个8位I/O数据口(PA口、PB口、PC口);以及显示、外设(LED、开关)部分。

模拟八段显示器形成显示部分。同时在程序中分配一个中10H的断号,功能0(AH=0)表示对显示屏的操作(例如,AL=1表示清屏)。功能1(AH=1)表示将AL中的数据写入显示器。

外设部分,LED通过Label实现,它的熄灭利用backcolor的变换实现;用TrackBar实现开关,开关可以经过变形来获得,滑块处于最上端表示开,反之表示关。

1.3.2 可编程I/O模块(8255)

在虚拟操作台上有A口、B口、C口的接线孔分别对应8255的三个I/O数据口,即PA口、PB口、PC口,模拟的8255由相应的执行函数和寄存器组成。其执行函数只有在OUT、IN两种指令中执行。例如:当执行OUT指令时,执行函数将AL中的值取出放到相应的端口寄存器中,当执行IN指令时,执行函数将对应端口寄存器的值放入到AL中。故8255的执行函数只负责对其对应的寄存器进行操作。

1.3.3 中断控制模块(8259A)

中断控制模块8259A在编程的时候,须将中断服务子程序入口地址放入中断向量表。

虚拟环境中的行号代替地址,汇编指令获得的每一个子程序的地址都是取得的该子程序的行号,即使进行中断时,也是对该行号的程序的执行。定义8259A的管理工作有状态机负责,使得硬件得到更真实的模拟。状态机的功能是:识别写入端口的是否为初始化数据,并可确定下一步应该写入的内容;同时还记录8259A的一些工作状态,比如:优先级方式、中断结束方式等等。

用堆栈来处理中断嵌套。首先定义一个堆栈stack(实际上是由一个数组构成的存储区)负责在执行中断前将IP入栈,即行号入栈。每当程序执行到RETI指令的时候就从stack中取出一个行号放入IP,可称为出栈。这样就保证了中断程序结束后顺利回到断点处继续执行。

1.3.4 示波器

由于示波器所接收的数据必须是模拟量,而单片机处理的数据则为数字量,所以数据在送入示波器之前要将进行D/A转换。仿真系统内部模拟了0832(数模转换芯片)。在具体的实现过程中,为示波器建立了一个线程(thread)runshiboqi,用threadstatus值(True和Flase)控制线程的运行。shiboqiClass.status=True时,线程运行,启动draw函数绘制图形;反之则不运行。

1.3.5 存储器

虚拟系统中,存储器也是用来存储数据和程序代码的。实现方法是:虚拟内存由一个一维数组模拟。内存的地址用数组的下标表示,对显示和修改内存则设计一个专门的窗口负责。比如,在运行一个程序的时候,可以根据需要将数据预先通过此窗口输入内存,或者运行程序的时候将结果放入某个内存单元中,程序运行完毕后可以通过此窗口查看结果,必要时还可在此修改数据。

2 仿真平台必要的技术

2.1 汇编程序编译

对于一个模拟硬件的软件来说,将汇编语言编译成二进制代码去控制完成相应的功能,的确有些复杂。如果用函数来模拟汇编指令,即每一个汇编指令对应一个函数,如:MOV函数完成MOV指令的功能,实现如下:

其中ReadData和WriteData均为自定义的通用函数,分别负责取出参数表示的值和将立即数temp写入存储区。

2.2 DirectX技术

在仿真平台启动的时候可以利用Microsoft公司提供的DirectX,以直接操作显示器、鼠标、键盘、声卡、显卡等硬件设备。实现如下:

2.3 通信桥

通信桥决定了芯片和外设间的通信,输入桥负责接收外设(主要是开关)送过来的数据,并将数据传递给对应的芯片;输出桥负责接收芯片送过来的数据,并将数据传递给对应的外设(主要是LED);芯片桥负责在芯片间传递数据。其基本数据结构为:

当在接线板上接线的时候,点击某个接线孔后,根据孔的编号确定它的类型(芯片、输出外设、输入外设),然后根据两个接线孔的类型加入不同的通信桥。

2.4 多线程以及线程同步技术

当出现多个线程同时对一个数据处理的情况时,比如:8255模块通过通信桥模块提供的接口数据的同时,通信桥模块把从外设接收到的数据写入该接口。这时可以通过vb.Net提供的SyncLock语句来实现同步锁,也可以通过设置一个互斥变量来保证线程对临界资源的互斥访问。

3 总结

本虚拟仿真平台借助89C51芯片,用仿真软件替代专用硬件实验设备,无需任何单片机硬件投资,便可以在计算机上完成单片机的实验,实现对CPU、内存、可编程中断控制器8259A、可编程外围接口芯片8255A、D/A转换器0832、示波器、LED、开关、显示器等硬件设备的仿真,并且通过必要的技术手段,获得与实际相同的实验效果,与实际设备相比,具有功能更全、成本更低廉、操作更方便的优势。

摘要:虚拟仿真平台以89C51芯片为核心,运用仿真软件和虚拟化技术,通过对单片机的运行过程和运行状态进行模拟,在计算机上用软件实现对硬件设备的仿真。本文以各功能模块的实现方法为支撑,以仿真平台必须的技术为手段,完成了对仿真平台软件和硬件的设计。

关键词:89C51,仿真平台,存储器,中断,示波器

参考文献

[1]麦中凡等.VB.NET编程入门[M].北京:北京航空航天大学出版社,2003.

[2]封小钰,余雄.构建单片机虚拟实验仿真平台[J].计算机与信息技术,2008,(04).

[3]许高建,古继成,高宁.基于VB.NET技术的微机接口实验平台的实现[J].苏州大学学报(工科版),2006,(03).

[4]孙燕莲,韩巍,文福安.构建仿真系统关键技术的研究[J].实验技术与管理,2005,22,(7):68-71.

89C51单片机 篇2

随着电子技术的发展,电子技术在各个领域的运用也越来越广泛,人对它的认识也逐步加深。秒表计时器秒表计时器常常用于体育竞赛及各种其他要求有较精确时间的各领域中。其中启/停开关的使用方法与传统的机械计时器相同,即按一下启/停开关,启动计时器开始计时,再按一下启/停开关计时终止。而复位开关可以在任何情况下使用,即使在计时过程中,只要按一下复位开关,计时应立即终止,并对计时器清零。本设计就是利用所学到的电子元器件将脉冲源用数码管显示出来,以制承诺简易的秒表。

以单片机为核心,设计一个秒表,具有计时功能,按键有启动计时、数据清零、停止、时间显示。

采用3个LED数码管显示时间,计时范围设置为0~99.9秒,即精确到0.1秒,用按键控制秒表的“开始”、“暂停”、“复位”,按“开始”按键,开始计时;按“暂停”按键,系统暂停计时;再按“开始”键,系统继续计时;数码管显示当前计时值;按“复位”按键,系统清零。

目录

一、设计任务.................................................................................................................3

二、设计题目.................................................................................................................3

三、功能分析.................................................................................................................3

四、总体设计.................................................................................................................3

4.1硬件设计...............................................................................................................4

4.1.1 89C51单片机...........................................................................................4

4.1.2晶体振荡电路...........................................................................................5

4.1.3复位电路...................................................................................................6

4.1.4按键电路...................................................................................................7

4.1.5显示电路.................................................................................................8

4.2引脚控制...............................................................................................................9

五、电路原理图...........................................................................................................10

六、程序流程图及程序设计......................................................................................11

6.1程序流程图.........................................................................................................11

6.2程序设计.............................................................................................................12

七、程序仿真...............................................................................................................21

八、心得体会...............................................................................................................22

九、致谢.......................................................................................................................23

十、参考文献...............................................................................................................24

一、设计任务

以单片机为核心,设计一个秒表,具有计时功能,按键有启动计时、数据清零、停止、时间显示。

二、设计题目

秒表的设计

三、功能分析

采用3个LED数码管显示时间,计时范围设置为0~99.9秒,即精确到0.1秒,用按键控制秒表的“开始”、“暂停”、“复位”,按“开始”按键,开始计时;按“暂停”按键,系统暂停计时;再按“开始”键,系统继续计时;数码管显示当前计时值;按“复位”按键,系统清零。

四、总体设计

本实验利用单片机的定时器/计数器定时和计数的原理,通过采用Proteus仿真软件来模拟实现。模拟AT89C51单片机、LED数码管以及控件来控制秒表的计数以及计时的开启、暂停、继续、与复位。其中有三个数码管来显示数据,两个数码管显示秒(两位),另一个数码管显示十分之一秒,十分之一秒的数码管计数从0~9,满十进一后显示秒得数码管的个位加一,并且十分之一秒显示清零

重新从零计数。同理当个位满十进一后个位也清零重新计数,当计时超过范围(即超过99.9秒)后,所有数码管全部清零从新计数

4.1硬件设计

4.1.1 89C51单片机

MCS-51系列单片机是8位单片机产品,89C51是其中的典型代表,基本模块包括以下几个部分:

(1)CPU:89C51的CPU是8位的,另外89C51内部有1个位处理器

(2)R0M:4KB的片内程序存储器,存放开发调试完成的应用程序

(3)RAM:256B的片内数据存储器,容量小,但作用大

(4)I/O口:P0-P3,共4个口32条双向且可位寻址的I/O口线

(5)中断系统:共5个中断源,3个内部中断,2个外部中断

(6)定时器/计数器:2个16位的可编程定时器/计数器

(7)通用串行口:全双工通用异步接收器/发送器

(8)振荡器:89C51的外接晶振与内部时钟振荡器为CPU提供时钟信号

(9)总线控制:89C51对外提供若干控制总线,便于系统扩展

89C51单片机引脚如下图:

4.1.2晶体振荡电路

89C51单片机内部的振荡电路是一个高增益反相放大器,引线XTAL1和XTAL2分别为反相振荡放大器的输入及内部时钟工作电路的输入和来自反相

振荡器的输出,该反相放大器可以配置为片内振荡器。

这里选用51单片机12MHZ的内部振荡方式,电路如下:C2、C3起稳定振荡频率、快速起振的作用。

晶振电路

4.1.3复位电路

采用上电复位,上电后,由于电容充电,使RST持续一段时间的高电平,从而实现上电复位操作。这不仅能使单片机复位,还能是单片机的外围设备同时复位,当程序出现错误时,可以随时使电路复位。

电路图如下:

复位电路

4.1.4按键电路

当按键被按下时,相应的引脚被拉低,经扫描后,获得键值,并执行键功能程序,因此按下不同的按键,将执行不同的功能程序。

电路图如下:

按键电路

4.1.5显示电路

采用3个LED数码管,LED是七段显示器,内部有7个条形发光二极管和1个小圆点发光二极管,根据各管的亮暗组成字符。

在用数码管显示时,有静态和动态两种选择,这里采用LED动态显示,用P0、P1、P2口驱动显示,由于P0口没有上拉电阻,因此P0口需要外接上拉

电阻才能输出高电平,这里使用8个4.7k的电阻作为上拉电阻。

电路图如下:

显示电路

4.2引脚控制

P0.0—P0.7、P2.0—P2.7、P1.0—P1.7对应三个数码管的a、b、c、d、e、f、g段和小数点位;P0控制数码管十位的显示,P2控制数码管个位的现实,P1控制小数点后一问的显示,P3.2、P3.3、P3.4分别接。

五、电路原理图

用Proteus软件画出主电路图如下:

六、程序流程图及程序设计

6.1程序流程图

6.2程序设计

程序的各个组成模块及工作流程描述:

(1)秒表的初始化

根据程序流程图,先进行秒表的初始化,即:①将I/O口P3全写一,为秒表的控制输入做好准备;②将数码管全部置零,使其处于秒表计时的初始状态;③将工作寄存器R0~R2以及30H初始化,留待后面的计时程序备用;④将定时器0置于工作方式1,并为其装入计时预置数D8FE(因为程序运行过程中占用的时间会导致一定误差,此为经实物测试之后的修正值),即将定时器定为每10ms溢出;⑤开总中断允许和定时器0中断允许。初始化完成后,即进入之后的按键扫描程序。

(2)按键检测程序

轮流检测开始计时(P3.2)、暂停计时(P3.3)、秒表清零(P3.4)三个按键。若发现有一个按键出现低电平(可能被按下),则延时10ms(调用延时子程序DELAY),延时完成后,若发现低电平消失,则说明该按键实际上未被按下,此时转回按键检测处继续检测;若发现仍然是低电平,则说明此键确实被按下了,此时就跳转至相应的程序标号处,执行相应的功能。

(3)开始计时

若确认“开始计时”键被按下,则跳转至程序标号“RUN”处,将定时器0计时允许控制位TR0置位,则定时器开始运行。此动作完成后,返回按键检测程序,等待操作者的下一次指令。

(4)计时程序

定时器0计时至10ms,溢出,引发中断,程序跳转至定时器0中断服务程序入口000BH处执行。程序跳转至中断服务程序TIME0。由于秒表的最小计时单位是0.1s,即100ms,因此需加入软件计时,使定时器0溢出10次之后才改变数码管的显示状态。因此每来一次中断就将30H中的数加1,若30H中的数没有到10,则给定时器0重新装入预置数,之后中断返回并继续等待中断;到10了,才进入显示程序,改变数码管的显示状态,执行完毕之后中断返回并继续等待中断。

(5)显示程序

将数码管的段选码放在数表TAB中。每次100ms计时完成后,将R0中的值(初值为0)送入A,然后自加1。.若R0中的值没到10,则使用累加器A查表,并将查得的数码管段选码送入毫秒位数码管。之后将30H中的数置零,中断返回。若发现R0中的数到10了,则将R0置零,并转入秒位进位子程序SECOND,向秒位进位,之后,继续照常向毫秒位送数。

在秒位进位子程序SECOND中,由于要用到累加器A,因此先将其推入堆栈保护。将R1中的值(初值为10)送入A,然后自加1。.若R1中的值没到20,则使用累加器A查表,并将查得的数码管段选码送入秒位数码管。若发现R1中的数到20了,则将R1重置为10,并转入十秒位进位子程序SECOND1,向十秒位进位,之后,继续照常向秒位送数。完成后,弹出ACC和PSW,子程序返回。

十秒位进位子程序与秒位进位子程序相似,只是没有向下一位进位的功能。

(6)暂停计时

若确认“暂停计时”键被按下,则跳转至程序标号“PAUSE”处,将定时器0计时允许控制位TR0置零,则定时器暂停运行。此动作完成后,返回按键检测程序,等待操作者的下一次指令。

(7)秒表清零

若确认“秒表清零”键被按下,则跳转至程序标号“STOP”处,将TR0置零,关闭定时器0运行。并且将数码管、工作寄存器、定时器0预置数全部重置,使其处于秒表计时的初始状态。此动作完成后,返回按键检测程序,等待操作者的下一次指令。

(8)延时程序

用于按键延时防抖,延时10ms。

程序清单如下:

ORG 0000H;程序开始

AJMP START;跳转到主程序START ORG 000BH;定时器0中断的地址入口

AJMP TIME0;定时器0溢出,跳转到中断程序TIME0 START:;主程序

MOV P3,#0FFH;输入端口P3全写1 MOV P0,#3FH;MOV P1,#3FH;

MOV P2,#0BFH;数码管初始化

MOV 30H,#00H;MOV R0,#00H;MOV R1,#0AH;MOV R2,#00H;MOV TMOD,#01H;MOV TH0,#0D8H;MOV TL0,#0FEH;SETB EA;SETB ET0;READ:;L1:JB P3.2,L2;LCALL DELAY;JB P3.2,L1;AJMP RUN;L2:JB P3.3,L3;

工作寄存器初始化

定时器0工作于方式1

定时器0预置数(D8FEH=55550D)

开总中断允许

开定时器0中断允许

读键程序

按键延时防抖

确认计时键被按下,开始/继续计时15

LCALL DELAY;按键延时防抖

JB P3.3,L2;AJMP PAUSE;确认暂停键被按下,暂停计时

L3:JB P3.4,L1;LCALL DELAY;JB P3.4,L3;AJMP STOP;RUN:;SETB TR0;AJMP READ;PAUSE:;CLR TR0;AJMP READ;TIME0:;INC 30H;MOV A,30H;

按键延时防抖

确认清零键被按下,秒表重置

计时键按下,跳转至此

定时器0开始/继续运行

暂停键按下,跳转至此

定时器0溢出,中断,跳转至此16

CJNE A,#0AH,TIME1;30H单元中的值到10了吗?(计时到10毫秒了吗,也就是说,该向毫秒位送数了吗?)MOV DPTR,#TAB;30H中的值到10了,顺序执行

MOV A,R0;INC R0;CJNE R0,#0AH,GET;R0MOV R0,#00H;LCALL SECOND;进位

GET:;MOVC A,@A+DPTR;MOV P1,A;MOV 30H,#00H;TIME1:;MOV TH0,#0D8H;MOV TL0,#0FEH;RETI;中的值到10了吗?(该向秒位进位了吗?)

到了,R0清零,调用进位子程序SECOND,向秒位没到,跳过进位子程序

查表并向数码管毫秒位送数

重置30H单元

给定时器0重新预置数

中断返回

SECOND:;秒位进位子程序

PUSH ACC;PUSH PSW;将ACC和PSW推入堆栈保护

MOV A,R1;INC R1;CJNE R1,#14H,GET1;R1了吗?

MOV R1,#0AH;LCALL SECOND1;位进位

GET1:;MOVC A,@A+DPTR;MOV P2,A;POP PSW;POP ACC;PSW,ACCRET;SECOND1:;中的值到20了吗,也就是说,该向十秒位进位到了。R1重置,调用进位子程序SECOND1,向十秒没到,跳过进位子程序

查表并向数码管秒位送数

出栈

子程序返回

十秒位进位子程序

PUSH ACC;PUSH PSW;将ACC和PSW推入堆栈保护

MOV A,R2;INC R2;CJNE R2,#0AH,GET2;R2

MOV R2,#00H;GET2:;MOVC A,@A+DPTR;MOV P0,A;POP PSW;POP ACC;PSWRET;STOP:;MOV P3,#0FFH;MOV P0,#3FH;MOV P1,#3FH;

中的值到10了吗,也就是说,该将此位归零了到了,R2清零

没到,跳过清零程序

查表并向数码管十秒位送数,ACC出栈

子程序返回

清零键按下,跳转至此 吗?

MOV P2,#0BFH;数码管清零

MOV 30H,#00H;MOV R0,#00H;MOV R1,#0AH;MOV R2,#00H;CLR TR0;MOV TH0,#0D8H;MOV TL0,#0FEH;AJMP READ;DELAY:;MOV R3,#50D;D1:MOV R4,#100D;D2:DJNZ R4,D2;DJNZ R3,D1;RET;工作寄存器初始化计时器0停止计时定时器0预置数

延时10ms子程序

子程序返回

TAB: DB 06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,3FH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH,0BFH;数码管段选码数表

END;程序结束

七、程序仿真

将以上程序清单导入先前做好的Proteus仿真电路,汇编之后,按 键开始进行仿真。

仿真结果如下:

仿真结果描述:

按“开始”键,秒表开始计时;按“暂停”键,秒表暂停计时;再按“开始”键,秒表继续计时;按“清零”键,秒表清零。

八、心得体会

虽然秒表是一个非常简单的功能,但要在单片机中使用汇编语言来实现这个功能,仍然花了我不少心思。

首先是计时的问题,由于单片机计时器最大只能计时65.5ms,因此要实现毫秒位的变化,我采用了软件计时的方法,单片机只需计时10ms,然后用软件重复10次,即可达到计时100ms的目的。

显示方面,为了使编程简单,我使用了静态显示。不过这使得占用I/O口线过多,而且连线复杂繁琐,为实物的制作带来了不便。在以后的学习和应用中我会努力加深动态扫描显示的理解,争取熟练运用。

根据书本知识,我们一开始只给P0口加上了上拉电阻,但是实物做成后我们发现P1和P2口得输出显示非常暗,初步确定是驱动能力不足的问题后,我们给二者也加上了上拉电阻,结果使得显示正常了。由此我们了解到,实践才是检验真理的唯一标准,有时候书本上的知识需要经过实践的改进,才能运用到实际中。

此次课程设计巩固了我的基础知识,提高了我的应用水平,锻炼了我的动手能力,使我受益匪浅。然而,在吸取经验的同时,我也吃了不少教训。在编程、仿真、焊接方面都走了不少弯路。但是,学则要有所收获,经过此次的锻炼,我在很多方面都已经有所提高,知识也掌握得更加扎实了。

在今后的学习和实践中,我将继续努力钻研,提高自己,争取在学术和记忆上获得更大的进步。

九、致谢

本设计是在李芳老师的悉心指导下完成的,李老师渊博的知识,严谨的治学态度,一丝不苟的工作作风,平易近人的性格都是我学习的楷模。在论文的研究及整理期间,李老师给了我很大的支持和鼓励,才使得论文得以顺利的完成,在此谨向导师表示忠心的感谢和崇高的敬意。

同时还要感谢同学们,他们也给了我很大的支持和帮助。

十、参考文献

1)《微控制器与接口技术》.虞沧.电子工业出版社.2012.10 2)李朝青.单片机原理及接口技术[M].北京:北京航空航天大学出版社.2005.10 3)夏继强.单片机实验北京:北京航空航天大学出版社.2001.4)孙德辉,郑士富.微型计算机控制系统.北京:冶金工业出版社.2002

5)肖洪兵.跟我学用单片机.北京:北京航空航天大学出版社.2002.8 6)陈汝全.实用微机与单片机控制技术.电子科技大学出版社.1995.7 7)王涌.单片机与嵌入式系统应用[J],2002(3):58-61 8)罗亚非.凌阳16位单片机应用基础[M].北京:北京航空航天大学出版社.2003.5 9)李庆.Keil C51 使用详解 V3.0[M].北京:北京理工大学出版

10)李华.MCS-51系列单片机实用接口技术.北京航空航天大学出版社.1993,162-229 11)温钢云,黄道平.计算机控制技术.广州:华南理工大学出版社.2002 12)肖洪兵.单片机应用技术.自编教材

13)孙德辉,郑士富.微型计算机控制系统.北京:冶金工业出版社.2002 14)韩来吉.用 89C51实现急救车优先的交通灯控制系统[J] 15)陈志强,芮延年,城市路口交通灯多级智能控制方法的研究J.2007 16)李广弟.单片机基础.北京:北京航空航天大学出版社.2001,56 17)马忠梅等.单片机的C语言应用程序设计.北京航空航天出版社.1999

89C51单片机 篇3

关键词:蜂鸣器,驱动电路,电子琴电路设计

0 引言

声音的产生是一种音频效果, 振动的频率高, 则为高音, 频率低, 则为低音, 人耳比较容易辨认的声音频率大概是0~20 kHz。在数字电路中, 以脉冲信号驱动蜂鸣器, 已产生声音, 在同样频率下, 人类的耳朵是很难区别正弦信号或脉冲信号所产生的音效。

1 音调的产生

1.1 发声电路

蜂鸣器的驱动电路通常有以下两种电路 (如图1、2所示) 。图1中, P1.0口输出1 (高电平) 时, 可以通过达林顿管提供较大的驱动电流, 以驱动蜂鸣器。图2中, 当P1.0口输出1时, 内部的MOSFET不导通, 晶体管的BE之间不会有输入电流, 所以蜂鸣器上也不会有输出电流, 蜂鸣器就不会激磁。当P1.0口输出为0时, 蜂鸣器就会激磁。

1.2 音调

在音乐中, 通常是以Do、Re、Mi、Fa、So、La、Si分别代表某一频率的声音。表1示出了音调—频率关系。

2 简易电子琴设计

制作一个7键的简易电子琴, 按下按钮K1时, 发出Do的声音, 按下按钮K2, 发出Re的声音, 以此类推。电路图设计如图3所示。当K1未被按下时, 单片机的P2.0口由VCC电源带电阻将其口拉成高电平;当K1被按下, P2.0口直接接地, 该接口变为低电平。同理K2~K7。

K1~K7这7个按键分别按下, 单片机的P3.7口发出不同的频率方波, 从而产出不同的声音。不同频率的方波, 可以通过编写延时函数的方法来得到, 也可以通过定时中断的方法使P3.7口输出不同的方波。

根据表1中的频率, 通过编程使简易电子琴发出美妙的音乐。对于延时函数中的参数m和x, 取m=1, x的取值和按键之间的关系如表2所示。

除了使用延时函数产生音调和节拍, 还可以采用定时器中断产生节拍。用定时器中断产生音调和节拍比用延时函数来的更准确, 而且程序还能处理其他事情;而用延时函数产生音调时程序不能处理其他事情, 所以作者建议使用定时器中断来产生音调和节拍。

表2中示出了不同音调的延时函数的参数, 整个程序的流程图如图4所示, 7个按钮分别采用7个子程序, 主程序在等待按键的按下, 当前某个按键按下后, 转去执行相应按键所对应的子程序。为节省单片机资源, 本文采用定时中断产生节拍。该电子琴的程序如下所示。

3 结语

89C51单片机 篇4

关键词:89C51单片机,IC卡读写器,UART接口

0 引言

IC卡是集成电路卡 (Integrted Circuit Card) 的简称, 目前在各行各业得到了广泛的应用。

本文采用单片机作为控制核心, 对接触式IC卡芯片进行读写操作, 并可以通过RS232接口和上位计算机进行通信, 把卡内数据传到计算机内或是把计算机的数据存储到IC卡中。

1 接触式IC卡的基本原理

接触式IC卡是通过触点与外界的接触实现电气连接进行数据的读写, 适用于用卡次数不多且环境较好的场合。接口电路简单, 成本低廉而且其读写器的制造成本较低。

IC卡接口电路作为IC卡与IFD内的CPU进行通信的唯一通道, 为保证通信和数据交换的安全与可靠, 本文基于存储IC卡AT24C01为例进行介绍。

1) AT24C01的写操作

写操作分为字节写和页面写两种操作, 对于页面写根据芯片的一次装载的字节不同有所不同。

2) AT24C01的读操作

读操作有3种基本操作:当前地址读、随机读和顺序读。最常见的是顺序读的时序图。应当注意的是:最后一个读操作的第9个时钟周期不是“不关心“。为了结束读操作, 主机必须在第9个周期间发出停止条件或者在第9个时钟周期内保持SDA为高电平、然后发出停止条件。AT24C01片内地址在接收到每一个数据字节地址后自动加1, 故装载一页以内规定数据字节时, 只须输入首地址, 若装载字节多于规定的最多字节数, 数据地址将“上卷”, 前面的数据被覆盖;连续读操作时为了指定首地址, 需要两个伪字节写来给定器件地址和片内地址, 重复一次启动信号和器件地址 (读) , 就可读出该地址的数据。由于伪字节写中并未执行写操作, 地址没有加1。以后每读取一个字节, 地址自动加1。在读操作中接收器接收到最后一个数据字节后不返回肯定应答 (保持SDA高电平) 随后发停止信号。

2 UART接口简介

UART (Universal Asynchronous Receiver/Transmitter) 通用异步收发器是用于控制计算机与串行设备的芯片。通过RS-232C数据终端设备接口, 计算机将由计算机内部传送过来的并行数据转换为输出的串行数据流;将计算机外部来的串行数据转换为字节, 供计算机内部使用并行数据的器件使用。并且在输出的串行数据流中加入奇偶校验位, 并对从外部接收的数据流进行奇偶校验。在输出数据流中加入启停标记, 并从接收数据流中删除启停标记。

UART工作原理就是将传输数据的每个字符一位接一位地传输。

起始位:先发出一个逻辑”0”的信号, 表示传输字符的开始。

数据位:紧接着起始位之后。数据位的个数可以是4、5、6、7、8等, 构成一个字符。通常采用ASCII码。从最低位开始传送, 靠时钟定位。

奇偶校验位:资料位加上这一位后, 使得“1”的位数应为偶数 (偶校验) 或奇数 (奇校验) , 以此来校验资料传送的正确性。

停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。

空闲位:处于逻辑“1”状态, 表示当前线路上没有资料传送。

波特率:是衡量资料传送速率的指针。表示每秒钟传送的二进制位数。例如资料传送速率为120字符/s, 而每一个字符为10位, 则其传送的波特率为10×120=1200字符/s=1200波特。

3 IC卡读写器的硬件设计

本文所设计的IC卡读写器采用单片机AT89C51及其外部接口实现, 主要包括控制部分、读卡部分、上位机通讯部分、复位部分和电源部分, 采用AT89C51的P1.0~3作为读卡信号线, 其中P1.0与AT24C01的SCL相连, 作为时钟信号线, P1.1与AT24C01上行数据线相连, P1.2与AT24C01下行数据线相连, P1.3与C1相连, 用于实时监测是否有卡插入, P1.4~7与看门狗电路的X5045相连, 负责AT89C51与看门狗电路的通信。

控制部分主要负责读取IC卡中的数据, 进行分析处理, 存储在自身的RAM中或是通过RS232传送到上位机进行存储。控制部分的主要芯片为AT89C51, 它提供了8K字节Flash闪存存储器, 256字节内部RAM, 32个I/O端口线, 3个16位定时/计数器, 一个6向量两级中断结构, 一个全双工串行通讯口, 片内振荡器及时钟电路。

读卡部分根据控制部分的控制信号, 对IC卡进行读或写操作, 并可实时监测IC卡的插入或是拔出。并将读出的数据通过驱动电路7407传送到控制电路或将控制电路所传送的数据写入IC卡。

上位机通讯部分的主要功能是与上位机通讯, 将IC卡中的数据传送到上位机中或是将上位机中的数据存储到IC卡中。由于AT89C51的电平为0V~5V, 无法和上位计算机直接相连, 必须同转换芯片MAX232将电平转换为-5~+5, 可以和计算机进行通讯。

复位部分的主要功能是防止单片机程序死机。在IC卡读写器工作时, 由于出现的一些意外的原因, 程序不能正常运行而进入死循环, 这时需要对单片机进行复位, 让其从新开始工作。

电源部分主要为整个IC电路提供电能, 7805负责将输入的+12V直流转化为稳定的+5V电流, 电源部分的主要芯片为7805为12V直流输入, 5V直流输出的稳压器件, S为两相12V直流电源输入端接外部电源, SW为电源开关, LED1为电源指示灯, C1~C3为7805的稳压电容。

4 程序设计

软件程序采用模块化设计方式, 主要包括上位机和下位机, 上位机为计算机, 采用VB完成串行通讯, 下位机为读卡器的AT89C51, 采用C语言完成串行通讯, 如图1所示。

5 结论

经过调试, 本设计能够在上电后独立的运行程序, 并能在PC机软件的控制下, 实现对IC卡中任意位置的读写, 其中读写的起始地址、读写数据的个数以及数据内容可以在PC机端输入或选择。

参考文献

[1]于微波, 林晓梅, 刘俊萍.微型机算计控制系统[M].吉林人民出版社, 2002, 5.

[2]何立民.单片机应用系统设计[M].北京航空航天大学出版社, 1990.

89C51单片机 篇5

1 系统的硬件设计及原理

1.1 系统的硬件部分概述

摆臂摆动控制模块:利用电磁装置带动摆臂快速摆动。

LED显示模块:LED摆臂字符显示装置采用8个贴片式发光二级管及作为显示队列。

传感器工作模块:设计以H21A3传感器的检测电路,并采用边沿触发。

闹铃模块:采用语音芯片和外置电源电路,进行定时报警。

系统的组成和原理框图如图1所示。

1.2 系统的显示控制部分

如图2所示,拟采用AT89C51作为CPU,晶振为11.0592Hz,有两个60芯插槽,可以任意插入功能板进行一系列的组合扩展。还有一个与之相配试验板相连的60芯插槽,利用此板进行按键闹铃及整点报时功能扩展。

采用低电平驱动,将8个发光二级管的阳极连接至+5V,P1.0-P1.7口通过200Ω的电阻与发光二极管的阴极连接,P1口的某端输出为低电平是相应的发光二极管亮;反之输出高电平时,发光二极管灭。

本系统用P0.0-P0.4来扩展五个键。五个按键的功能分分配为:K1为TIME键(确认键),K2为COM键(通讯键),K3为SET(设置键)键,K4为“+”键(调大键),K5为“_”键(调小键)。

1.3 系统的摆臂控制硬件设计

系统的摆臂控制硬件如图3所示,其工作原理是当摆臂摆至光电传感器凹槽时,其输入端接收到一光电脉冲信号,通过光电耦合装置,将光信号转变成电信号,则IN4148的阳级被上拉成高电平而导通,三极管9013立即导通,使输出端输出负脉冲,则即可通过此脉冲信号边沿触发外部中断INTO,精确控制每一次摆动过程的时间日期显示位置,达到最佳的显示控制效果。

采用独特的语音合成电路,灵活运用能够播放预先以数字代码形式存储于掩膜ROM中的语音芯片MSM6588。该芯片使用单一5V供电,具有12位D/A、A/D转换,内置的低通滤波器(LPF)和麦克风放大器,保证较高语音质量的同时简化了外围电路。外部频率范围为4.096M至8.192MHz。可采用3bit或4bit ADPCM编码方式。该芯片可独立工作,并采用传统的MCU控制存贮器的方式。

通过外接蜂鸣器,设置每次发声时间。利用单片机的P3.7口输出脉冲,实现的整点报时功能。

通过控制89C2051的P1.3口,使P1.3口输出的方波来控制线圈的通、断电,即磁场的有无。摆上装有小磁铁,磁铁的极性与磁场的极性相反。当给摆臂一个初始力(向左或向右)的时候,摆臂就能在磁场的作用下让摆臂摆到光电传感器的位置,此后摆臂速度稳定下来。

2 系统的软件设计与实现

2.1 硬件资源分配

如表1所示。

2.2 内存单元分配

如表2所示。

2.3 软件实现

主要由主程序流程图、定时程序流程图、INT0中断程序流程图、T1中断服务程序流程图、整点报时程序流程图、键盘程序流程图、闹钟程序流程图等组成。主程序在完成初始化工作后,进入循环显示。主要功能是由定时中断服务程序完成,并通过按键执行相应的功能。软件设计的关键部分是对时间的精确控制。

主程序清单:

3 系统分析与测试

首先,在摆臂通电时,需人为的给它一个初始的力使之摆动。根据运动的导体在磁场中受到力的作用及弹性好的铁片的反弹力,摆臂将逐渐摆动起来并最终达到稳态,即摆臂的摆动幅度为最大。当摆臂能稳定摆动时,可分时清晰的显示年、月、日、星期(一同显示),时、分、秒(一同显示);通过按键设定闹钟的时分,当时间到达设定值音乐响,一分钟后闹钟将自动关闭;整点时,将进行整电报时(几点响几声);调整时间时,将显示出要调整的选项值,调整完毕后按TIME键,将按新的时间进行显示(年、月、日、星期)、(时、分、秒)等。

4 结论

本设计在硬件上,采用了最小系统板和电磁摆动装置,设置了按键调整等,最终较好的实现了快速又准确摆动的要求。在软件上,充分利用了AT89C51的灵活方便及其强大功能,实现单摆分时显示时间日期,时钟控制,闹钟自动报警,按键调整时钟和闹钟等一系列的功能。从最后的测试结果来看,本系统具有较强的稳定性,控制精确度高,并对功能进行了多方位的扩展和发挥。

本设计中要对摆动中的LED摆臂实施控制不是一个简单的电子控制问题,它涉及到电磁学、光电学、力学等方面的知识,并与单片机相配合,使对该装置的控制达到了较好的效果。相信单片机在今后的自动控制领域中会有更为广阔的应用前景。

参考文献

[1]何立民.单片机应用系统设计系统配置与接口技术[M].北京:北京航空航天大学出版社,2001.

[2]王幸之.单片机应用系统抗干扰技术[M].北京:北京航空航天大学出版社,2000.

上一篇:会计制度设计原则下一篇:故障齿轮