单片机实验指导书.docx
- 文档编号:8957745
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:89
- 大小:553.30KB
单片机实验指导书.docx
《单片机实验指导书.docx》由会员分享,可在线阅读,更多相关《单片机实验指导书.docx(89页珍藏版)》请在冰豆网上搜索。
单片机实验指导书
第3章MCS-51单片机内部资源应用实验
3.1MCS-51并行口实验
一、实验目的
1.学习KEIL软件的程序调试方法。
2.学会KEILC程序设计及调试,重点学会预处理命令、数据类型的定义。
二、实验内容
1.单片机P2口的P20和P21各接一个开关K1、K2,P34、P35、P36和P37各接一只发光二极管。
由K1和K2的不同状态来确定发光二极管的点亮。
K2
K1
亮的二极管
0
0
L1
0
1
L2
1
0
L3
1
1
L4
2.设计一个二进制加1计数器,按一次键,加1,并用4个LED显示计数结果,加至16时清零重新计数。
三、实验步骤
1.设计实验电路,画出电路原理图
2.按照KEIL软件的使用步骤,建立工程。
3.编写程序,保存文件,将源程序文件加载到工程中,当编译通过之后生成HEX文件。
4.用STC-ISP下载软件下载HEX文件到单片机系统。
5.运行、调试程序,观察实验结果。
四、实验参考电路及参考程序
1.实验1
#include
sbitk1=P2^0;
sbitk2=P2^1;
voidmain()
{
while
(1)
{
if(k1==0&k2==0)
{
P3=0xef;
}
if(k1==1&k2==0)
{
P3=0xdf;
}
if(k1==0&k2==1)
{
P3=0xbf;
}
if(k1==1&k2==1)
{
P3=0x7f;
}
}
}
2.实验2
#include
sbitkey=P3^2;
unsignedchara;
unsignedcharcount=0;
voiddelay(unsignedintxms)
{
unsignedinti,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
voidmain()
{
while
(1)
{
if(key==0)
{
delay(10);
if(key==0)
{
count++;
while(!
key);
if(count==16)
count=0;
a=count;
a=a<<4;
a=~a;
P3=a;
}
}
}
}
五、思考题
1.设计一个二进制减1计数器,按一次键,减1,并用4个LED显示计数结果,减至0时,重新从15开始计数。
2.用1个按键控制LED的显示,要求显示3种以上的不同模式。
3.2MCS-51中断系统实验
一、实验目的
1.掌握单片机的中断系统,学会单片机中断系统的初始化。
2.学会单片机外部中断的应用。
二、实验内容
1.采用外部中断的方式实现按键控制1个LED的亮灭。
2.采用外部中断的方式实现4个LED的轮流亮灭。
三、实验步骤
1.设计实验电路,画出电路原理图
2.按照KEIL软件的使用步骤,建立工程。
3.编写程序,保存文件,将源程序文件加载到工程中,当编译通过之后生成HEX文件。
4.用STC-ISP下载软件下载HEX文件到单片机系统。
5.运行、调试程序,观察实验结果。
四、实验参考电路和参考程序
1.实验1
#include
sbitP34=P3^4;
voidmain()
{
IT0=1;//外部中断0连沿触发方式
EX0=1;//使能外部中断0
EA=1;//开部中断
P34=0;//指示灯初始为亮
while
(1);
}
voidint0()interrupt0//外部中断0程序入口
{
P34=!
P34;
}
2.实验2
#include
sbitP32=P3^2;
voidmain()
{
IT0=1;//外部中断0连沿触发方式
EX0=1;//使能外部中断0
EA=1;//开部中断
while
(1);
}
voidint0()interrupt0//外部中断0程序入口
{
staticunsignedcharBit=0;
if(Bit>=4)
Bit=0;
switch(Bit)
{
case0:
P3=0xef;break;
case1:
P3=0xdf;break;
case2:
P3=0xbf;break;
case3:
P3=0x7f;break;
}
Bit++;
}
五、思考题
1.采用外部中断的方式实现一个二进制减1计数器,按一次键,减1,并用4个LED显示计数结果,减至0时,重新从15开始计数。
2.采用外部中断的方式实现用1个按键控制LED的显示,要求显示3种以上的不同模式。
3.3MCS-51定时器/计数器实验
一、实验目的
1.掌握单片机的中断系统、定时器的工作原理。
2.学会单片机中断系统、定时器的应用。
二、实验内容
1.采用单片机定时器实现1个LED的亮灭,周期为1s。
2.采用单片机定时器实现实现4个LED的轮流亮灭,每个LED点亮时间为1s。
三、实验步骤
1.设计实验电路,画出电路原理图
2.按照KEIL软件的使用步骤,建立工程。
3.编写程序,保存文件,将源程序文件加载到工程中,当编译通过之后生成HEX文件。
4.用STC-ISP下载软件下载HEX文件到单片机系统。
5.运行、调试程序,观察实验结果。
四、实验参考电路和参考程序
1.实验1
#include
#defineTHC00xee
#defineTLC00x00
sbitled0=P3^4;
voidmain()
{
TMOD=0x01;
TH0=THC0;
TL0=TLC0;
TR0=1;
ET0=1;
EA=1;
while
(1);
}
voidtimer0_ISR(void)interrupt1
{
staticunsignedcharcount=0;
TL0=TLC0;
TH0=THC0;
count++;
if(count>=200)
{
count=0;
led0=!
led0;
}
}
2.实验2
#include
#defineTHC00xee
#defineTLC00x00
voidmain()
{
TMOD=0x01;
TL0=TLC0;
TH0=THC0;
TR0=1;
ET0=1;
EA=1;
while
(1);
}
voidtimer0_ISR(void)interrupt1
{
staticunsignedcharcount=0,Bit=0;
TL0=TLC0;
TH0=THC0;
count++;
if(count>=200)
{
count=0;
if(Bit>=4)
Bit=0;
P2=P2|0x78;
switch(Bit)
{
case0:
P3=0xef;break;
case1:
P3=0xdf;break;
case2:
P3=0xbf;break;
case3:
P3=0x7f;break;
}
Bit++;
}
}
五、思考题
1.设计1个秒计数器,每秒计1次数,在LED上显示出来,计至16清零后重新计数。
2.在上题基础上用按键控制秒计数器的启停,按一次键开始计数,按2次停止计数,按3次又开始计数…。
3.4基于RS232串行口通信实验
1、实验目的
1.通过串口实现单片机与PC机的数据通信。
2.了解下位机与上位机通讯过程。
二、实验内容
使用串口实现单片机与PC机的数据通信。
运用串口中断,在PC机的“串口调试助手”上向单片机发送共阴极数码管的段码,在数码管上显示出对应的数值或字母,并将段码返回到PC机的“串口调试助手”显示出来。
三、实验步骤
1.设计实验电路,画出电路原理图
2.按照KEIL软件的使用步骤,建立工程。
3.编写程序,保存文件,将源程序文件加载到工程中,当编译通过之后生成HEX文件。
4.用STC-ISP下载软件下载HEX文件到单片机系统。
5.运行、调试程序。
6.运行“串口调试助手”观察实验结果。
四、串行口的概述
串行接口 (SerialInterface)是指数据一位一位地顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。
一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯。
串行通讯的特点是:
数据位的传送,按位顺序进行,最少只需一根传输线即可完成;成本低但传送速度慢。
串行通讯的距离可以从几米到几千米;根据信息的传送方向,串行通讯可以进一步分为单工、半双工和全双工三种。
单片机串行接口是一个可编程的全双工串行通信接口。
它可用作异步通信方式(UART),与串行传送信息的外部设备相连接,或用于通过标准异步通信协议进行全双工的多机系统也能通过同步方式,使用TTL或CMOS移位寄存器来扩充I/O口。
单片机通过管脚RXD(P3.0,串行数据接收端)和管脚TXD(P3.1,串行数据发送端)与外界通信。
SBUF是串行口缓冲寄存器,包括发送寄存器和接收寄存器。
它们有相同名字和地址空间,但不会出现冲突,因为它们两个一个只能被CPU读出数据,一个只能被CPU写入数据。
串行口内部结构:
串行口控制寄存器SCON:
scon控制寄存器,它是一个可位寻址的专用寄存器,用于串行数据的通信控制,单元地址是98H,其结构格式如下:
SCON
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
位地址
9FH
9EH
9DH
9CH
9BH
9AH
99H
98H
各控制位功能介绍如下:
1.SM0、SM1:
串行口工作方式控制位
工作方式选择:
SM0
SM1
工作方式
0
0
方式0
0
1
方式1
1
0
方式2
1
1
方式3
2.SM2:
多机通信控制位
多机通信工作于方式2和方式3,故SM2位主要用于方式2和方式3。
在接收状态,当串行口工作于方式2或3,以及SM2=1时,只有当接收到第9位数据(RB8)为1时,才把接收到的前8位数据送入sbuf,且置位RI发出中断申请,否则会将接受到的数据放弃。
当SM2=0时,就不管第9位数据是0还是1,都得将数据送入sbuf,并发出中断申请。
即此时RI是否置位由SM2和RB8共同决定。
工作于方式0时,SM2必须为0。
3.REN:
允许接收位
REN用于控制数据接收的允许和禁止,REN=1时,允许接收,REN=0时,禁止接收。
4.TB8:
发送接收数据位8
在方式2和方式3中,TB8是要发送的——即第9位数据位。
在多机通信中同样亦要传输这一位,并且它代表传输的地址还是数据,TB8=0为数据,TB8=1时为地址。
5.RB8:
接收数据位8
在方式2和方式3中,RB8存放接收到的第9位数据,用以识别接收到的数据特征。
6.TI:
发送中断标志位
可寻址标志位。
方式0时,发送完第8位数据后,由硬件置位,其它方式下,在发送或停止位之前由硬件置位,因此,TI=1表示帧发送结束,TI可由软件置0。
7.RI:
接收中断标志位
可寻址标志位。
接收完第8位数据后,该位由硬件置位,在其他工作方式下,该位由硬件置位,RI=1表示帧接收完成。
特殊功能寄存器PCON:
PCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器,在51单片机中单元地址是87H,PCON特殊功能寄存器结构:
PCON
D7
D6
D5
D4
D3
D2
D1
D0
位符号
SMOD
SMOD0
LVDF
POF
GF1
GF0
PD
IDL
SMOD:
该位与串口通信有关。
SMOD=0;串口方式1,2,3时,波特率正常。
SMOD=1;串口方式1,2,3时,波特率加倍。
五、实验参考电路和参考程序
1.参考电路
2.参考程序
#include
unsignedcharflag,a;
sbitP24=P2^4;
sbitP25=P2^5;
sbitP26=P2^6;
sbitP27=P2^7;
voidmain()
{
TMOD=0x20;//设置定时器1为工作方式2
TH1=0xfd;
TH1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
while
(1)
{
if(flag==1)
{
ES=0;
flag=0;
SBUF=a;
while(!
TI);
TI=0;
ES=1;
}
}
}
voidser()interrupt4
{
RI=0;
P2=0xf0;
P0=SBUF;
a=SBUF;
P24=0;P25=0;P26=0;P27=0;
flag=1;
}
六、思考题
4.1独立式按键和数码管显示实验
一、实验目的
1.掌握单片机的按键、数码管显示器的工作原理。
2.学会单片机独立式按键、数码管显示器的应用。
二、实验内容
1.在一个数码管上显示字符“1”。
2.在4个数码管上显示字符“1”、“2”、“3”、“4”。
3.设计一个2位10进制计数器,每秒加1,在LED上显示。
三、实验步骤
1.设计实验电路,画出电路原理图
2.按照KEIL软件的使用步骤,建立工程。
3.编写程序,保存文件,将源程序文件加载到工程中,当编译通过之后生成HEX文件。
4.用STC-ISP下载软件下载HEX文件到单片机系统。
5.运行、调试程序,观察实验结果。
四、实验参考电路和参考程序
1.参考电路
2.参考程序
#include"reg52.h"
#defineTHCO0xee
#defineTLCO0x0
unsignedcharcodeDuan[]={0x3F,0x06,0x5B,0x4F,0x66,
0x6D,0x7D,0x07,0x7F,0x6F};
//共阴极数码管,0-9段码表
unsignedcharData_Buffer[4]={1,2,3,4};
//四个数码管显示数值,数组变量定义
sbitP24=P2^4;//四个数码管的位码口定义
sbitP25=P2^5;
sbitP26=P2^6;
sbitP27=P2^7;
voidmain()
{
TMOD=0x11;//定时器0初始化
TH0=THCO;
TL0=TLCO;
TR0=1;
ET0=1;
EA=1;
while
(1);
}
voidtimer0()interrupt1
{
staticunsignedcharBit=0;
//静态变量,退出程序后,值保留
TH0=THCO;
TL0=TLCO;
Bit++;
if(Bit>=4)Bit=0;
P2=0xf0;//先关位码
P0=Duan[Data_Buffer[Bit]];//开段码
switch(Bit)//送位码
{
case0:
P24=0;break;
case1:
P25=0;break;
case2:
P26=0;break;
case3:
P27=0;break;
}
}
五、思考题
用按键进行显示模式选择键,实现上述实验中3个显示画面的切换。
4.2矩阵键盘实验
一、实验目的
1.掌握单片机的矩阵键盘的工作原理和使用方法。
2.认识单片机独立按键与矩阵键盘的区别。
二、实验内容
1.独立按键
独立按键与单片机连接时,每一个按键都需要一个独立的I/O口,若某单片机系统需要较多按键,如果使用独立按键便会占用较多的I/O口资源。
单片机系统中I/O口资源往往比较宝贵,当用到多个按键时,为了节省I/O口,我们引入矩阵键盘。
2.矩阵键盘
我们以4x4矩阵键盘为例讲解其工作原理和检测方法。
将16个按键排成4行4列,第一行将每个按键的一段连接在一起构成行线,第一列将每个按键的另外一段连接在一起构成列线,这样一共有4行4列共8根线,我们将这8根线连接到单片机的8个I/O上,通过程序扫描键盘就可以检测到16个键。
通过这种方法我们也可以实现5行5列25个键、6行6列36个键等。
3.按键的特点与去抖
机械式按键在按下或释放时,由于机械弹性性作用的影响,通常伴随有一定时间的机械抖动,然后其触点才稳定下来。
在抖动期间检测按键的通与断状态,可能导致判断出错。
即按键一次按下或释放被错误地认为是多次操作,这种情况是不允许出现的。
为了克服按键机械抖动所导致的检测错误,必须采取去抖动措施,可从硬件、软件两方面予以考虑。
一般来说,在键数较少时,可采用硬件去抖,而当键数较多时,采用软件去抖。
4、实验参考电路和参考程序
1.参考电路
2.参考程序
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitP24=P2^4;//四个数码管的位码口定义
sbitP25=P2^5;
sbitP26=P2^6;
sbitP27=P2^7;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
voiddelay(uintxms)
{
uinti,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
voiddisplay(ucharnum)
{
P0=table[num];
P24=1;P25=1;P26=1;P27=1;
}
voidmatrixkeyscan()
{
uchartemp,key;
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!
=0xf0)
{
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!
=0xf0)
{
temp=P3;
switch(temp)
{
case0xee:
key=0;break;
case0xde:
key=1;break;
case0xbe:
key=2;break;
case0x7e:
key=3;break;
}
while(temp!
=0xf0)//等待并确认按键释放
{
temp=P3;
temp=temp&0xf0;
}
display(key);//显示按键所表示的数字
}
}//第一排按键检测
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!
=0xf0)
{
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!
=0xf0)
{
temp=P3;
switch(temp)
{
case0xed:
key=4;break;
case0xdd:
key=5;break;
case0xbd:
key=6;break;
case0x7d:
key=7;break;
}
while(temp!
=0xf0)//等待并确认按键释放
{
temp=P3;
temp=temp&0xf0;
}
display(key);//显示按键所表示的数字
}
}//第二排按键检测
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!
=0xf0)
{
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!
=0xf0)
{
temp=P3;
switch(temp)
{
case0xeb:
key=8;break;
case0xdb:
key=9;break;
case0xbb:
key=10;break;
case0x7b:
key=11;break;
}
while(temp!
=0xf0)//等待并确认按键释放
{
temp=P3;
temp=temp&0xf0;
}
display(key);//显示按键所表示的数字
}
}//第三排按键检测
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!
=0xf0)
{
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!
=0xf0)
{
temp=P3;
switch(temp)
{
case0xe7:
key=12;break;
case0xd7:
key=13;break;
case0xb7:
key=14;break;
case0x77:
key=15;break;
}
while(temp!
=0xf0)//等待并确认按键释放
{
temp=P3;
temp=temp&0xf0;
}
display(key);//显示按键所表示的数字
}
}//第四排按键检测
}
voidmain()
{
P0=0;
P24=0;P25=0;P26=0;P27=0;
while
(1)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 指导书