8051单片机实验
- 格式:ppt
- 大小:1.35 MB
- 文档页数:133


【1. 实验目的和要求】
(1)掌握采用Keil uVision集成开发环境下单片机程序的编辑、编译、连接方法;
(2)掌握Keil uVision集成开发环境与Proteus仿真软件的联调;
(3)掌握单片机最小系统的仿真设计;
【2. 实验工具与软件】
计算机、Keil uVision4集成开发环境、Proteus 8 Professional仿真软件
【3.主要原理和方法步骤】
(1) 任务说明
➢ 完成8051最小系统仿真原理图设计;并在最小系统基础上完成2个独立按键与8个发光二极管的驱动电路设计;
➢ 编写测试程序,实现按键控制循环点亮8个灯,时间间隔约1秒。
(2) 仿真电路原理图
(3) 程序流程图
(4) 实例代码及注释分析
#include "reg51.h"
sbit S0=P1^0; //数据IO口设置
sbit S1=P1^1;
unsigned char flag; //设置flag标志位,表示哪一个按键被按下
unsigned char step; //设置step标志位,表示需要显示的二极管位码
unsigned char code D[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //发光二极管的段码
void delay_ms(unsigned int ms) //ms延时函数(******************){
unsigned int i;
while(ms--)
for(i = 0; i < 110; i++);
}
void main(void) //主函数
{
unsigned char i;
while(1)
{
for(i=1;i<=20;i++) //对延时1S的时间进行划分,多次检测按键是否按下,以提高按键灵敏度
{
if(S0==0)
计数器实验报告
㈠ 实验目的
1.学习单片机内部定时/计数器的使用和编程方法;
2.进一步掌握中断处理程序的编程方法。
㈡ 实验器材
1.G6W仿真器一台
2.MCS—51实验板一台
3.PC机一台
4.电源 一台
5.信号发生器一台
㈢ 实验内容及要求
8051内部定时计数器,按计数器模式和方式1工作,对P3.4(T0)引
脚进行计数,使用8051的T1作定时器,50ms中断一次,看T0内每50ms
来了多少脉冲,将计数值送显(通过LED发光二极管8421码来表示),1
秒后再次测试。
㈣ 实验说明
1.本实验中内部计数器其计数器的作用,外部事件计数器脉冲由P3.4引
入定时器T0。单片机在每个机器周期采样一次输入波形,因此单片机
至少需要两个机器周期才能检测到一次跳变,这就要求被采样电平至
少维持一个完整的机器周期,以保证电平在变化之前即被采样,同时
这就决定了输入波形的频率不能超过机器周期频率。
2.计数脉冲由信号发生器输入(从T0端接入)。
3.计数值通过发光二极管显示,要求:显示两位,十位用L4~L1的8421
码表示,个位用L8~L5的8421码表示
4.将脉搏检查模块接入电路中,对脉搏进行计数,计算出每分钟脉搏跳动
次数并显示
㈤ 实验框图(见下页)程序源代码
ORG 00000H
LJMP MAIN
ORG 001BH ;T0的中断入口地址
AJMP MAIN1
MAIN:
MOV SP,#60H
MOV TMOD,#15H ;设置T1做定时器,T0做计数器,都于方式1工作
MOV 20H,#14H ;装入中断次数
MOV TL1,#0B0H ;装入计数值低8位
MOV TH1,#3CH ;装入计数值高8位
MOV TL0,#00H 计数器主程序框图
中断返回恢复现场N
Y是否到
1秒?
显示置T1定时常数INT_T1入口
保护现场
清T0计数值
中断服务程序框图开 始
置T0,T1模式及初始值
设置初始常数
开中断
等 待
MOV TH0,#00H
SETB TR1 ;启动定时器T1
实验二:8051单片机的输出电路设计与仿真
一、实验目的
1.学习8051单片机的输出电路设计与仿真方法;
2.掌握8051单片机的基本电路的设计方法;
3.掌握利用8051的输出端口驱动LED的方法;
3.学习Multisim 的单片机仿真方法
二、设计原理 1.89051的基本电路
单片机控制系统的设计,都是基于单片机的基本电路展开的。图1是
89S51单片机的基本电路,由图可见,89S51单片机的基本电路包括四个
组成部分: ⑴电源 单片机的40脚接Vcc(+5V),20 脚接地。
⑵时钟 89S51内部已具有时钟振荡电路,只要在18、19引脚连接
石英震荡晶体即可。石英的震荡频率一般采用12MHz。
⑶复位电路 第9脚为复位引脚,当此引脚连接高电平超过2个机器
周期时,即可产生复位动作。电源接上瞬间,电容器相当于短路,这时
单片机执行复位动作。随着时间的增加,第9脚上的电压逐渐下降,当
降至低电平时,89S51恢复正常状态,这个过程称为“自动复位”。通
常会在电容器两端并接一个按钮开关,此按钮开关就是一个手动的复位
开关。
⑷存储器设置电路 如果把31引脚接地,则采用外部存储器;如果
把31引脚接电源,则采用内部存储器。
2.驱动LED
LED为发光二极管,其特点是反向不导通;正向电压超过发光二极
管的开启电压时,导通并且发光;LED的导通电压为1.7V。LED导通后,
通过增加正向电流,LED将更亮,但其寿命将缩短。因此,LED的正向电
流以10 mA ~20mA为宜。但是从单片机P口输出的电流一般都小于10
mA,而从外部输入单片机的电流,却易于控制在10 mA ~20mA。因此LED
在单片机的P口采用反向连接,即相对于LED来说,从单片机P口流出的
电流为反向电流,从外部流向单片机的电流为正向电流。这样,当单片
机P口的输出为低电平时,与P口相连接的LED导通,发光。
三、设计内容
用Multisim11设计一个用单片机P2口驱动LED发光的电路。这个电
单片机实验数据传送和排序
一、实验目的
1.掌握8051内部RAM和外部RAM之间的数据传送方法;
2. 熟悉51 单片机指令系统,掌握数的大小的排序方法,掌握程序设计方法。
二、实验设备:
CPU挂箱、8031CPU模块
三、实验内容:
编写并调试一个排序子程序,其功能为用冒泡法将外部RAM 中N 个单元字节无符号的正整数,按从小到大的次序重新排列。
四、实验步骤:
在外部RAM 6000H—6009H 中放入不等的10 个数据,运行本实验程序后,检查6000H—6009H中内容是否按从小到大的排列。
五、画出程序流程图
六、程序清单
程序流程图如下:
开始
no
yes
程序如下:
#include
unsigned char xdata a[10] _at_ 0x6000;
unsigned char b[]={0x26,0x43,0x41,0x12,0x75,0x72,0x31,0x33,0x64,0x27};
void main()
{
int i,j,t;
for(i=0;i<10;i++)
{
a[i]=b[i];
}
for(i=0;i<10;i++)
for(j=0;j<10-i;j++)
if(a[j]>a[j+1])
{
t=a[j]; 声明数组及首地址
定义数组并输入十个数
a[i]>a[i+1]?
a[i]存入地址中 a[i]=a[i+1]
结束 a[j]=a[j+1];
a[j+1]=t;
}
}
实验心得:
通过这次单片机实验,我学会了运用Keil写一些简单的C51程序,如何在Keil上进行软件仿真,运用冒泡法对数组的进行排列。总的来说这次实验我获益良多。