计算机可控单片机系统的应用设计.docx
《计算机可控单片机系统的应用设计.docx》由会员分享,可在线阅读,更多相关《计算机可控单片机系统的应用设计.docx(34页珍藏版)》请在冰点文库上搜索。
计算机可控单片机系统的应用设计
计算机可控单片机系统的应用设计
摘要:
本设计通过对AT89S52单片机所组的系统进行编程,可以由串行线在上位机(微机)中进行操作。
本设计选择了单片机的8个端口作为模拟设备操纵对象,可以在微机用DOS命令进行8个端口小灯的亮灭控制。
关键词:
计算机、单片机、汇编语言、
Thecomputercontrollablemonolithicintegratedcircuitsystemapplicationdesigns
Abstract:
Thisdesignthroughcarriesontheprogrammingtoat89S52monolithicintegratedcircuitgroup'ssystem,may(microcomputer)carryontheoperationbytheseriallineinonpositionmachine.Thisdesignhaschosenthemonolithicintegratedcircuit.Aporttookthesimulationequipmentoperationobject,mayorderinthemicrocomputerwithDOStocarryon8portsmalllampstoextinguishthecontrolbrightly.
Keyword:
Computation,monolithicintegratedcircuit,assemblylanguage
1系统设计
微机与单片机系统的通信控制是单片机系统应用发展的最前端技术,也是单片机得以生存的主要原因,就此,我们提出两种方案:
方案一:
我们可以选用比较先进的控制编程用高级语言,比如:
C语言、VB语言等进行控制界面的设计,用图示按键进行控制对象的操作。
方案二:
我们可以采用微机通信工具中的超级终端进行单片机通信,无需进行上位机的编程,用DOS命令即可实现实时控制单片机系统。
从一上两种方案中可以看出:
第一种岁比较简单,但要求设计者需要有较强的高级语言编程能力,对一般的单片机学习者而言,一下子难以达到这个要求,决定采用具有在线编程功能的单片机AT89S52,使得本系统具有在线维护功能。
图一:
为计算机可控单片机系统电路的结构框图
2单元电路设计
2.1AT89S52单片机介绍
2.1.1AT89S52
AT89S52是一个低功耗,40个脚,高性能CMOS8位单片机,片内含8kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。
图二:
AT89S52单片机
2.1.2AT89S52引脚功能介绍:
(1)P0口:
P0口是一个8位漏极开路的双向I/O口。
作为输出口,每位能驱动8个TTL逻辑电平。
对P0端口写“1”时,引脚用作高阻抗输入。
,
P0具有内部上拉电阻。
(2)P1口:
P1口是一个具有内部上拉电阻的8位双向I/O口,p1输出缓冲器能驱动4个TTL电平。
此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如下表所示。
引脚号第二功能:
P1.0T2(定时器/计数器T2的外部计数输入),时钟输出
P1.1T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)
P1.5MOSI(在系统编程用)
P1.6MISO(在系统编程用)
P1.7SCK(在系统编程用)
(3)P2口:
P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。
对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
(4)P3口:
P3口是一个具有内部上拉电阻的8位双向I/O口,p2输出缓冲器能驱动4个TTL逻辑电平。
对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。
在flash编程和校验时,P3口也接收一些控制信号。
AT89S52
(5)引脚号第二功能
P3.0RXD(串行输入)
P3.1TXD(串行输出)
P3.2INT0(外部中断0)
P3.3INT0(外部中断0)
P3.4T0(定时器0外部输入)
P3.5T1(定时器1外部输入)
P3.6WR(外部数据存储器写选通)
P3.7RD(外部数据存储器写选通)
RST:
复位输入
2.1.3AT89S52具有如下特点:
40个引脚,8kBytesFlash片内程序存储器,256bytes的随机存取数据存储(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
此外,AT89S52设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。
空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。
同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。
2.2外围电路设计
2.2.1电源电路设计
这当然是必不可少的了。
单片机使用的是5V电源,其中正极接40引脚,负极(地)接20引脚。
2.2.2负位电路设计
上电复位采用电平方式开关复位。
如图三所示。
上电复位用RC电路,电容用20
F,电阻用10K
。
图三
2.2.3晶振电路设计
单片机是一种时序电路,必须提供脉冲信号才能正常工作,在单片机内部已集成了振荡器,使用晶体振荡器,接18、19、20脚。
只要买来晶振,电容,单片机的晶振频率应低于40MHZ,所以我们采用12MHZ,加两个104
F电容连上就可以了,图四所示。
图四
2.2.4P1口发光管电路
P1.0-P1.7(第1-8引脚)连接到8个470欧电阻驱动8个发光管。
如图五
图五
2.2.5、单片机外围电路系统图:
3、系统软件设计
在AT89S52单片机应用系统中,应用程序装入0000h-ffffh地址处,在应用程序开发时,先在软件中编好所需要的程序,在利用RS-232总线下载程序,然后可以利用计算机的超级终端对应用系统应用程序的写入及修改。
本设计利用9个命令实现对单片机系统的实时控制。
下面介绍应用程序中的主要控制程序。
3.1.主程序
主程序主要是检查是否有上位机的命令,在主程序中可以加入单片机系统自身的控制程序,主程序流程图:
图六
3.2初始化程序
初始化程序主要负责程序上电后的设置工作,主要功能是设置堆栈地址;串口通信为方式;开启2作波特率发生器;开串口中断;向上位机发版本信息及提示符等,其流程图如下:
图
3.3串口接收发送处理程序流程图:
串口中断服务趁许负责接收和发送字符,在单片机接收上位机的命令时,需对退格键、回车键进行判断,进行响应的处理,当接收完毕后置接收成功的标志。
串口中断接收程序流程图如下:
图
3.4、命令获取子程序
命令获取子程序对接收到的字符进行比较、出错处理,并转入响应的命令功能执行程序,其流程图如下:
图
3.5、命令功能执行程序
软件设计中设置了9个命令功能,在实际应用中可根据需要设立。
9个命令功能是显示帮助信息功能、设置波特率功能、进入在线编程控制功能、对设备0开关功能、对设备1开关功能、对设备2开关功能、对设备3开关功能、对设备4开关功能及对设备5开关功能、
3.6、进入在线编程控制程序
为了在应用系统工作时,能进入在线编程模式,以便对应用系统进行在线程序的修改或升级。
其流程图如下:
4、系统的访真、调试
5、致谢
感谢我的指导老师凌泽明老师,他严谨细致、一丝不苟的作风一直是我学习中的榜样;除此之外还要感谢我们以前的单片机任课老师罗德雄老师。
是他们循循善诱的教导和不拘一格的思路各于我无尽的启迪。
这篇设计报告中每次实验、每个细节、每个数据,都离不开他们细心的指导,而他们开朗的个性和宽容的态度,帮助我能够很快的融入我的毕业设计中去。
感谢在我身边的其他老师和同学们,在我不懂时,只要他们知道,一定是不厌其烦地指导。
感谢我的爸爸妈妈,焉得谖草,言树之背,养育之恩,无以回报,你们永远健康快乐是我最大的心愿。
在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我最诚挚的谢意!
参考文献
[1]武庆生.仇梅.单片机原理与应用.电子科技大学出版,1998,12
[2]李朝青.单片机学习指导.北京航空航天工业出版社,2005,75~95
[3]朱定华.单片机原理与接口技术.电子工业出版社,2001,4
[4]刘瑞新.单片机原理及应用教程.机械工业出版社,2003,7
[5]刘华东.单片机原理与应用(第二版)[M].电子工业出版社,2006,
[6]李光飞.单片机课程设计实例指导.北京航空航天工业出版社,2004,155~179
[7]李朝青.单片机原理及接口技术(修订版)[M].北京:
北京航空航天大学出版社,1998.
[8]阎石.数字电子技术基础(第四版)[M].高等教育出版社,2000年5月第一版.
[9]胡汉才.单片机原理及其接口技术[M].清华大学出版社,2000年5月第一版.
[10]何立民.单片机高级教程[M].北京航空航天大学出版社,2000年5月第一版.
[11]陈汝全.电子技术常用器件应用手册[M].第二版,机械工业出版社,2002年5月第一版.
[12]李广弟.单片机基础[M].北京:
北京航空航天大学出版社,1992.
[13]罗亚非.凌阳16位单片机应用基础[M].北京:
北京航空航天大学出版社,2003
附录
附录一:
微机可控单片机系统制作的成品示意图:
附录二:
单片机控制系统源程序清单
;变量定义
;常数定义
RXBUFFSTARTEQU040H;接收缓冲区队列首地址(170字节)
XBUFFSTARTEQU050H;发送缓冲区队列首地址(170字节)
RXBUFFNDEQU0F0H;接收缓冲区队列末址
COMMANDLENEQU008H;命令字符最大长度
;编程延时
P15MSEQU0C9H;11.0592MHz12.000MHz14.318MHz
P1USEQU0FEH
P50USEQU0D1H
;控制键
BACKSPACEEQU008H;退后删除键
;内部寄存器定义
T2CONEQU0C8H;T2控制寄存器
T2MODEQU0C9H
TL2EQU0CCH;T2计数积存器低字节
TH2EQU0CDH;T2计数积存器高字节
TR2EQU0CAH;T2启动位
RCAP2LEQU0CAH;T2计数重载寄存器底字节
RCAP2HEQU0CBH;T2计数重载寄存器高字节
CHPCONEQU0BFH;在系统变成控制寄存器
CHPENREQU0F6H;编程状态下MTPROM的控制字节寄存器
;控制标志位定义
KEYFUNFLAGEQU03H
TXOKFLAGEQU04H;发送OK标记
RXCOMMFLAGEQU05H
COMMSPACEFLAGEQU06H;命令删除OK标记
RXCOMMOKFLAGEQU07H
;全局变量定义
;串口
RXBUFFTAILEQU3BH;接收缓冲区尾指针
RXBUFFHEADEQU3AH;接收缓冲区头指针
RXBUFFLENEQU39H;命令长度计数
BLKCHKEQU35H
;
ORG0000H
LJMPSTART
;
;中断向量入口
ORG0003H;中断入口表
RETI
ORG000BH
RETI
ORG0013H
RETI
ORG001BH
RETI
ORG0023H
LJMPINT_SIO
ORG002BH
RETI
ORG0080H
;
;初始化程序
;
START:
MOVR0,#0F0H;清
CLRA;01到
CLRAM:
MOV@R0,A;F0
DJNZR0,CLRAM;RAM
MOVP0,#0FFH;置P0
MOVP1,#0FFH;置P1
MOVP2,#0FFH;置P2
MOVP3,#0FFH;置P3
MOVDPL,#00H;清DPTR
MOVDPH,#00H
MOVPSW,#00H;设第一组寄存器
MOVSP,#0F1H;设置堆栈指针
MOVSCON,#01010000B;串口工作方式1(8位UART)允许接收
MOVT2CON,#00110000B;T2CON
MOVA,#01H;设置波特率0:
384001:
19200
LCALLINITBAUD;2:
96003:
4800
SETBES;允许串口中断
MOVIP,#00H;低优先级
SETBTR2;启动定时计数器2
SETBREN;启动串口接收中断
CLRTI;清串口发送中断标志位
CLRRI;清串口接收中断标志位
SETBEA;开放所有中断
MOVRXBUFFHEAD,#RXBUFFSTART
MOVRXBUFFTAIL,#RXBUFFSTART
CLRRXCOMMFLAG
MOVDPTR,#LOGOTBL;在终端上显示LOGO字符
LCALLDISPINFO
MOVDPTR,#ROMMARKTBL;在终端上显示LRM>字符
LCALLDISPINFO
;
;主程序
;
MAIN:
LCALLGETCOMMAND
NOP;可加入其他操作程序
CPLP2.0
MAINOUT:
LJMPMAIN
NOP
NOP
NOP
LJMPSTART
;
;主要处理程序
;
;获取命令
;
GETCOMMAND:
LCALLPUTCOMMSPACE;刷新命令符
MOVA,RXBUFFTAIL
XRLA,#RXBUFFSTART;
JZGETCOMMOUT;接收缓冲区空不处理
JNBRXCOMMOKFLAG,GETCOMMOUT;命令接收不成功不处理
MOVA,RXBUFFLEN
CLRC
SUBBA,#COMMANDLEN
JNCGETCOMMERROR;命令字符超长出错
CLRA
MOVR4,A;清查表计数器
MOVR5,#RXBUFFSTART;置接收缓冲区首地址
MOVDPTR,#COMMANDTBL;置命令表首地址
GETCOMMCOMP:
MOVA,R4
MOVCA,@A+DPTR;查表
INCR4
MOVR6,A;暂存到R6
MOVA,R4
JNZGETCOMMOVER
INCDPH
GETCOMMOVER:
MOVA,R5
INCR5
MOVR0,A
MOVA,@R0;读接收缓冲区
MOVR7,A;暂存到R7
MOVA,R6
XRLA,#0FFH
JZGETCOMMERROR;是否出错
MOVA,R6
XRLA,#0AH
JZGETCOMMCOMP;比较成功
MOVA,R7
XRLA,R6
JZGETCOMMCOMP;去下一个比较
MOVA,R6
ADDA,#20H;小写处理
XRLA,R7
JZGETCOMMCOMP;去下一个比较
MOVR5,#RXBUFFSTART
MOVA,R4
MOVB,#COMMANDLEN
DIVAB
MOVB,#COMMANDLEN
INCA
MULAB
MOVR4,A
LJMPGETCOMMCOMP
;
GETCOMMCOMPEND:
CLRA;初始化
MOVRXBUFFLEN,A
MOVRXBUFFTAIL,#RXBUFFSTART
CLRRXCOMMOKFLAG
MOVA,R4
MOVB,#COMMANDLEN
DIVAB;调整地址
MOVB,A
RLA
ADDA,B
MOVDPTR,#COMMFUNTBL
JMP@A+DPTR
GETCOMMOUT:
RET
;
GETCOMMERROR:
MOVDPTR,#COMMERRORTBL;显示Badcommand
LCALLDISPINFO
CLRA;初始化
MOVRXBUFFLEN,A
MOVRXBUFFTAIL,#RXBUFFSTART
CLRRXCOMMOKFLAG
LJMPDISPROM
RET
;
COMMFUNTBL:
LJMPHELPFUN
LJMPDISPROM
LJMPOP5FUN
LJMPOP0FUN
LJMPOP1FUN
LJMPOP2FUN
LJMPOP3FUN
LJMPOP4FUN
LJMPSETBFUN
LJMPAPROMFUN
RET
;
;命令解释器功能处理子程序
;
;?
HELP显示帮助信息
;
HELPFUN:
MOVDPTR,#HELPTBL;显示帮助信息
LCALLDISPINFO
LCALLINITCOMMAND
LJMPDISPROM
;
;OP5功能处理
OP5FUN:
CPLP2.6
LCALLINITCOMMAND
LJMPDISPROM
;
;OP0功能处理
OP0FUN:
CPLP2.1
LCALLINITCOMMAND
LJMPDISPROM
;
;SETB功能处理
SETBFUN:
MOVDPTR,#SETBFUNTBL
LCALLDISPINFO
MOVDPTR,#INPUTTBL
LCALLDISPINFO
SETBLOOP:
LCALLREADWAIT
MOVR0,#RXBUFFSTART
MOVA,@R0
MOVR7,A
DECR7
SETBLOOP1:
INCR7
MOVRXBUFFTAIL,#RXBUFFSTART
XRLA,R7
JNZSETBLOOP1;是否有输入
MOVA,@R0
SUBBA,#30H
MOVB,A
MOVA,B
XRLA,#04H;是否Exit
JZSETBERROR
MOVA,B
CLRC
SUBBA,#05H;大于5重输
JNCSETBRELOAD
MOVA,B
LCALLINITBAUD;设置波特率
SETBERROR:
LCALLINITCOMMAND
LJMPDISPROM
;
SETBRELOAD:
MOVRXBUFFTAIL,#RXBUFFSTART
MOVDPTR,#SETERRORTBL
LCALLDISPINFO
LJMPSETBLOOP
;
;APROM功能处理
;
APROMFUN:
MOVDPTR,#WARNINGTBL
LCALLDISPINFO
MOVDPTR,#INPUTTBL
LCALLDISPINFO
RESETLOOP:
MOVRXBUFFTAIL,#RXBUFFSTART
LCALLREADWAIT
MOVR0,#RXBUFFSTART
MOVR4,#59H;是否Y
LCALLCOMPASC
JZRESETCAPS
MOVR4,#4EH;是否N
LCALLCOMPASC
JNZRESETERROR
LCALLINITCOMMAND
LJMPDISPROM
RESETCAPS:
LCALLPUTENTER;显示回车
LCALLPUTENTER
MOVCHPENR,#87H;进入APROM修改程序状态
MOVCHPENR,#59H
MOVCHPCON,#03H
MOVTCON,#00H;关T0,T1
MOVT2CON,#00H;关T2
MOVIP,#00H;同优先级
MOVIE,#82H;允许T0中断,总中断开放
MOVTL0,#0FBH;装初值,定时为5UF
MOVTH0,#0FFH
MOVTMOD,#01H;T0为16位定时器
MOVTCON,#10H;开启T0
MOVPCON,#01H;进入在线编程模式,等待唤醒后进入4K-LDROM程序
RET
RESETERROR:
MOVDPTR,#SETERRORTBL
LCALLDISPINFO
LJMPRESETLOOP
;
;OP1功能处理
;
OP1FUN:
CPLP2.2
LCALLINITCOMMAND
LJMPDISPROM
;OP2功能处理
OP2FUN:
CPLP2.3
LCALLINITCOMMAND
LJMPDISPROM
;OP3功能处理
OP3FUN:
CPLP2.4
LCALLINITCOMMAND
LJMPDISPROM
;OP4功能处理
OP4FUN:
CPLP2.5
LCALLINITCOMMAND
LJMPDISPROM
;串口操作子程序
;
;计算公式:
(RCAP2H,RCAP2L)=65536-OscFreq/32*Baud
;DEMO:
;FREQUENCY:
12MHz
;BAUDRATE:
9600Baud
;
;(RCAP2H,RCAP2L)=65536-12*1000000/3209600
;=65479=FFD9H
;
;DB0F7H,0EFH,0DCH,0B8H,0FFH;11.0592MHz
BAUDTBL:
DB0F6H,0ECH,0D9H,0B2H,0FFH;12.0000MHz
;DB0F4H,0E8H,0D1H,0A3H,0FFH;14.3180MHz
;