首页 > 范文大全 > 正文

基于AT89S51的低成本单片机实验板的开发与设计

开篇:润墨网以专业的文秘视角,为您筛选了一篇基于AT89S51的低成本单片机实验板的开发与设计范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:做单片机实验需要仿真器和编程器,往往其价格比较昂贵,让人望而却步。据此,该文开发并设计了一套电路简单、价格低廉、实用性强、不需要编程器的单片机实验系统。该系统结合KeilC和Easy 51Pro软件对实验仿真、初学者非常实用。

关键词:低成本;单片机;实验开发板

中图分类号:TP311 文献标识码:A文章编号:1009-3044(2010)13-3518-04

Development and Design Based on Low-cost SCM Target Board at89s51

CHEN Yu-zhong1,2

(1.Hohai University, Nanjing 210000, China; 2.Jiangsu Union Technical Institute, Nanjing 210019, China)

Abstract: The experiment needs to do MCU emulator and programming, are often more expensive its price, to be prohibitive.Accordingly, this paper developed and designed a circuit is simple, inexpensive, practical, no experimental system microcontroller programmer. The system combines KeilC and Easy 51Pro experiment simulation software, very useful for beginners.

Key words: low-cost; MCU; experimental development board

1 设计思路与系统框图

本文采用AT89S51单片机,在单片机的最小系统下加入适当的电路,比如波段开关和显示模块,利用它的在线下载功能就可以实现常用单片机程序的调试和学习了,如图1所示。

利用如图2、图3所示的下载线通过电脑并口将程序写入AT89S51。P0口作为扩展口可以外接其他控制电路;P1口作为波段开关输入与程序下载端,用于复位;很多电路在设计的时候都不会用全部的P1口,总是会有三个端被下载端占用,采用拨码开关,当需要下载的时候把后三个拨码开关拨至中间,即可检测器件,下载程序了。

P2口作为实验板的输出显示部分,P0-P3口输出低电平时的倒灌电流能力强(可达20mA),而输出高电平时拉电流能力弱,所以采用2位数码管共阳(低电平有效)连接动态显示的方式。在这里笔者为什么采用动态接法呢?因为当电路中数码管的数目较多时,用静态显示方式就不方便了,而采用动态显示可减少数码管占用接口数、简化电路、降低成本,而且在实验板上用2位数码管动态扫描做实验。

将2位数码管LED位的段选线(a-dp)同名并联。然后由一个8位I/O接口来控制各个段,而2个位选线则由另外一个相应的I/O接口先来控制。这样用2个8位I/O接口就能控制8位LED数码管,本电路只用2位数码管,P2口作为段选线,P3.0与P3.1作为2位LED数码管的位选线。如果用静态的方式需要用到2个8位I/O接口才能够控制2位LED数码管,这就时动态显示的优点。

2 功能简介

1) P2口数码管静态显示P1口拨码开关低四位的数值

2) P2口数码管动态显示P1口拨码开关的数值

3) 按下按钮数码管自动加1

4) 一秒加一显示

5) 中断

6) 比较数值大小

7) 加减乘除运算并显示

……

可以编写不同的程序,从而实现不同的效果。

3 硬件系统设计

图4、图5中采用89S51的P3.0与P3.1口做2个LED的位选线,称为字位码口。P2口作为所有LED的同名并接的八段(a~dp)的段选线,称为字段码口。由于LED显示需要一定的驱动电流,故在接口中加了驱动电路,用三极管8050作为LED显示的驱动。由于字段码口同时控制了所有的LED的段选线,因此只有采用动态扫描的方法,才能实现每位LED不同的字符。

动态扫描显示控制方式就是逐个地循环点亮各位显示器,即在某一瞬间,只让某一位的位选线处于选通状态,其他各位的位选线处于断开状态,同时段选线上输出相应位要显示字符的的字段码。这样在每一瞬间,2位LED中只有选通的那一位LED显示出字符,而另一位则是熄灭的,同样在下一瞬间,只显示下1位LED。如此继续下去,让2位LED交替显示。虽然这些字符是在不同的瞬时轮流点亮的,但由于人眼的视觉残留效应,看到的是2位稳定显示的字符,与静态显示的效果完全一样。P3口是按钮输入、与中断输入。P3口即可用作按钮输入,也可以用作中断输入,互不冲突。

4 程序系统设计

4.1 P2口数码管静态显示P1口拨码开关低四位的数值

打开Keil C51集成开发环境,先建立一个文件目录,再建立一个工程项目,最后建立源程序文件,文件的名字由编程人员自己定义。输入以下源程序:

ORG 0000H

LJMPMAIN

ORG 0030H;初始化

MAIN: MOVA,P1 ;将P1口的数值临时存放在A中

ANL A,#0FH ;用“与”的方法屏蔽高四位数据

MOV DPTR,#TAB ;查表程序,赋予表格首地址

MOVCA,@A+DPTR ;查表并将查到的数传送给A

CLR P3.0 ;选通第二位数码管点亮(低电平有效)

SETBP3.1 ;熄灭第一位数码管

MOV P2,A ;将查表查到的字段码传送到P2口显示

LJMPMAIN ;循环

TAB:

DB0C0H, 0F9H, 0A4H, 0B0H, 99H, 92H, 82H;0~F的共阳极数码管字段码表

DB0F8H, 80H,90H,88H,83H, 0C6H, 0A1H

DB86H, 8EH, 0FFH

END;结束

在输入过程中,只需要将程序输入到文本框中,便于读懂与修改程序。编译通过后,接通5V电源,用Easy 51Pro软件将其固化到AT89S51芯片中。在固化之前应将P1口8个拨码开关的后3位 (K6、K7、K8) 拨至中间,便可以检测到器件了,否则不会检测到器件,也无法固化程序。程序写入完后,将P1口的K1、K2、K3、K4拨至到最下面一档,第二位数码管显示“0”,第一位数码管不亮;将K1拨码开关拨至上面时,第二个数码管显示为“1”,第一位数码管不亮;将K1、K2拨码开关拨至上面时,第二个数码管显示为“3”,第一位数码管不亮。以此类推,具体原因见表1。

将K1、K2波段开关拨至最上面也就是置P1.0、P1.1为高电平,也就是D0 和D1为高电平,这时将D0与D1对应的数值逻辑相加等于3,数码管显示“3”。再用3去查表2将3所对应的字段码送到P2口显示,这就是数码管显示“3”的原因。如要显示“8”则只要将K4开关拨至最上面就可以了,而其余开关拨至最下面。

4.2 P2口数码管动态显示P1口拨码开关的数值

同(1)打开Keil C51集成开发环境,输入以下源程序:

ORG 0000H

LJMP XIANSH

ORG 0060H

XIANSH: MOV P3,#55H

MOV A,P1

ANL A,#0FH

MOV DPTR,#TAB

MOVC A,@A+DPTR

SETB P3.0

CLR P3.1

MOV P2,A

ACALL DEL1MS

MOV A,20H

ANL A,#0F0H

SWAP A

CLR P3.0

SETB P3.1

ACALL DEL1MS

SJMP XIANSH

DEL1MS: MOV R5,#05H

L2: MOV R4,#28H

L1: NOP

NOP

NOP

DJNZ R4,L1

DJNZ R5,L2

RET

TAB: DB 0C0H, 0F9H, 0A4H, 0B0H, 99H, 92H, 82H

DB 0F8H, 80H,90H,88H,83H, 0C6H, 0A1H

DB 86H, 8EH, 0FFH

END

ORG0000H

AJMP MAIN

ORG0030H;初始化

;--------------------------

MAIN:

MOVP 0, #00H;给P0与P2口赋值00H,点亮所有发光二极管

MOVP 2, #00H

ACALLDELY1S;调用延时子程序,维持发光二极管点亮1S

MOVP 0, #0FFH;给P0与P2口赋值FFH,熄灭所有发光二极管

MOVP 2, #0FFH

ACALLDELY1S;调用延时子程序,维持发光二极管熄灭1S

AJMP MAIN;跳转至主程序入口不断循环

;----------------------------

DELY1S: ;延时子程序(延时时间大约为1S)

MOVR5, #05H ;用DJNZ指令来不断减一,从而达到延时的效果

DEL1:

MOVR6, #64H ; 延时子程序的计算3条NOP和1条DJNZ指令共5个机

DEL2: ;器周期,执行时间为5*2us=10us经过三重循环,需要执

MOVR7, #0C8H ;行2001005次,执行时间为10us*5*200*100=1000 000us=1s

DEL3:

NOP

NOP

NOP

DJNZR 7, DEL3

DJNZR6, DEL2

DJNZR5, DEL1

RET

END

编译通过后,接通5V稳压电源,用Easy 51Pro软件将其固化到AT89S51芯片中。在固化之前应将P1口8个拨码开关的后3位拨至中间,便可以检测到器件了,否则不会检测到器件的!程序写入芯片后,16个发光二极管每隔1S点亮一次,然后再熄灭1S,如此循环。

4.3 中断试验

同(1)打开Keil C51集成开发环境,输入以下源程序:

ORG 0000H

LJMP MAIN ;上电,转向主程序

ORG 0003H ;外部中断源INT0入口地址

AJMPZHONGDUAN ;外部中断0请求中断时,跳到ZHONGDUAN ORG 0060H 主程序

;-----------------------

MAIN:

SETBEA;CPU 开中断

SETBEX0 ;允许外部中断INT0中断

MOV A,#0FEH

;-----------------------

XH:

MOVP0,A

MOVP2,A

ACALLDELY1S

RR A

SJMP XH

;-----------------------

ORG 0200H;中断服务程序

ZHONGDUAN:

MOV P0,#00H;P0口等全部点亮

MOV P2,#00H;P2口等全部点亮

RETI ;中断返回

;-----------------------

DELY1S:;延时子程序(延时时间大约为1S)

MOV R5, #05H

DEL1:

MOV R6, #64H

DEL2:

MOV R7, #0C8H

DEL3:

NOP

NOP

NOP

DJNZR7, DEL3

DJNZR6, DEL2

DJNZR5, DEL1

RET

END ;延时子程序的计算3条NOP和1条DJNZ指令共5个机器周期,执行时间为5*2us=10us经过三重循环,需要执行2001005次,故执行时间为10us*5*200*100=1000000us=1s。

将程序写入芯片后,16个发光二极管在分两组左移,当按下S3按钮时16个发光二极管全部点亮。将按钮松开恢复初始状态,程序接着左移!

电路设计好,就进入装配和调试阶段,将89S51单片机插入底座上,可以用输出电压4.9V,输出电流450mA左右的手机或其他电器设备的充电器做电源,完全可以为实验板提供电源,可以使初学者省去买一个电源的开销,此方法可减少成本,还可以提高效率。最后将KeilC编程软件和Easy 51Pro下载软件安装到一台普通的电脑上,编写、编译、固化程序。一个低成本的单片机实验系统就制作完成了!

对于单片机初学者来说,能用最简单的硬件电路来做程序是最好的。比起实验箱、复杂的实验板,不必去研究这个线是怎么接的,那个线是怎么接的,能够让广大读者可以自己制作开发板,自己编写程序。初学者一看就知道是怎么接的。这套单片机实验开发板在我校被广泛应用于教学实践,通俗易懂,学生乐于接受,教学效果很好。

参考文献:

[1] 黄永定.电子线路实验与课程设计[M].北京:机械工业出版社,2005:135.

[2] 扬志忠.数字电子技术[M].北京:高等教育出版社,2005:328.

[3] 黎旺星.项目驱动式单片机应用教程[M].北京:中国电力出版社,2009.

[4] 荀殿栋.数字电路设计实用手册[M].北京:电子工业出版社,2003.

[5] 黄永定.电子线路实验与课程设计[M].北京:机械工业出版社,2005:135.

[6] 刘银平.数字电子技术实验教学改革的探讨[J].实验室研究与探索,2006,25(8).

[7] 陆东旭.自制简单的51开发板[J].电子制作,2008(1).

[8] 扬志忠.数字电子技术[M].北京:高等教育出版社,2005:328.

[9] 朱松盛.可在线编程的多功能单片机实验板[J].南京师范大学学报:工程技术版,2006(2).

[10] 徐乐.低成本单片机实验开发板[J].无线电,2008(11).