基于89s51单片机的无线病房呼叫系统设计大学毕设论文.docx
- 文档编号:12779151
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:41
- 大小:413.47KB
基于89s51单片机的无线病房呼叫系统设计大学毕设论文.docx
《基于89s51单片机的无线病房呼叫系统设计大学毕设论文.docx》由会员分享,可在线阅读,更多相关《基于89s51单片机的无线病房呼叫系统设计大学毕设论文.docx(41页珍藏版)》请在冰点文库上搜索。
基于89s51单片机的无线病房呼叫系统设计大学毕设论文
基于89S51单片机的无线病房呼叫系统软件设计
第1章单片机与AT89S51芯片概述
1.1单片机简介
单片机全称为单片微型计算机(SingleChipMicrocomputer),又称为微控制器(MicrocontrollerUnit)或嵌入式控制器(EmbeddedController)。
它是将计算机的基本部件微型化并集成到一块芯片上的微型计算机,通常片内都含有CPU、ROM、RAM、并行I/O、串行I/O、定时器/计数器、中断控制、系统时钟及系统总线等。
随着技术的发展,单片机片内集成的功能越来越强大,并朝着片上系统方向发展。
单片机有着体积小、功耗低、功能强、性能价格比高、易于推广应用等显著优点,在自动化装置、智能仪器仪表、过程控制、通信、家用电器等许多领域得到日益广泛的应用。
1.2AT89S51介绍
如图1-1为AT89S51引脚图
图1-1AT89S51引脚图
AT89S51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供性价比高的解决方案。
AT89S51具有如下特点:
40个引脚,4kBytesFlash片内程序存储器,128bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
此外,AT89S51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。
空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。
同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。
(1)主要功能特性:
✧兼容MCS-51指✧令系统
✧4k可反复✧擦写(>1000次)ISPFlashROM
✧32个双向I/O口
✧4.5-5.5V工作电压
✧2个16位可编程定时/计数器
✧时钟频率0-33MHz
✧全双工UART串行中断口线
✧128x8bit内部RAM
✧2个外部中断源
✧低功耗空闲和省电模式
✧中断唤醒省电模式
✧3级加密位
✧看门狗(WDT)电路
✧软件设置空闲和省电功能
✧灵活的ISP字节和分页编程
✧双数据寄存器指✧针
(2)AT89S51各引脚功能介绍:
引脚如图1-1所示,以下是各引脚的说明.
VCC:
AT89S51电源正端输入,接+5V。
VSS:
电源地端。
XTAL1:
单芯片系统时钟的反相放大器输入端。
XTAL2:
系统时钟的反向放大器输出端,一般在设计上只要在XTAL1和XTAL2上接上一只石英振荡晶体系统就可以动作了,此外可以在两个引脚与地之间加入一20PF的小电容,可以使系统更稳定,避免噪声干扰而死机。
RESET:
AT89S51的重置引脚,高电平动作,当要对晶片重置时,只要对此引脚电平提升至高电平并保持两个机器周期以上的时间,AT89S51便能完成系统重置的各项动作,使得内部特殊功能寄存器之内容均被设成已知状态,并且至地址0000H处开始读入程序代码而执行程序。
EA/Vpp:
"EA"为英文"ExternalAccess"的缩写,表示存取外部程序代码之意,低电平动作,也就是说当引脚为低电平后,系统会调用外部的程序代码(存于外部EPROM中)来执行程序。
因此在8031及8032中,EA引脚必须接低电平,因为其内部无程序存储器空间。
如果是使用8751内部程序空间时,引脚要接成高电平。
此外,在将程序代码烧录至8751内部EPROM时,可以利用此引脚来输入21V的烧录高压(Vpp)。
ALE/PROG:
ALE是英文"AddressLatchEnable"的缩写,表示地址锁存器启用信号。
AT89S51可以利用这个引脚来触发外部的8位锁存器(如74LS373),将端口0的地址总线(A0~A7)锁进锁存器中,因为AT89S51是以多工的方式送出地址及数据。
平时在程序执行时ALE引脚的输出频率约是系统工作频率的1/6,因此可以用来驱动其他周边晶片的时基输入。
此外在烧录8751程序代码时,此引脚会被当成程序规划的特殊功能来使用。
PSEN:
此为"ProgramStoreEnable"的缩写,其意为程序储存启用,当8051被设成为读取外部程序代码工作模式时(EA=0),会送出此信号以便取得程序代码,通常这支脚是接到EPROM的OE脚。
AT89S51可以利用PSEN及RD引脚分别启用存在外部的RAM与EPROM,使得数据存储器与程序存储器可以合并在一起而共用64K的定址范围。
PORT0(P0.0~P0.7):
端口0是一个8位宽的开路电极(OpenDrain)双向输出入端口,共有8个位,P0.0表示位0,P0.1表示位1,依此类推。
其他三个I/O端口(P1、P2、P3)则不具有此电路组态,而是内部有一提升电路,P0在当作I/O用时可以推动8个LS的TTL负载。
如果当EA引脚为低电平时(即取用外部程序代码或数据存储器),P0就以多工方式提供地址总线(A0~A7)及数据总线(D0~D7)。
设计者必须外加一个锁存器将端口0送出的地址锁住成为A0~A7,再配合端口2所送出的A8~A15合成一个完整的16位地址总线,而定位地址到64K的外部存储器空间。
PORT2(P2.0~P2.7):
端口2是具有内部提升电路的双向I/O端口,每一个引脚可以推动4个LS的TTL负载,若将端口2的输出设为高电平时,此端口便能当成输入端口来使用。
P2除了当作一般I/O端口使用外,若是在AT89S51扩充外接程序存储器或数据存储器时,也提供地址总线的高字节A8~A15,这个时候P2便不能当作I/O来使用了。
PORT1(P1.0~P1.7):
端口1也是具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个LSTTL负载,同样地,若将端口1的输出设为高电平,便是由此端口来输入数据。
如果是使用8052或是8032的话,P1.0又当作定时器2的外部脉冲输入脚,而P1.1可以有T2EX功能,可以做外部中断输入的触发引脚。
PORT3(P3.0~P3.7):
端口3也具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个TTL负载,同时还多工具有其他的额外特殊功能,包括串行通信、外部中断控制、计时计数控制及外部数据存储器内容的读取或写入控制等功能。
其引脚分配如下:
P3.0:
RXD,串行通信输入。
P3.1:
TXD,串行通信输出。
P3.2:
INT0,外部中断0输入。
P3.3:
INT1,外部中断1输入。
P3.4:
T0,计时计数器0输入。
P3.5:
T1,计时计数器1输入。
P3.6:
WR:
外部数据存储器的写入信号。
P3.7:
RD,外部数据存储器的读取信号。
(3)AT89S51与AT89C51比较:
89S51相对于89C51而言:
新增加了很多功能,性能有了较大提升,价格基本不变,甚至比89C51更低!
ISP在线编程功能,这个功能的优势在于改写单片机存储器内的程序不需要把芯片从工作环境中剥离。
是一个强大易用的功能。
最高工作频率为33MHz,大家都知道89C51的极限工作频率是24M,就是说S51具有更高工作频率,从而具有了更快的计算速度。
内部集成看门狗计时器,不再需要像89C51那样外接看门狗计时器单元电路。
全新的加密算法,这使得对于89S51的解密变为不可能,程序的保密性大大加强,这样就可以有效的保护知识产权不被侵犯。
兼容性方面:
向下完全兼容51全部字系列产品。
比如8051、89C51等等早期MCS-51兼容产品。
也就是说所有教科书、网络教程上的程序(不论教科书上采用的单片机是8051还是89C51还是MCS-51等等),在89S51上一样可以照常运行,这就是所谓的向下兼容。
比较结果:
就如同INTEL的P3向P4升级一样,虽然都可以跑Windows98,不过速度是不同的。
从AT89C51升级到AT89S51,也是同理。
和S51比起来,C51就要逊色一些,实际应用市场方面技术的进步是永远向前的。
第2章系统硬件设计
2.1系统原理框图
如图2-1所示为系统原理框图:
图2-1系统原理框图
2.2硬件模块设计
该系统主要包括无线发射模块,无线接收模块,指示灯模块设计,声音模块,显示模块五部分组成。
2.21无线发射模块
编码发射模块主要由PT2262编码IC和高频调制、功率放大电路组成,发射模块的A、B、C、D四个按键分别代表不同的病床号,按下代表病人呼救。
如图2-1为无线发射模块电路图。
图2-2无线发射模块
2.22无线接受模块
解码接收模块包括接收头和解码芯片PT2272两部分组成。
接收头将收到的信号输入PT2272的14脚(DIN),PT2272再将收到的信号解码。
四个数据输出口接到四个I/O口,分别接在AT89S51单片机最小系统P1口的P1.4-P1.7引脚上。
通过不断的扫描I/O口是高电平还是低电平来判断是否有病人呼叫,是通过循环实现的。
同时还需要考虑到一些问题,例如,当有多个病人同时呼叫时,能使互不干扰。
如图2-3为无线接收模块电路图:
图2-3无线接收模块
2.23指示灯模块
利用发光二极管实现,发光二极管占用了四个I/O口,分别接在P2口的P3.4-P3.7引上.指示灯连接如图2-4所示:
图2-4指示灯连接电路
2.23声音模块
利用蜂鸣器来实现,蜂鸣器报警占用了四个I/O口,分别接在P2口的P2.4-P2.7引脚上蜂鸣器连接如图2-5所示:
图2-5蜂鸣器连接电路
2.24LED显示模块
主要由74HC164和数码管组成的,通过串口输入和串口输出把号码显示到数码管上。
主要实现顺序移动,有串行输入口和串行输出口,分别接在AT89S51芯片的P1.0,P2.0P1.1,P2.1P1.2,P2.2P1.3,P2.3)通过74HC164来实现,在程序中主要是用循环来实现给一个时钟信号,输入一个数据,当有按键按下时,数码管将显示出是几号床位上的病人呼叫,而且一直在显示,直到有护士发现。
图2-6为74HC164和数码管连接电路:
图2-674HC164和数码管连接电路
第3章系统软件设计
3.1单片机程序设计的步骤
单片机的程序设计通常包括根据任务绘制程序流程图编写程序及汇编等几个步骤
1绘制流程图
所谓流程图就是用各种符号,图形,箭头把程序的流向及过程用图形表示出来,绘制流程图是单片机程序编写前最重要的工作,通常我们的程序就是根据流程图的指向采用适当的指令来编写的。
绘制流程图时,首先画出简单的功能流程图粗框图再对功能流程图进行扩充和具体化,即对存储器,标志位等单元做具体的分配和说明,把功能图上的每一个粗框图转化为具体的存储器或地址单元从而绘制出详细的程序流程图,即细框图。
在单片机的编程过程中绘制流程图能看清楚程序执行的步骤以及程序的流向。
事实上,程序的编写就是根据流程图的功能完成的在实际的程序设计中根据框图采用适当的指令编写出实现流程图的源程序就是我们编写程序的最后工作。
2编写程序和汇编
程序编写完之后,我们要把它汇编成机器语言,这种机器语言就是十六进制文件,后缀名为*.HEX文件。
以前还要把它转换成二进制文件,后缀名为*.BIN文件,不过现在的编程器都能直接读入十六进制文件就不需要转换了最后用编程器把程序写入单片机。
单片机程序设计的方法:
要想搞清楚程序设计的方法,我们首先要知道单片机到底有哪几类程序,单片机的程序分为顺序结构,分支结构和循环结构。
在单片机的程序中既有复杂的程序也有简单的程序,但不论哪种程序,它们都是由一个个基本的程序结构组成的,这些基本结构有顺序结构,分支结构和循环结构。
1顺序结构程序的设计
顺序结构的程序一般用来处理比较简单的算术或逻辑问题,它的执行过程是按照程序存储器PC自动加1的顺序执行的,主要用数据传递类指令和数据运算类指令来实现。
2分支结构程序的设计
所谓分支结构就是利用条件转移指令使程序执行某一指令后,根据所给的条件是否满足来改变程序执行的顺序,也就是本条指令执行完后并不是象顺序结构那样执行下一条指令,而是看本条指令所给的条件是否满足,如果满足条件就跳转到其他的指令,如果不满足就顺序执行。
当然也可以是满足条件顺序执行而不满足条件跳转执行。
在51系列单片机中,可以直接用于分支程序的指令有JBJNBJCJNCJZJNZCJNEJBC等这几条,它们可以完成诸如正负判断大小判断和溢出判断等等。
在分支结构的指令设计中大家必须注意,执行一条判断指令只可以形成两路分支,如果要形成多路分支就必须进行多次判断也就是多条指令连续判断。
3循环结构程序的设计
循环程序是最常用的程序结构形式,在单片机的程序设计中有时要碰到一段程序需要重复执行多次的情况,此时就要用到循环结构程序。
循环初始化部分
主要用来设置循环的初始值,包括预值数,计数器和数据指针的初值。
循环处理部分
循环处理部分是程序的主体部分也称为程序体,通过它可以完成程序处理的任务。
循环控制部分
循环控制部分可以控制程序循环的次数并修改预值数或计数器和指针的值,检查该循环是否执行了足够的次数,如果到了足够的次数就采用条件转移指令或判断指令来控制循环的结束。
循环结束部分
循环结束后必须返回一般用RET或RETI指令,在循环程序设计中,循环控制部分是程序设计的关键环节。
常用的循环控制方式有计数器控制和条件控制两种,计数器控制就是把要循环的次数即预值数放入计数器中,程序每循环一次计数器的值就减1,一直到计数器的内容为零时,循环结束一般用DJNZ指令而条件控制方式常预先不知道要循环的次数。
只知道循环的有关条件此时就可以根据给定的条件标志位来判断程序是否继续,一般参照分支结构方法中的条件来判别指令并执行。
子程序的设计方法
调用子程序的程序我们则叫它主程序LOOP的程序段在主程序执行时,每当要用到子程序时我们就用LCALL指令来调用子程序,子程序执行完之后,必须返回主程序返回就用RET指令。
3.2单片机汇编语言介绍
程序设计语言可以分为:
符号语言,机器语言,汇编语言,高级语言。
符号语言己经具有很多优点,但符号语言中的每一个符号(这里称作助记符)可以是用户根据辨认或者记忆的需要自己来决定的。
这样,通用性不是很强。
就是说,按某一个人的想法编写的符号语言程序,另外一个人是无法看懂的。
汇编语言克服了上述的缺点,它是在符号语言的基础上发展起来的。
它是针对一类(甚至几类)计算机,抽象出来的一种符号语言并把这些符号加以统一规定,使得使用同类计算机的人都了解这些符号的意义,这样,使得用汇编语言编写的程序可以在这一类型的任何一台计算机上使用。
这就有了极大的灵活性,当然不同类型的计算机的汇编语言也不同。
它们都必须由生产厂家提供的汇编语言来编写。
另外.汇编语言还增加了宏指令的功能。
让我们比较一下汇编语言和高级语言的特点。
首先,汇编语言与处理器关系密切。
每种处理器都有自己的指令系统,相应的汇编语言也各自不同。
因而汇编语言程序的通用性、可移植性较差。
而高级语言与具体计算机无关,高级语言程序可以在多种计算机上编译启执行。
其次,汇编语言编程涉及寄存器、内存等硬件细节,程序繁琐,调试也比较困难.而高级语言采用类似自然语言的语法,容易被掌握和使用,也不必关心诸如标志、堆栈等。
但是,汇编语言本质上就是机器语言,它可以直接有效地控制计算机硬件,因而可以产生运行速度快、指令序列短的高效率目标程序。
而高级语言不易直接控制计算机的各种操作,编译程序产生的目标程序庞大、程序难以优化、运行速度慢.
总的来说,汇编语言的主要优点就是可以直接控制计算机硬件,可以编写在时间和空间两方面更有效的程序。
这些优点使得汇编语言在程序设计中占有重要的地位。
是不可取代的。
但汇编语言的缺点也是明显的,它与处理器密切相关,要求程序员熟悉计算机硬件系统,考虑许多细节问题,所以程序繁琐,调试、维护、交流和移植困难。
因此,有时可以采用高级语言和汇编语言混合编程的方法,互相取长补短,更好地解决实际问题。
汇编语言生要应用场合有以下几种:
l.程序要具有较短的运行时问,或者只能占用较小的存储客量。
例如操作系统的核心程序段,实时控制系统的软件等。
2.程序与计算机硬件密切相关,程序要直接控制硬件。
例如to接口电路的初始化程序段,外部设备的底层驱动程序等6
3.大型软件需要提高性能、优化处理的部分。
例如计算机系统频繁调用的子程序、动态链接库等。
4.没有适合的高级语言的时候。
例如开发最新的处理器程序时。
3.3系统软件框图及程序设计
图3-1系统软件框图
通过不断地循环扫描按键,检查是否有病人呼叫。
3.31初始化程序
主程序初始化,并使数码管全显示0。
BEGIN:
MOVTMOD,#10H;设置定时器为定时器1方式1
MOVTH1,#3CH;定时50ms
MOVTL1,#0B0H
SETBET1;开定时器1中断
SETBTR1;定时开始
CLRBC1
CLRBC2
CLRBC3
CLRBC4
CLRFLAG1;清除4个标志位
CLRFLAG2
CLRFLAG3
CLRFLAG4
MOVDPTR,#TAB;送表首地址
MOVA,#0FCH;0串口代码
MOVR1,#9;;串口得送9次
A1:
CLRTXD3;;下面为串口送数过程
RRCA;带进位右移
SETBTXD3
MOVRXD3,C
LCALLYANSHI;833US小段延时
DJNZR1,A1
MOVA,#0FCH
MOVR1,#9
A2:
CLRTXD4
RRCA
SETBTXD4
MOVRXD4,C
LCALLYANSHI;833US
DJNZR1,A2
MOVA,#0FCH
MOVR1,#9
A3:
CLRTXD1
RRCA
SETBTXD1
MOVRXD1,C
LCALLYANSHI;833US
DJNZR1,A3
MOVA,#0FCH
MOVR1,#9
A4:
CLRTXD2
RRCA
SETBTXD2
MOVRXD2,C
LCALLYANSHI;833US
DJNZR1,A4
3.32键扫描程序设计
通过不断的扫描按键所接的I/O口是高电平还是低电平来判断是否有病人呼叫,是通过循环实现的。
同时还需要考虑到一些问题,例如,当有多个病人同时呼叫时,怎样能使互不干扰,这时是通过一个标志位来控制的。
3.33指示灯控制程序设计
当有病人按键呼叫时,指示灯闪烁报警,用一条指令CLR3.4即可实现,并用延时程序控制灯的闪烁时间。
3.34报警程序设计
如果有病人呼叫,即有按键按下,那么相应的蜂鸣器所接的I/O口也设置为高电平,而且每一个蜂鸣器发出的声音是不一样的。
在程序中只用一条语句即可实现:
CLRP2.4,因为在本电路设计时,每个引脚都是低电平有效的,所以在清零时蜂鸣器才能发出声音。
3.35显示程序设计
当有按键按下时,就会调用显示子程序,在电路图中使用的是:
串行方式,假如现在是2号床位上的病人呼叫,则在数码管上应显示“2”,串行方式中,数码管上显示的数字是先成二进制数,再一位一位地输进去的,然后才显示数字。
这里是在模拟串口,因为该单片机中只有一个串口,而这里要用多个串口。
当这段程序执行完以后,再进入循环。
十进制数与相应二进制数的转换表如表3-1所示。
表3-1转换表
显示数值
dopgfedcba
驱动代码(16进制)
0
11111100
0fcH
1
01100000
60H
2
11011010
0dAH
3
11110010
0f2H
4
01100110
66H
5
10110110
B6H
显示子程序如下所示:
START:
CLRC;病床数码管显示
MOVDPTR,#TAB
MOVA,R0
MOVCA,@A+DPTR
MOVR1,#9
S1:
CJNER0,#1,S2
SJMPSS1
S2:
CJNER0,#2,S3
SJMPSS2
S3:
CJNER0,#3,S4
SJMPSS3
S4:
CJNER0,#4,S1
LJMPSS4
FH1:
LJMPBEGIN
SS1:
LCALLYS10MS
JBP1.4,FH1
SSS1:
CLRTXD3
RRCA
SETBTXD3
MOVRXD3,C
LCALLYANSHI;833US
DJNZR1,SSS1
CLRP2.4
CLRP3.4
WS1:
MOVA,R7
ADDA,#200
MOV31H,A
SETBBC1
SETBFLAG1
LJMPTT2
FH2:
LJMPBEGIN
SS2:
LCALLYS10MS
JBP1.5,FH2
SSS2:
CLRTXD4
RRCA
SETBTXD4
MOVRXD4,C
LCALLYANSHI;833US
DJNZR1,SSS2
CLRP2.5
CLRP3.5
WS2:
MOVA,R7
ADDA,#200
MOV32H,A
SETBBC2
SETBFLAG2
LJMPTT3
FH3:
LJMPBEGIN
SS3:
LCALLYS10MS
JBP1.6,FH3
SSS3:
CLRTXD1
RRCA
SETBTXD1
MOVRXD1,C
LCALLYANSHI;833US
DJNZR1,SSS3
CLRP2.6
CLRP3.6
WS3:
MOVA,R7
ADDA,#200
MOV33H,A
SETBBC3
SETBFLAG3
LJMPTT4
FH4:
LJMPBEGIN
SS4:
LCALLYS10MS
JBP1.7,FH4
SSS4:
CLRTXD2
RRCA
SETBTXD2
MOVRXD2,C
LCALLYANSHI;833US
DJNZR1,SSS4
CLRP2.7
CLRP3.7
WS4:
MOVA,R7
ADDA,#200
MOV34H,A
SETBBC4
SETBFLAG4
LJMPTT1
TTI1:
LJMPTTT1
3.36延时设定
中断允许控制寄存器
中断的允许或禁止是由片内可进行位(什么是位,大
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 89 s51 单片机 无线 病房 呼叫 系统 设计 大学 论文