单片机实验报告含仿真设计.docx
- 文档编号:5818679
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:26
- 大小:2.56MB
单片机实验报告含仿真设计.docx
《单片机实验报告含仿真设计.docx》由会员分享,可在线阅读,更多相关《单片机实验报告含仿真设计.docx(26页珍藏版)》请在冰豆网上搜索。
单片机实验报告含仿真设计
单片机原理及应用课程
实验报告
专业:
班级:
姓名:
学号:
实验一、keilC51及proteus软件的使用
一、实验目的:
1、掌握keil和proteus软件的基本操作
2、通过具体实例掌握keil和proteus软件的使用。
二、实验原理:
keil使用步骤,proteus使用步骤
三、程序:
四、实验结果分析:
五、总结:
学会了使用keil和proteus软件,掌握了利用keil和proteus软件进行仿真的步骤。
实验二、并行输入/输出接口实验
一、实验目的:
1、进一步熟悉keil仿真软件、proteus仿真软件的使用。
2、了解并熟悉单片机I/O口和LED灯的电路结构,学会构建简单的流水灯电路。
3、掌握C51中单片机I/O口的编程方法和使用I/O口进行输入输出的注意事项。
二、实验原理:
MCS51单片机的串行口在实际使用中通常用于三种情况:
利用方式0扩展并行i/0接口:
利用方式1实现点对点的双机通信;利用方式2或方式3实现多机通信。
利用方式0扩展并行i/0接口MCS51单片机的串行口在方式0时,若外接一个串入并出的移位寄存器,就可以扩展并行输出口;若外接一个并入串出的移位寄存器,就可以扩展并行输入口。
三、程序:
#include
sbitP1_0=P1^0;
voidmain()
{
unsignedchari;
unsignedintj;
SCON=0x00;
i=0x01;
for(;;)
{
P1_0=0;
SBUF=I;
while(!
TI){i}
P1_0=1;TI=0;
for(j=0;j<=254;j++){;}
i=i*2;
if(i==0x00)i=0x01;
}
}
四、实验结果分析:
五、总结:
进一步熟悉了keil仿真软件、proteus仿真软件的使用。
了解并熟悉单片机I/O口和LED灯的电路结构,学会了构建简单的流水灯电路。
掌握了C51中单片机I/O口的编程方法和使用I/O口进行输入输出的注意事项。
实验三、定时器/计数器实验
(1)—查询方式产生500us的方波
一、实验目的:
1、熟悉keil仿真软件、proteus的使用和C51定时程序的编写;
2、了解51单片机中定时、计数的概念,熟悉51单片机内部定时/计数器的结构与工作原理;
3、掌握查询方式处理定时/计数的工作过程,
4、掌握定时/计数器在C51中的设置与程序的书写格式以及使用方法。
二、实验原理:
通常利用定时/计数器来产生周期性的波形。
利用定时/计数器产生周期性波形的基本思想是:
利用定时/计数器产生周期性的定时,定时时间到则对输出端进行相应的处理。
例如产生周期性的方波只需定时时间到对输出端取反一次即可。
不同的方式定时的最大值不同,如定时的时间很短,则选择方式2。
方式2形成周期性的定时不需重置初值;如定时比较长,则选择方式0或方式1;如时间很长,则一个定时/计数器不够用,这时可用两个定时/计数器或一个定时/计数器加软件计数的方法。
三、程序:
#include
sbitP1_0=P1^0;
voidmain()
{
TMOD=0x02;
TH0=0x06;TL0=0x06;
TR0=1;
for(;;)
{
if(TF0){TF0=0;P1_0=!
P1_0;}
}
}
四、实验结果分析:
五、总结:
熟悉了keil仿真软件、proteus的使用和C51定时程序的编写;了解51单片机中定时、计数的概念,熟悉了51单片机内部定时/计数器的结构与工作原理;掌握了查询方式处理定时/计数的工作过程,掌握了定时/计数器在C51中的设置与程序的书写格式以及使用方法。
实验四、定时器/计数器实验
(2)—中断方式产生500us的方波
一、实验目的:
1、熟悉keil仿真软件、proteus的使用和C51定时程序的编写;
2、进一步熟悉51单片机内部定时/计数器的结构与工作原理;
3、掌握中断方式处理定时/计数的工作过程。
二、实验原理
从P1.0输出周期为500us的方波,只需P1.0每250us取反后一次即可。
当系统时钟为12MHz时,定时/计数器TO工作于方式2时,最大的定时时间为256us,满足250us的定时要求,方式控制字应没定为00000010B(02H)。
系统时钟为12Mhz,定时250us,计数值N为250,初值X=256-250=6,则THO=TLO=06H。
:
三、程序:
#include
sbitP1_0=P1^0;
voidmain()
{
TMOD=0x02;
TH0=0x06;TL0=0x06;
EA=1;ET0=1;
TR0=1;
while
(1);
}
voidtime0_int(void)interrupt1
{
P1_0=!
P1_0;
}
四、实验结果分析:
五、总结:
熟悉了keil仿真软件、proteus的使用和C51定时程序的编写;进一步熟悉了51单片机内部定时/计数器的结构与工作原理;掌握了中断方式处理定时/计数的工作过程。
实验五:
串行接口实验
(1)—工作方式0扩展并行IO口
一、实验目的:
1,掌握串行口工作方式0的程序设计;
2、熟悉51单片机串口的结构和工作原理
3、掌握串口工作方式0的工作特点。
二、实验原理:
MCS51单片机的串行口在实际使用中通常用于三种情况:
利用方式0扩展并行i/0接口:
利用方式1实现点对点的双机通信;利用方式2或方式3实现多机通信。
利用方式0扩展并行i/0接口MCS51单片机的串行口在方式0时,若外接一个串入并出的移位寄存器,就可以扩展并行输出口;若外接一个并入串出的移位寄存器,就可以扩展并行输入口。
三、程序:
#include
sbitP1_0=P1^0;
voidmain()
{
unsignedchari;
unsignedintj;
SCON=0x00;
i=0x01;
for(;;)
{
P1_0=0;
SBUF=I;
while(!
TI){i}
P1_0=1;TI=0;
for(j=0;j<=254;j++){;}
i=i*2;
if(i==0x00)i=0x01;
}
}
四、实验结果分析:
五、总结:
掌握了串行口工作方式0的程序设计;熟悉了51单片机串口的结构和工作原理。
掌握了串口工作方式0的工作特点。
实验六:
串行接口实验
(2)—双机通信
一、实验目的:
1、掌握串行口工作方式1的程序设计;
2、进一步掌握51单片机串口的结构和工作原理
3、掌握串口工作方式1的工作特点。
二、实验原理:
甲、乙两机处理过程一样,程序相同。
方式选择方式1:
即8位异步通信方式,波特率为1200bps,既要发送,也要接收,所以串口控制字为50H。
由于选择的是方式1,波特率由定时/计数器TI的溢出率和电源控制寄存器PCON中的SMOD位决定,则需对定时/计数器Tl初始化。
设振荡频率为12MHz,取SMOD=0,波特率为1200bps,定时/计数器T1选择为方式2,则初值如下初值=256一foscx2SMOD/(12×波特率×32)=E6H根据要求,定时/计数器T1的方式控制字为20H。
发送过程采用查询方式,在主程序中读取PI口的开关状态,通过串口发送;接收过程采用中断方式,接收的内容送P2口,通过P2口的发光二极管显示。
三、程序:
#include
voidmain()
{
unsignedchari;
SP=0x60;
SCON=0X50;
TMOD=0x20;
TL1=0xe6;
TH1=0xe6;
TR1=1;
EA=1;
ES=1;
while
(1)
{
P1=0XFF;
i=P1;
SBUF=i;
while(TI==0);
TI=0;
}
}
voidfunins(void)interrupt4
{
EA=0;
RI=0;
P2=SBUF;
EA=1;
}
四、实验结果分析:
五、总结:
掌握了串行口工作方式1的程序设计;进一步掌握了51单片机串口的结构和工作原理,掌握了串口工作方式1的工作特点。
实验七:
中断系统实验
(1)—交通灯模拟控制
一、实验目的
1、掌握单片机外部中断的原理及过程。
2、掌握单片机外部中断程序的设计方法。
3、掌握单片机外部中断时中断方式的选择方法。
二、实验原理:
交通灯正常运行时,可分为4个状态:
状态1,东西方向绿灯,南北方向红灯20秒,状态编码“00100001”;状态2,东西方向黄灯,南北方向红灯3秒,状态编码“01000001”;状态3,南北方向绿灯,东西方向红灯20秒,状态编码“00010010”状态4,南北方向黄灯,东西方向红灯3秒,状态编码“0001m00”。
东西发生异常时,
东西通行,南北禁止,东西方向绿灯闪,南北方向红灯闪60秒;南北发生异常时,南北通行,东西禁止,南北方向绿灯闪,东西方向红灯闪60秒。
主程序中实现交通灯正常运行过程,两种异常用外中断0和外中断1管理,外接开关模拟异常发生,在中断服务程序中实现异常处理,在主程序中开放外中断0和外中断1,设置为边沿触发方式。
时间单位采用500ms信号,由定时计数器0定时50ms,循环10次产生,定时计数器0采用查询方式,主程序中设定定时计数器0的工作方式:
方式1。
三、程序:
#include
voiddelay500ms(unsignedchark);
voidmain(void)
{
SP=0x60;
TMOD=0x01;
IE=0x85;
TCON=0x05;
while
(1)
{
P1=0x21;
delay500ms(40);
P1=0x41;
delay500ms(6);
P1=0x12;
delay500ms(40);
P1=0x14;
delay500ms(6);
}
}
voidint_0(void)interrupt0
{
unsignedchari1,i2;
i1=P1;
for(i2=0;i2<60;i2++)
{
P1=0x21;
delay500ms
(1);
P1=0x00;
delay500ms
(1);
}
P1=i1;
}
voidint_1(void)interrupt2
{
unsignedcharj1,j2;
j1=P1;
for(j2=0;j2<60;j2++)
{
P1=0x12;
delay500ms
(1);
P1=0x00;
delay500ms
(1);
}
P1=j1;
}
voiddelay500ms(unsignedcharm)
{
unsignedchark1,k2;
TH0=0x3C;TL0=0xB0;
TR0=1;
for(k1=0;k1 { for(k2=0;k2<10;k2++) { while(! TF0); TF0=0; TH0=0x3C;TL0=0xB0; } } } 四、实验结果分析: 五、总结: 掌握了单片机外部中断的原理及过程。 掌握了单片机外部中断程序的设计方法。 掌握了单片机外部中断时中断方式的选择方法。 实验八: 中断系统实验 (2)—工业监控系统的设计 一、实验目的: 1、进一步掌握外部中断技术的基本使用方法。 2、进一步熟悉中断处理程序的编程方法。 二、实验原理: 在单片机监控系统中,信号的监控用外部中断来实现,51单片机外部中断只有两个,而监控信号通常有多个,这里就涉及到多个中断源的处理,处理时往往通过中断加查询的方法来实现。 连接时,一方面把多路监控信号中断源通过“线与”接于51单片机外部中断引脚上,另一方面,每一个中断源再连接到一根并口线上。 这里用4个开关(BUTTON)模拟4路监控信号,通过4输入的与门(AND一4)连接到INTO引脚上,监控信号正常情况为高电平,发生超限变为低电平。 4路监控信号又分别与P2口的低4位并口线相连。 在该电路中,无论哪个中断源提出请求,系统都会响应TO中断。 响应后,进入中断服务程序,在中断服务程序中通过对并口线的逐一检测来确定是哪一个中断源提出了中断请求,进一步转到对应的中断服务程序入口位置执行对应的处理程序。 三、程序: #include #include #defineucharunsignedchar sbitP10=P1^0; sbitP11=P1^1; sbitP12=P1^2; sbitP13=P1^3; sbitP20=P2^0; sbitP21=P2^1; sbitP22=P2^2; sbitP23=P2^3; voiddelay() { uchari,j; for(i=0;i<250;i++) for(j=0;j<250;j++) { _nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); } } voidint0()interrupt0 { if(P20==0)P10=0; if(P21==0)P11=0; if(P22==0)P12=0; if(P23==0)P13=0; delay(); delay(); } voidmain(void) { IT0=1; EA=1; EX0=1; while (1) { P1=0xff; P2=0xff; } } 四、实验结果分析: 实验九: 简单的I/O扩展实验 一、实验目的: 1、掌握单片机系统中扩展简单I/O口的基本方法。 2、掌握扩展I/O口的编程方法。 二、实验原理: 74LS373的数据锁存控制端LE是由8051单片机的片外数据存储器写信号WR和P2.7通过或非门(NOR)后相连的,输出允许端OE直接接地,输入端有数据来时直接通过输出端输出。 当执行向片外数据存储器的写指令时,指令中片外数据存储器的地址使P2.7为低电平,则数据锁存控制端LE有效,数据总线上的数据就送到74LS373的输出端74LS244的控制端10E和20E连在一起,与8051单片机的片外数据存储器读信号RD和P2.7通过或门(OR)后相连,当执行从片外数据存储器读的指令时,指令中片外数据储器的地址使P2.7为低电平,则控制端10E和20E有效,74LS244的输入端的数据通过输出端送到数据总线,然后传送到8051单片机的内部。 这里,扩展的简单i/O口访问时只需地址线最高位P2.7为低电平即可,其余地址没有用,可取为低电平,因此对应的片外据在储器地址为7FFFH。 三、程序: #include #include #defineucharunsignedchar voidmain(void) { uchari; while (1) { i=XBYTE[0x7fff]; XBYTE[0x7fff]=i; } } 四、实验结果分析: 五、总结: 掌握了单片机系统中扩展简单I/O口的基本方法。 掌握了扩展I/O口的编程方法。 实验十: 可编程I/O口的扩展实验 一、实验目的: 1、熟悉8255A的结构和功能; 2、熟悉8255A的几种工作方式; 3、掌握8255A与单片机的接口; 4、掌握8255A的编程方法。 二、实验原理: 8255A的数据线与51单片机的数据总线相连,读/写信号线对应相连,地址线AO、Al与51单片机的地址总线的AO和Al相连,片选信号线CS与51单片机的P2.7相连。 8255A的A口、B口、C口和控制口的地址分别是7F00H、7F01H、7F02H和7F03H(高8位地址线未用的取1,低8位地址线未用的取0),8255A扩展的并行接口B口接8个开关(DIPSWC_8)输入,A口接8个发光二极管(LED-BARGRAPH-RED)输出。 三、程序: #include #include #defineucharunsignedchar voidmain(void) { uchari; XBYTE[0x7f03]=0x82; while (1) { i=XBYTE[0x7f01]; XBYTE[0x7f00]=i; } } 四、实验结果分析: 五、总结: 熟悉了8255A的结构和功能;熟悉了8255A的几种工作方式;掌握了8255A与单片机的接口;掌握了8255A的编程方法。 实验十一: LED显示器与51单片机的接口实验 一、实验目的: 1、掌握LED显示器的基本结构与原理 2、掌握LED数码管的静态显示和动态显示 3、掌握LED显示器与单片机的接口的编程特点 二、实验原理: 8255A扩展并行1/0接口接8位共阴极数码管(7SEG-MPX8-CC-BLUE),采用动态显示方式,8位数码管的段选线(A~H)与8255A的A口相连,8位数码管的公共端(1~8)与8255A的B囗相连。 也即8255A的B口输出位选码选择要显示的数码管,8255A的A口输出字段码使数码管显示相应的字符,8255A的A口和B口都工作于方式0输出。 A口、B口、c口和控制口的地址分别为7F00H、7F01H、7F02H和7F03H(高8位地址线未用的取1,低8位地址线未用的取0)。 三、程序: #include #include #defineucharunsignedchar #defineucharunsignedint voiddelay(uint); voiddisplay(void); uchardisbuffer[8]={0,1,2,3,4,5,6,7}; voidmain(void) { XBYTE[0x7f03]=0x80; while (1) {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 报告 仿真 设计