单片机11
设 计 说 明 书课程名称: 单片机原理及应用 设计题目: 扩展8个输出端口设计 院 系: 电子信息与电气工程系 学生姓名:学 号:专业班级: 指导教师:
2 4日
课 程
课 程 设 计 任 务
设计要求:
1.单片机串行口工作于方式0,使用移位寄存器芯片74LS164扩展出8个输出口,接八只LED输出显示。具有电源开关及指示灯,有复位按键;
2.将串行口设置为工作方式0,接74LS164,扩展成8个输出端口,接8只LED;
3.使8个LED每4个为一组,亮灯从中间开始向左移动一次,再从中间开始向右移动一次,接着从最右端向中间移动一次,再从最左端向中间移动一次,然后闪烁两次,不断循环。
学生应完成的工作:
1.用Proteus完成扩展8个输出端口的原理图设计;
2.在Keil上用汇编语言完成扩展8个输出端口的实现程序;
3.将Proteus和Keil级联,进行仿真,修改硬件电路和程序,直至实现所要求的功能; 4.根据原理图完成实物焊接,将程序烧进单片机之后进行调试,直到达到设计要求; 5.完成课程设计说明书。
我参与了程序的编写和部分调试工作。
参考文献阅读:
[1] 杜尚丰.CAN总线测控技术及其应用.北京:电子工业出版社,2007.1
[2] 杜树春.单片机C语言和汇编语言混合编程实例详解.北京:北京航空航天大学出版社,2006.6 [3] 张毅刚.单片机原理及应用.北京:高等教育出版社,2003.12
[4] 徐爱钧.智能化测量控制仪表原理与设计.北京:北京航空航天大学出版社,2007.8 [5] 于永,戴佳,常江.51单片机实例精讲.北京:电子工业出版社,2006.4 [6] 朱宇光.单片机应用新技术教程.西安:电子工业出版社,2004.
工作计划:4号——5号完成原理图设计; 6号——7号完成程序设计; 10——11号电路仿真和调试;
12号——13号电路板的焊接和调试; 14号完成课程设计说明书。
任务下达日期:2 04日 任务完成日期:2 日
指导教师(签名): 学生(签名):
扩展8个输出端口设计
摘 要:由桥堆2W10接变压器将交流电转化为直流电,经稳压集成电路7805稳压和
电容滤波后得到+5V的电源电压,对芯片和电路供电;由晶振和电容组成起振电路,对AT89C52提供工作频率;由电阻和按键组成AT89C52的复位电路,AT89C52的P3.0和P3.1与移位寄存器芯片74LS164的A、B和CLK相接,将串行口扩展8个并行输出口,接八只LED输出显示。
关键词:AT89C52;移位寄存器芯片74LS164;LED;桥堆2w10;7805
目 录
1.设计背景……………………………………………………1 2.设计方案……………………………………………………1 2.1原理图设计方案…………………………………………1 2.2程序设计方案……………………………………………2 3.方案实施……………………………………………………3 3.1原理图设计方案的实施…………………………………………3 3.2程序设计方案的实施……………………………………………9 4.结果与结论……………………………………………………11 4.1设计的结果……………………………………………11 4.2设计的结论和心得体会……………………………………11 5.收获与致谢……………………………………………………12 6.参考文献……………………………………………………12 7附录……………………………………………………13 7.1附录一……………………………………………………13 7.2附录二……………………………………………………14
1. 设计背景
MCS-51系列单片机有4个并行口(P0,P1,P2,P3口),但对一个稍微复杂的应用系统来说,真正可供用户使用的并行口数量是有限的,况且常常因扩展I2C和SPI的器件需占用某些并行口,这就迫使我们不得不扩展并行口以满足实际的需要。在RXD和TXD没被使用的情况下,可以利用RXD和TXD端口和移位寄存器74LS164将串行口扩展为多组八位的并行输出口,这样就可以用本来闲置不用的端口进行并行口的扩展,能充分利用单片机有限的I/O资源,并扩展了并行口的数量。 单片机的应用越来来越广泛,上述扩展并行口只是为了单片机更复杂的应用,作为将来的相关技术人员,应该时刻关注单片机的的发展现状和未来的发展趋势,首先先将动手能力和理论知识的结合起来,锻炼动手能力,扎实掌握基础知识,为将来更深入学习和工作做准备。
2.设计方案
2.1原理图设计方案
1.方案比较与选择
AT89C52单片机有4个并行口,当内部并行口不够用时可以外扩并行口芯片。可扩展的的并行口芯片很多,分成两类:不可编程的并行口芯片(74LS64)和可编程并行接口芯片(8255)。将用不可编程的并行口芯片74LS64扩展作为方案一,将用可编程并行接口芯片8255扩展作为方案二。 2.系统框图
根据课程设计要求,作为控制模块的AT89C52单片机要工作需要最小系统,而最小系统由晶振电路部分、复位电路部分和电源模块组成,由于要扩展八位并行输出口必定有扩展部分,作为扩展成功的标志输出显示部分势必不可少的,故系统框图如图2.1
电源
模块
主
输
控
扩 出 模
复位展 显
块 电路 部 示 (AT
分 部 89C5
分
晶振 2)
电路
图2.1 系统框图
3.元器件简介
对AT89C52进行和74LS164进行简介。
4.根据设计要求,依据系统框图用Proteus画原理图。
下面先对Proteus进行一下简介:Proteus的ISIS是一款Labcenter出品的电路分析实物仿真系统,可仿真各种电路和IC,并支持单片机,元件库齐全,使用方便,是不可多得的专业的单片机软件仿真系统。 按下列步骤进行原理图的绘制: (1)新建文件DSN文件;
(2)在元件库中搜索所需的元件,按下列顺序进行绘制 a.完成AT89C52最小系统;
b.经移位寄存器芯片74ls164扩展出8个输出口; c.接八只LED输出显示;
d.由桥堆2w10、7805完成电源电路。放在DSN文件里,按要求接线后保存。
2.2程序设计方案
1.设计程序流程图
根据课题要求,进行分析:(1)单片机工作在串行口方式0则需要对SCON设置,SM0,SM1,必须置0;(2)串行口中断,需要对RI,TI清零;(3)要使LED按不同的顺序依次亮,则需要通过串行口向外依次输出不同的数据;(4)由晶振为11.0592MHZ,频率过高,需要编写延时程序,每次对串行口输出数据后调用,才能够看清设计的结果是否满足课题要求;(5)在程序设计中,需要对程序进行仿真,则要求对仿真软件能很好的把握。
软件设计时,我提出了两种不同的思路:一、对数据输出时,顺序依次编写出输出程序,编写程序时,要多次重复写出送数据到SBUF、调用、延时等程序,在此过程中,需要占用大量的存储空间,且反复书写,冗长单调。二、利用查表法对数据进行输出,把将要输出的数据放在一个TAB表中,依次排列,调用时,让地址依次增加,取得的数据送入SBUF中,这样做,程序简单明了,占用的存储空间比较小。 对此,仅列出第二种思路的流程图。如图2.2:
图2.2程序流程图
2.依据程序流程图用Keil软件设计应用程序,并利用Keil和Proteus级联来验证编写的程序是否符合设计要求。
3. 方案实施
3.1原理图设计方案
1.方案比较与选择
方案一:由AT89C52的串行口RXD输出信息由74ls64的管脚1,2,由TXD输出的脉冲信号与74LS164的CLOCK管脚相连控制74LS164的输出锁存与变换,将转化成并行数据输出到led上显示。如图3.1所示
图 3.1 用74ls164扩展并行输出口
方案二:用P0口作为8255的输入信号,用P2.5和P2.6控制A0和A1作为工作方式控制信号,P2.7作为片选信号,RD与WR和单片机的RD与WR相连,硬件电路连好后,要想使8255工作还需要对8255进行初始化,显然编程比较麻烦,但是8255扩展的并行输出口个数可由工作方式选择,这是其优点。如图3.2所示
图 3.2 用8255扩展并行输出口
本设计中若要用8255将P0口扩展成一个或几个8位并行口,在其中一个八位口上接入8个发光二极管做为输出,即可满足要求;若要用74LS164虽然一片只能扩展八个并行输出口,但也可以用多片74LS164并联来弥补扩展口输出数量的不足,即使扩展三个八位的并行输出口,如图3.3所示也只需要AT 89C52的五个管脚,在并行输出口紧缺的情况时是可取的,另外74LS164为非可编程并行口输出芯片,不需要进行初始化,软件编程比较简单,但是以增加电路复杂度为代价的因此选择方案二。
图 3.3 用74ls164扩展3组并行口
2.元器件简介: (1)AT89C52
AT89C52是一个低功耗,高性能8位单片机,片内含8KB的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统,芯片内集成了通用8位中央处理器和Flash存储单元,功能强大的AT89C52可为许多嵌入式控制应用系统提供高性价比的解决方案。AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,但不可以在线编程(S系列的才支持在线编程)其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。 表3.1 P1口引脚的第二功能
图3.4 AT89C52引脚图
RST: 复位输入。晶振工作时,RST脚持续2 个机器周期高电平将使单片机复位。 ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8 位地址 的输出脉冲;
PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号;
EA/VPP:访问外部程序存储器控制信号。为使能从0000H 到FFFFH的外部程序存储器 读取指令,EA必须接GND。为了执行内部程序指令,EA应该接VCC; XTAL1:振荡器反相放大器和内部时钟发生电路的输入端; XTAL2:振荡器反相放大器的输出端。
(2)74LS164简介
74LS164是一个串入并出的8位移位寄存器 引出端符号:
Q0—Q7 (3,4,5,6,10,11,12,13)并行输出端 ; A,B(1,2)串行输入端;
CLR(9) 清除端,为0时,输出清零;CLK(8) 时钟输入端;
图
3.5 74LS164引脚图
串行输入带锁存,串行输入带缓冲; 最高时钟频率可高达36Mhz
当清除(CLEAR)为低电平时,输出端(QA--Q均为低电平。
输入端A,B为可控数据端,当A、B任意一个为低电平则禁止新数据的输入,在时钟端(CLOCK)脉冲上升沿作用Q0为低电平。当A、B一个为高电平,则另一个就允许输入数据, 并在CLOCK上升沿作用下决定Q0的状态。
表3.3 74ls164
真值表
低电平 高电平 任意电平
3.确定选取方案一之后选取AT89S52、晶振11.0592MHZ、电容、LED指示灯、 74LS164、桥堆2W10、7805、40脚IC插座、万能板、电阻 、按键等器件。 4.设计原理图: (1)时钟电路
晶振全称是晶体震荡器,晶振的作用是为系统提供基本的时钟信号,相当于单片机的心脏,本设计用11.0592MHZ的晶振和两个33uf电容完成时钟电路,如图3.6。
图3.6 时钟电路 (2)复位电路
复位是单片机的初始化操作,只需给MCS-51的复位引脚RST加上大于两个机器周期的高电平,就可使MCS-51复位。复位电路主要有两种:1.上电自动复位 2.按键复位。在设计中,采用按键、两个680欧姆电阻、1000uf电容的按键复位,电路如图3.7。
图3.7复位电路 (3)电源模块
日常用到的都是220V的交流电源,所以需要用变压器、桥堆2w10转换成线路中所用到的直流电源。此转换后的直流电源为+12V,而线路中的芯片工作所需电压是+5V,因此还需要12V到5V的转换电路,此转换采用7805、电容完成,并接电源开关和LED电源指示灯,如图3.8。
图3.8 电源电路
(4)主控部分
主控部分由AT89C52单片机充当,串行输出端口P3.0有SBUF缓冲器,单片机将数
据写入SBUF,然后输出,P3.0有输出的同时P3.1会有脉冲信号,这是由单片机的内部电路决定的。 (5)扩展部分
AT89C52串行口P3.0接移位寄存器芯片74LS164输入端口(1,2)P3.1口给74LS164提供脉冲信号扩展出8位并行输出口,连线如图3.9。
图3.9 74ls164扩展并行输出口 (6)显示模块
74ls164输出口经电阻接八只共阴极LED,当74LS164输出引脚有高电平输出时LED亮,低电平时不亮,作为实现功能的输出显示,如图3.11。
图3.10 LED输出显示
3.2程序设计方案的实施
用Keil设计应用程序:
KeilC51是美国Keil Software公司出品的51系列兼容单片机程序语言软件开发系统Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面,编码效率高。按下列步骤使用Keil进行编程:
(1)Project/New u Vision Project/输入工程名liubing点击保存,选择单片机型号为Atmel/AT89C52,点击OK;
(2)File/New新建完之后再按File/Save输入liubing.asm保存,然后按下列步骤将liubing.Asm添加到liubing工程里,右键点击Source Group 1/Add File to Group ‘Source Group 1’/liubing.Asm/Add; (3)在asm文件里用汇编语言编写下列程序 org 100h
;程序起始地址
mov sbuf,#0 ;将SBUF初始化为零 clr p3.0
;将P3.0初始化
start:mov r7,#0ch ;令r7=12 mov dptr,#tab
;查表
mov r0,#00h ;令r0=0 mov scon,#00h
;设置串行口为方式0
send:mov a,r0 ;从表头开始查表
movc a,@a+dptr
mov sbuf,a
;将查表所得值移入串行口缓存器
wait:jnb ti,wait ;当串口传数据时一直等待 clr ti
;当串口传完数据后将发送标志位清零
lcall delay ;调用延时子程序 inc r0
;r0自加一
djnz r7,send ;循环12次查表,在led上输出
ajmp start ;循环十二次之后,重新开始执行 delay: mov r4,#20 ;令r4=20 del0:mov r6,#255 del1:mov r5,#255
;令r6=255 ;令r5=255
del2:djnz r5,del2 ;del2循环255次 djnz r6,del1 ;del1循环255次
djnz r4,del0 ;del1循环20次 ret
tab:db 3ch,78h,3ch,1eh;led输出表 db 0fh,1eh,0f0h,78h
db 00h,0ffh,00h,0ffh
end
(4)执行,若有错误会提示出现错误处,对程序进行修改,直至程序正确之后,进行相关设置会生成HEX文件。
(5)双击DSN文件里AT89C52,选择Keil生成的hex文件,点击运行,对程序和软件进行调试。
4. 结果与结论
4.1设计的结果
经过我们小组同学的集体努力和指导老师的指导后完成了实物电路的焊接,焊接完之后又仔细检查电路的连接,由于没有变压器,用手机充电器直接当直流+5V电源,接在7805的输出引脚上,接通电源之后电源指示灯和八个输出显示LED闪亮一下就一直不亮了,后经检查电源开关接错,导致芯片没有电源,电源开关经修改后通电,但是接通电源之后只有两个LED亮,然后直接用+5V电源经电阻后连在LED上,但仍然是原来的两个LED亮,检查LED焊接正常之后,初步判断LED烧坏,用好的LED替换之后,接上电源之后八个输出LED闪亮一下不亮了,断电之后重新接电源,仍然闪亮一下不亮了,再次检查电路之后,没有发现问题,现在只能怀疑AT89C52损坏,于是换了一片,烧进程序后,使8个LED每4个为一组,亮灯从中间开始向左移动一次,再从中间开始向右移动一次,接着从最右端向中间移动一次,再从最左端向中间移动一次,然后闪烁两次,不断循环,实现了所要求的功能。为什么芯片和LED会损坏,现在怀疑刚开始的时候是不是电源电压过高,用万用表测量电源电压大概为+12V,而引线是从7805之后输出的,所以芯片和LED才会烧坏,至此实现了课程设计所要求实现的任务,并明白了中间出现错误的原因。
4.2设计的结论和心得体会
通过这次单片机实习,我们小组完成的实物电路板完全实现了任务书预期的要求。在实习的过程中也遇到了很多麻烦:第一,编写程序时感到知识不熟练不能熟悉地写出
程序,而且没有编程的思想,经我们多方查阅资料,分析相关例子,并在一起研究探讨以及和指导老师的指导矫正最终完成了程序;第二,在焊接过程中由于长时间没有进行焊接而使焊接的结果不是很美观,要焊接的芯片引脚太多太乱而感到无处下手,尤其是74LS164不尽管脚多而且小;第三,由于第一次使用万能板焊接元器件排线比较乱;尽管麻烦很多最终还是完成了电路板的焊接和调试,达到了预期要求。
虽然设计的电路图不是太复杂也不是太实用,但是在这过程中遇到了很多问题,说明自己的理论知识和动手能力欠缺,所以要加强理论知识的学习和增强动手实践的能力。
在实际电路中,电路的复杂度,制作所需的生产成本,对整个电路元器件的选择等问题还值得我们进一步研究和探讨。
5.收获与致谢
由于我们小组所做的课程设计比较简单,再把题目发下来的当天就把原理图和程序写完了,并且在PROTEUS上仿真成功,然后就等着发元件进行焊接,觉得实习报告是焊接之后的事,所以也没有写,可是焊接和调试所用的时间太多,致使没有充足的时间写实习报告,所以觉得应该好好安排实习的时间,毕竟学校安排两周的实习,是通过多年的教学经验得来的。
这段时间的实习,通过实习加深了对理论知识的理解,同时发觉自己理论知识的不足,同时还深刻感受到了理论联系实际的重要性,通过实践可让理论知识更加系统化,为今后的学习工作打下了基础。我相信这次实习会对我有积极的影响。
在这里,首先我要感谢学校能给予我们这次设计机会以及给予我们莫大的物质支持;其次,我要感谢我的指导老师和我的同学对我的无私帮助;最后,我要感谢我们的小组同学,由于我们在实习过程中的通力合作,我们能非常愉快和顺利的完成设计。
6.参考文献
[1] 杜尚丰.CAN总线测控技术及其应用.北京:电子工业出版社,2007.1
[2] 杜树春.单片机C语言和汇编语言混合编程实例详解.北京:北京航空航天大学出版社,2006.6 [3] 张毅刚.单片机原理及应用.北京:高等教育出版社,2003.12
[4] 徐爱钧.智能化测量控制仪表原理与设计.北京:北京航空航天大学出版社,2007.8 [5] 于永,戴佳,常江.51单片机实例精讲.北京:电子工业出版社,2006.4 [6] 朱宇光.单片机应用新技术教程.西安:电子工业出版社,2004.
7.附录
7.1 附录一
表7.1 元器件清单
7.2 附录二
图7.2 仿真电路图