微机原理课程设计.docx
《微机原理课程设计.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计.docx(13页珍藏版)》请在冰豆网上搜索。
微机原理课程设计
微机计算机原理及应用课程设计报告
——基于AT89S51的手动计数器
姓 名
学 号
班 级 电子
(1)班
指导教师
宿迁学院三系电工电子教研室
二○一○年十二月
第一章前言
1.1背景
课程设计的主要目的是提高实践能力,包括对硬件的理解分析能力和汇编语言的编程能力。
与其他课程不同的是,本课程对硬件有较高的依赖性,因此课程设计的灵活性受到了一定的限制,最好有相应的实验平台支持(尤其是硬件部分),本次课程设计主要是培养我们的动手解决问题的能力,编程语言可以使用会汇编或C语言。
1.2基本功能要求
利用AT89S51芯片来制作一个简易的手动计数器,在AT98S51的P3.7引脚接一个轻触开关,作为手动计数器的开关,用单片机的P2.0~P2.7接一个共阴极数码管作为00~99计数的各位,P0.0~P0.7接一个共阴极数码管作为00~99计数的十位。
引脚功能说明
●VCC:
电源电压
●GAD:
地
●P0口:
P0口是一组8位漏极开路型双向I/O口,也既地址/数据总线复用口。
作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“1”可作位高阻抗输入端用。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
在FLASH编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
●P1口:
P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(I)。
FLASH编程和程序校验期间,P1接收低8位地址。
端口引脚
第二功能
P1.5
MOSI(用于ISP编程)
P1.6
MISO(用于ISP编程)
P1.7
SCK(用于ISP编程)
●P2口:
P2是一个带内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(I)。
在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@Ri指令)时,P2口线上的内容(也即特殊功能寄存器(SFR)区中P2寄存器的内容),在整个访问期间不改变。
FLASH编程或校验时,P2亦接收高位地址和其它控制信号。
●P3口:
P3是一组带有内部上拉电阻的8位双向I/O口。
P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对P3口写入“1”时,它们被内部上拉电阻拉高并可作位输入端口。
作输入端时,被外部拉低的P3口将用上拉电阻输出电流。
P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如下表示:
P3口还接收一些用于FLASH闪速存储器编程和程序校验的控制信号。
端口引脚
第二功能
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
(外部中断0)
P3.3
(外部中断1)
P3.4
T0(定时/计数器0)
P3.5
T1(定时/计数器1)
P3.6
(外部数据存储器写选通)
P3.7
(外部数据存储器读选通)
RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
WDT溢出将使引脚输出高电平,设置SFRAUXR的DISRTO位(地址8EH)可打开或关闭功能。
DISRTO位缺省为RESET输出高电平打开状态。
ALE/
:
当访问外部程序存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
即使不访问外部存储器,ALE仍以时钟振荡频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。
要注意的是:
每当访问外部数据存储器时将跳过一个ALE脉冲。
对FLASH存储器编程期间,该引脚还用于输入编程脉冲(
)。
如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元D0位置位,可禁止ALE操作。
该位置位后,只有一条MOVX和MOVC指令ALE才会被激活。
此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效。
:
程序储存允许(
)输出是外部程序存储器的读选通信号,当AT89S51由外部程序存储器取指令(或数据)时,每个机器周期两次
有效,即输出两个脉冲。
当访问外部数据存储器,没有两次有效的
信号。
EA/VPP:
外部访问允许。
欲使CPU仅访问外部程序存储器(地址为0000H—FFFFH),EA端必须保持低电平(接地)。
需注意的是:
如果加密位LB1被编程,复位时内部会锁存EA端状态。
FLASH存储器编程时,该引脚加上+12V的编程电压Vpp。
XTAL1:
振荡器反相放大器及内部时钟发生器的输入端。
XTAL2:
振荡器反相放大器的输出端。
第二章程序设计
2.1题目基本内容
设计题目:
00~99手动计数器
利用AT89S51芯片来制作一个简易的手动计数器,在AT98S51的P3.7引脚接一个轻触开关,作为手动计数器的开关,用单片机的P2.0~P2.7接一个共阴极数码管作为00~99计数的各位,P0.0~P0.7接一个共阴极数码管作为00~99计数的十位。
单片机的共阴极数码管电路
单片机的复位电路
开关电路
2.2系统流程框图
2.3课程设计的具体内容说明
根据课题的要求,硬件部分主要完成一下几方面的设计:
1.把单片机系统区域中的P0.0-P0.7连接到共阴极七段数码管显示模块,A接P0.7,B接P0.6,C接P0.5,D接P0.4,E接P0.3,F接P0.2,G接P0.1,公阴极端CK接P0.0。
2.把单片机系统区域中的P2.0-P2.7连接到共阴极七段数码管显示模块,A接P2.7,B接P2.6,C接P2.5,D接P2.4,E接P2.3,F接P2.2,G接P2.1,公阴极端CK接P2.0。
3.单片机的P3.7口接一个轻触开关。
4.单片机的RST接口接一个复位电路。
5.单片机的XTAL2、XTAL1外接晶振。
根据课题的要求,软件部分主要完成一下几方面的设计:
1.对单片机按键的识别的过程处理
2.对单盘机正确识别的按键进行计数,计数满时又从零开始计数
3.对单片机的数值要进行数码显示,计得的数是十进制,含有十位和各位,我们要把十位和各位拆开分别送出到对应的数码管上显示。
2.4课程设计中关键内容的设计分析
此次课程设计的关键是程序和电路的连接,首先是对于七段数码管的连接,由于要使七段数码管显示0-9的数字,电路和程序要配合才能让数码管正确显示。
开始的时候编写的程序,仿真都出现了错误,七段数码管全部显示乱码(数字显示不完整,或者不显示),后来对程序中数组部分的数值的每位做了测试,如图连接七段数码管时,其对应关系:
七段数码管
芯片引脚
数位
显示
数位
显示
A
P0.7
0
亮
1
灭
B
P0.6
0
亮
1
灭
C
P0.5
0
亮
1
灭
D
P0.4
0
亮
1
灭
E
P0.3
0
亮
1
灭
F
P0.2
0
亮
1
灭
G
P0.1
0
亮
1
灭
CK
P0.0
0
由此推断出下表:
数码管显示数字
二进制表示
十六进制表示
0
00000010
0x02
1
10011110
0x9e
2
00100100
0x24
3
00001100
0x0c
4
10011000
0x98
5
01001000
0x48
6
01000000
0x40
7
00011110
0x1e
8
00000000
0x00
9
00001000
0x08
源程序代码:
#include
voidmain()
{
unsignedshortdisp[]={0x02,0x9e,0x24,0x0c,0x98,0x48,0x40,0x1e,0x00,0x08};
unsignedintcounter=0;//定义变量counter计数
P0=0x02;//初始化数码管显示00
P2=0x02;
while
(1)
{
while
(1)//等待按钮的响应
{
if(1==P3_7)//判断按钮是否被按下
{
while
(1)
{
if(0==P3_7)//等待按钮的弹起
{
counter++;
gotoloop;
}
}
}
}
loop:
P2=disp[(counter%10)];
P0=disp[(counter/10)];
if(99==counter)
{
counter=-1;
}
}
}
使用说明
这次使用了KeilC51软件进行编程,Multisim软件进行了仿真。
由于Multisim中没有AT89S51芯片,所以选用了8051芯片进行了替代。
首先在KeilC51中建立一个新的工程,选择AT89S51芯片,然后新建一个*.c的文本,将程序输入,进行编译连接。
确定程序没有问题之后由程序生成*.hex文件。
之后打开Multisim,找到8051芯片连接电路图,把*.hex程序文件下载到8051芯片中进行仿真。
第三章心得体会
一星期的单片机实习很快结束了,从中学习到了很多,收获的东西也很多。
这次的51单片机实习,对于我们在电子电路的理解是很有帮助。
经过了这次的实习,对于电子信息工程这个专业有了一份新的理解,有了一份新的思考。
它将启发了我对将来的专业课的学习,需要理论联系实际,实际验证理论。
我们专业电子信息是一个工科的专业,强调动手的能力,一切的理论知识都是为了实际操作。
接下来,我将会带着理论和实践并重的想法去学习专业课。
首先,在这里我们也重新认识学习C语言,如何调试,如何解决一些基本的电路问题。
这些东西都是书本上学不到了。
理论上看起来理所当然的问题,到了实际的运用中,就会出现一些问题。
需要我们深入思考并且耐心解决。
其次,这个星期,我们从理论到实践,再由实践验证理论。
经过了一系列的深入思考和探讨。
对于书本的知识,不用说,加深了很多的理解。
对于动手的能力,也有了很大了提高,对于单片机的使用和操作更是多了一份理解。
最后,在实习过程中,同学之间的合作与讨论也是很重要的。
两外我们也要有积极进取的学习与实习态度。
一周的实习让我们对焊接技术有了就进一步的认识与学习。
使我们的焊接技术得到进一步的提高。
像以前经常遇到的问题,有如虚焊等一些问题,我们或多或少的避免了这些。
想相信在以后的工作当中,我们会更加认真,努力地完成每一件事。