单片机实验报告单.docx

上传人:b****6 文档编号:6265770 上传时间:2023-01-04 格式:DOCX 页数:24 大小:425.62KB
下载 相关 举报
单片机实验报告单.docx_第1页
第1页 / 共24页
单片机实验报告单.docx_第2页
第2页 / 共24页
单片机实验报告单.docx_第3页
第3页 / 共24页
单片机实验报告单.docx_第4页
第4页 / 共24页
单片机实验报告单.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

单片机实验报告单.docx

《单片机实验报告单.docx》由会员分享,可在线阅读,更多相关《单片机实验报告单.docx(24页珍藏版)》请在冰豆网上搜索。

单片机实验报告单.docx

单片机实验报告单

电子科技大学成都学院

实验报告册

 

课程名称:

单片机实验

姓名:

王政霖

学号:

2940710115

院系:

微电子技术系

专业:

集成电路设计与系统

教师:

李海

 

2011年12月12日

实验一:

外部中断电路设计

1、实验目的:

1、学习外部中断技术的使用方法

2、学习中断优先级概念

3、学习单片机内部中断系统的硬件结构和工作原理

4、设计出外部中断电路

二、实验原理和内容:

1、外部中断源为IR0,IR1,IR2,IR3。

2、中断优先级分为两级,均为高电平到低电平有效,

IR0,IR1,为低优先级。

IR2,IR3,为高优先级。

3、只能通过外部中断0和1来处理内部中断

4、每一个外部中断源都应该被保存被读取

5、每一个外部中断信息都应该被单片机清零

3、实验步骤:

1、设计四个外部中断源

2、设计逻辑电路,利用7407——OC门电路

3、使用D触发器实现中断标志保存及清除电路应该选用74LS74

4、实验数据和结果:

1.说明“逻辑电路”的工作原理以及作用;

(1)原理:

两端接一块做输出,另两端做输入。

如果输入都为1,那输出就是1,否则输出就为0。

输出端直接互连就可以实现“逻辑与”。

TTL电路不可以,因为低阻抗形成很大的短路电流,产生大量热,烧坏器件。

(2)OC门、OD门或三态门都可以的。

使用OC门实现线与,应同时在输出端口应加一个上拉电阻,不然形不成高电平。

2.中断标志保存及清除电路的原理

7474是一个D触发器,它会将外来的中断请求锁存为0,当中断响应后,只要I/O口端输出一个负脉冲就可以使D触发器置1,因此终止低电平的中断请求信号。

5、实验总结:

 

实验二:

串行接口的设计

1、实验目的:

1、学习和掌握单片机串行口的基本工作原理及其运用

2、设计串行接口电路结构

2、实验原理和内容:

1、扩展RS232通讯接口的电平转换芯片,建议选用MAX232A。

2、要求利用单片机本身的串行通讯接口,扩展一路RS232的通讯接口。

3、扩展RS422通讯接口的电平转换芯片,建议选用IL422。

3、实验步骤:

1、设计单片机本身串行接口,扩展一路RS232的通讯接口

2、使用MAX232A进行单片机PC通讯

4、实验数据和结果:

(1)说明RS232电平的特点,与一般的TTL电平有何不同;

RS232的电平传输数据比TTL电平的可靠性高,串行口通信的距离大,传输速效率高;而一般的TTL电平串行传输数据的方式抗干扰性差,传输距离短,传输距离短,传输速效率低。

(2)说明选择的MAX232A的详细型号以及基本使用方法;

型号MAX232A使用时在数据输入和输出都需要使用上拉电阻,

1,2,3,4,5,6,15,16引脚需要使用电容,建议为0.1uf左右,11,12引脚作为通信时的数据输入输出引脚,13,14作为PC机给数据和返回数据时的引脚。

5、实验总结:

实验三:

测温电路的设计

1、实验目的:

1、掌握四线制的串行通讯接口原理及其运用

2、掌握测温电路的设计结构

2、实验原理和内容:

1、AD7814是四线制的串行通讯接口,通过这个接口单片机可以配置AD7814。

2、AD7814也可以将温度通过这个接口传送给单片机。

3、设计时考虑用单片机的通用I/O口来与AD7814互联。

3、实验步骤:

1、设计关于测试温度的一个短路

2、用AD7814芯片来测试温度

4、实验数据和结果:

1、串行数据输入

载入一些控制寄存器的串行数据在这里输入提供。

数据在时钟上升到控制寄存器SCLK的边缘是串行数据输入

2、串行时钟的输入

串行时钟用于时钟的AD7814的温度值寄存器中的数据

并且作为控制器时钟数据寄存器的一部分。

3、片选输入

高电平,SCLK被禁用

4、串行数据输出

数据在时钟为下降沿

5、实验总结:

 

实验四:

I/O接口电路的设计

1、实验目的:

1、学习I/O接口电路设计的原理

2、掌握利用74LSTTL电路扩展并行I/O口

2、实验原理和内容:

1、当P2.0=0,RD=1时,选中74LS244芯片,此时若无按钮开关按下,输入高电平。

当某开关按下时则对应位输入为0,74LS244的输入端不全为1,其输入状态通过P0口数据线被读入AT89C51单片机内。

2、当P2.0=0,WR=1(RD=0)时,选中74LS273芯片,CPU通过P0口输出数据锁存到74LS273,74LS273的输出端低电平为对应的LED发光二极管点亮。

3、总之保证P2.0为0,其他地址位或0或1即可,如地址用FEFFH(无效位全为1),或用0000H(无效位全为0)都可。

3、实验步骤:

1、查找的74LS244的资料

74LS273

两种芯片的结构和功能,知道了各个引脚的作用和功能

2、以AT89C51为起点,向外扩展74ls244和74ls273设计出扩展的并行I/O接口电路

四、实验数据和结果:

1、开关量输出电路的串联电阻的作用以及阻值是如何选取的?

(1)、使发光二极管能够正常工作,限制流过发光二极管的流量,保护二极管。

(2)、增加了芯片的抗干扰能力,电流引起的电磁干扰。

(3)、使二极管电极上电位控制在一定的范围。

(4)、为了提高驱动能力这里我选取的是1K电阻阻值。

2、开关输入电路中上拉或下拉电阻的确定依据?

1、为了节约能耗我们一般选用大一点的电阻,因为电压一定,高阻抗就会产生地电流。

2、但是又为了满足足够大的驱动电流,我们电阻应该小一点。

3、快速反应电路,过大的上拉电阻可能使波形边沿变平缓。

综上所述,输入电路应该考虑足够大驱动能力,选择1K的电阻比较合适。

3、说明设计74LS273和74LS244这两个芯片的作用

1、74LS273是一个位8D锁存器,扩展输出口,能够驱动8个LED发光二极管。

2、74LS244的一个缓冲驱动器,扩展输入口,连接8个按钮开关。

74LS273与74LS244的工作受AT89C51的P2.0、RD非、WR非三条线的或逻辑关系控制。

4、说明输入输出端口是如何进行地址分配的。

1、74LS173与74LS244都是在P2.0为0时被选则通不通,和其它地址位无关,一般将未使用的地址设置1,所以74LS173与74LS244地址未用的时候都为FEFFH。

2、在系统地址空间分配上,外部RAM与外部I/O都在64K中而且I/O占高字节地址。

 

5、实验总结:

 

实验五:

闪烁灯实验

1、实验目的:

1、熟悉集成开发环境uVision2的使用

2、学习延时程序的编写和调试

二、实验原理和内容:

1、发光管采取低电平驱动方式点亮,当P1.0上的相应接口为低电平时相应的LED点亮,再调用延时子程序,让led1不停地一亮一灭,一亮一灭的时间间隔为0.2秒,其原理图如图1·1

图1·1闪烁灯实验原理图

1、作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求。

用c语言实现延时,一般就用嵌套的for循环语句来实现,下面

提供的石英晶体为11。

0592MHz,但是我们按12MHZ来计算0.2秒的延时子程序:

voidDelay(uintdel)

{

uinti,j;

for(i=0;i

for(j=0;j<1827;j++)//这个是通过软件仿真得出的数

;

}

2、输出控制

当P0.0端口输出高电平,即P0.0=1时,根据发光二极管的单向导电性可知,这时发光二极管LED1亮;当P0.0端口输出低电平,即P0.0=0时,发光二极管LED1熄灭;我们可以使用SETBP1.0指令使P1.0端口输出高电平,使用CLRP1.0指令使P1.0端口输出低电平。

3、实验步骤:

1、硬件资源连接

把:

“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的LED1端口上。

用串口线将计算机串口和GC51核心板的串口连接。

连接好主板与核心板的供电线。

开启实验箱电源。

2、编译程序

启动uVision2新建一个51单片机的工程,输入参考代码并编译。

3、程序下载并观察实验结果

用ISplay工具把生产的下载文件下载到实验箱,观察LED1的显示。

4、实验数据和结果:

#include

#defineucharunsignedchar//这里用"uchar"代替"unsignedchar","uchar"用来定义无符号字符型数。

#defineuintunsignedint//"uint"用来定义无符号整型数。

sbitShow_LED=P0^0;//用来声明P0.0口为程序所要控制的端口,"sbit"是KEIL专门用来声明某位IO口

/********************************************************************

*名称:

Delay()

*功能:

延时,延时时间为10ms*del。

这是通过软件延时,有一定误差。

*输入:

del

*输出:

***********************************************************************/

voidDelay(uintdel)

{

uinti,j;

for(i=0;i

for(j=0;j<1827;j++)//这个是通过软件仿真得出的数

;

}

/********************************************************************

*名称:

Main()

*功能:

实现灯的闪烁

*输入:

*输出:

***********************************************************************/

voidMain(void)

{

P0=0xff;//关闭所有LED

while

(1)

{

Show_LED=1;

Delay(20);//Delay(del)中的数为延时的时间参数,延时时间为10ms*del.

Show_LED=0;

Delay(20);

}

}

5、实验总结:

1、熟悉了集成开发环境uVision2的使用

2、学会了延时程序的编写和调试

 

实验六:

模拟开关灯实验

1、实验目的:

1、掌握基本的IO读写技巧;

2、熟悉集成开发环境uVision2的使用。

2、实验原理和内容:

原理:

利用单片机的IO口读入数据,利用MOV指令将数据转发到另外一个端口。

内容:

1、开关状态的检测过程

单片机对开关状态的检测相对与单片机来说,是从单片机的P0.0端口输入信号,而输入的信号只有高电平和低电平两种,当拨开开关K1拨上去,即输入高电平,相当于开关断开,当拨开开关K1拨下去,即输入低电平,相当于开关闭合。

2、输出控制:

当P1.0端口输出高电平,即P1.0=1时,根据发光二级管的单向导电性可知,这时发光二极管LED1熄灭;当P1.0端口输出低电平,P1.0=0时,发光二级管LED1亮。

三、实验步骤:

1、硬件资源连接

用排线将拨开开关的J1口与GC51核心板单片机的P0端口相连,发光管的J4口与GC51核心板单片机的P1端口相连。

2、编译程序

启动uVision2新建一个51单片机的工程,输入参考代码并编译。

3、程序下载并观察实验结果

用ISplay工具把生产的下载文件下载到实验箱,拨开开关SW1~SW8,相应的LED会点亮或熄灭。

4、实验数据和结果:

程序框图

C语言源程序

#include

sbitK1=P3^0;

sbitL1=P1^0;

voidmain(void)

{

while

(1)

{

if(K1==0)

{

L1=0;//灯亮

}

else

{

L1=1;//灯灭

}

}

}

5、实验总结:

1、掌握了基本的IO读写技巧

2、熟悉了集成开发环境uVision2的使用。

 

实验七:

流水灯实验

1、实验目的:

1、学习基本的数据处理方法、数据的传输、基本指令的使用;

2、学习延时子程序的编写和调用。

2、实验原理和内容:

原理:

编程实现一个类似于霹雳灯的跑马灯显示效果。

内容:

运用C语言中的移位符号《、》以及或运算符|对输出变量进行处理,也可以直接调用库函数中的左移函数或右移函数来处理输出变量,从而达到输出控制的动作。

3、实验步骤:

1、硬件资源连接

将RC51核心板单片机的P1口和主板上的LED的J4口相连接。

2、编译程序

启动uVision2新建一个51单片机的工程,输入参考代码并编译。

3、程序仿真

在激活P89V51单片机SostICE功能的前提下进入uVision2的仿真状态,全速运行实验程序。

4、观察实验结果LED1~LED8显示霹雳灯的效果。

4、实验数据和结果:

#include

#defineucharunsignedchar

#defineuintunsignedint

/********************************************************************

*名称:

Delay()

*功能:

延时,延时时间为10ms*del

*输入:

del

*输出:

***********************************************************************/

voidDelay(uintdel)

{

uinti,j;

for(i=0;i

for(j=0;j<1827;j++)

;

}

/********************************************************************

*名称:

Main()

*功能:

实现灯的闪烁

*输入:

*输出:

*说明:

也可以使用例1的的方法来关闭数码管

***********************************************************************/

voidMain(void)

{

uchari,temp;

while

(1)

{

temp=0x7f;

for(i=0;i<7;i++)

{

temp=temp>>1;//值右移一位

temp=temp|0x80;

P0=temp;//把值赋给P0口

Delay(15);//延时0.15秒

}

temp=0xfe;

for(i=0;i<7;i++)

{

temp=temp<<1;//值左移一位

temp=temp|0x01;

P0=temp;//把值赋给P0口

Delay(15);//延时0.15秒

}

}

}

5、实验总结:

1、学会了基本的数据处理方法、数据的传输、基本指令的使用

2、学会了延时子程序的编写和调用。

 

实验八:

数码管显示-初步

1、实验目的:

1、初步认识数码管显示的原理:

单个数码管显示。

二、实验原理和内容:

数码管的控制分位选控制和字段驱动。

利用单片机的I/O口输出相应的信号,选通要点亮的数码管,同时输出字段驱动的控制字,就可以显示相应的数字和字母。

3、实验步骤:

1、硬件资源连接

GC51核心板的P2连接到主板上“动态扫描数码管”区的J5上,P0连接到J6上;

2、编译程序

启动uVision2新建一个51单片机的工程,输入参考代码并编译;

3、程序调试

将编译好的程序代码下载到单片机中,观察实验结果是否正确;

4、观察实验结果

数码管循环显示数字0-9。

4、实验数据和结果:

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitKEY=P3^4;//独立按键的T0

/*下一行你可以试着把code去掉看看试验结果。

去掉后table[]会被存到RAM中,因为单片机的RAM比ROM小的多*/

/*所以,对于不会改变的值应该用code或者#define去定?

澹谜庑┕潭ㄖ荡娴?

ROM中去*/

ucharcodetable[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

/*下一行的数组可以显示数值外,还可以显示数码管的点*/

ucharcodetable_d[16]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};

/********************************************************************

*名称:

Delay()

*功能:

延时,延时时间为10ms*del

*输入:

del

*输出:

***********************************************************************/

voidDelay(uintdel)

{

uinti,j;

for(i=0;i

for(j=0;j<1827;j++)

;

}

/********************************************************************

*名称:

Main()

*功能:

主函数

*输入:

*输出:

***********************************************************************/

voidmain()

{

uchari=0;

//P2=0xff;

P2=2;

while

(1)

{

P0=table[i%16];//在这里取i的个位数,不带点显示

//P0=table_d[i%16];//带点显示

if(KEY==0)

{

Delay

(1);//软件消抖,试验为20ms

if(KEY==0)

{

i++;

}

Delay(50);//延时0.5秒后进行下一次的按键检测

}

}

}

5、实验总结:

1、掌握了数码管显示的原理

2、和单个数码管的显示

 

实验九:

数码管显示-提高

1、实验目的:

进一步认识数码管显示的原理:

多个数码管同时显示。

1、实验原理和内容:

对于多个七段数码管可以采用动态扫描的方法来显示数据,一次点亮一个数码管,稍等片刻后在点亮下一个数码管,如此循环,由于人眼的视觉"暂留"作用,看上去好像所有的数码管是同时点亮的。

2、实验步骤:

1、硬件资源连接

GC51核心板的P2连接到主板上“动态扫描数码管”区的J5上,P0连接到J6上。

2、编译程序

启动uVision2新建一个51单片机工程,输入参考代码并编译。

3、程序调试

将编译好的程序代码下载到单片机中,观察实验结果是否正确。

4、观察实验结果

八个数码管同时显示,显示内容为自己的学号的后八位。

4、实验数据和结果:

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitKEY=P3^4;//独立按键的T0

sbitKEY_Lock=P3^2;//这里,按了该按键后,实现解锁和开锁。

sbitLOCK=P3^7;//锁存功能

 

/*下一行你可以试着把code去掉看看试验结果。

去掉后table[]会被存到RAM中,因为单片机的RAM比ROM小的多*/

/*所以,对于不会改变的值应该用code或者#define去定?

澹谜庑┕潭ㄖ荡娴?

ROM中去*/

ucharcodetable[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

/*下一行的数组可以显示数值外,还可以显示数码管的点*/

ucharcodetable_d[16]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};

/********************************************************************

*名称:

Delay()

*功能:

延时,延时时间为10ms*del

*输入:

del

*输出:

***********************************************************************/

voidDelay(uintdel)

{

uinti,j;

for(i=0;i

for(j=0;j<1827;j++)

;

}

/********************************************************************

*名称:

Main()

*功能:

主函数

*输入:

*输出:

***********************************************************************/

voidmain()

{

uchari=0;

LOCK=1;

//P2=0xff;

while

(1)

{

P0=table[i%16];//在这里取i的个位数,不带点显示

//P0=table_d[i%16];//带点显示

if(KEY==0)

{

Delay

(1);//软件消抖,试验为20ms

if(KEY==0)

{

i++;

}

Delay(50);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1