单片机实验报告.docx

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

单片机实验报告.docx

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

单片机实验报告.docx

单片机实验报告

 

单片机

实验报告

 

学院:

电控学院

专业:

自动化(交通信息与控制)

姓名:

刘甜甜

学号:

201232010107

 

目录

一、实验一1

二、实验二4

三、实验三5

四、实验四12

五、实验七15

六、实验十一19

七、总结23

1、实验一

使用μVision集成开发工具设计、调试汇编语言程序

1.实验目的

1)熟悉使用μVision集成开发工具编写、编译、调试单片机汇编语言程序的方法。

2)掌握A51汇编语言的编程方法。

3)领会汇编语言程序设计的思想和方法。

2.实验设备

1)计算机

2)μVision集成开发环境

3.实验内容

1)学习μVision集成开发环境的使用及A51编程范例。

结合第11章μVision集成开发环境的使用介绍,上机练习μVision的常用功能,具体功能说明请参阅第11章的有关部分和μVision自带的联机帮助。

打开μVision安装目录下路径为“C51\EXAMPLES\ASM\”中的汇编语言范例工程文件“ASAMPLE.Uv2”,如图1-1所示。

通过仔细阅读范例程序,了解μVision中项目文件的构成、汇编语言程序的编写规范、模块间的函数调用方法等知识。

将打开的范例工程文件编译后,单击图标进入调试模式调试程序,如图1-2所示,熟悉μVision调试模式下常用功能的使用方法。

掌握汇编语言程序调试的一般过程。

2)编写程序,完成二进制数向BCD码的转换。

参照11.3节中介绍的内容,使用μVision集成开发环境建立项目,编写程序实现将R0中的二进制数转换成非压缩式BCD码,存储于内部数据存储器30H~32H中。

编译程序,根据提示改正错误,直至编译无误。

参照11.4节中介绍的相关内容,进入μVision调试模式。

在寄存器窗口中设置寄存器R0的初值,在程序最后设置断点,全速运行至断点处,在存储器观察窗口中观察内部数据存储器中的内容是否与程序设计运行结果一致。

如果有问题,需要进一步通过单步调试,查看程序的每条语句执行结束后的状态,检查程序设计中的问题。

3)编写程序,完成BCD码向ASCI码的转换。

使用μVision集成开发环境建立项目,编写程序实现将存储于内部数据存储器30H—35H中的6个非压缩式BCD码的数字转换成ASCII码形式,存储于外部数据地址为2000H—2005H的单元中。

编译程序,根据提示改正错误,直至编译无误。

参照11.4节中介绍的相关内容,进入μVision调试模式。

在存储器观察窗口1中设置内部数据存储器30H~35H单元中的BCD码数据,在程序结尾设置断点,全速运行直至断点处,在存储器观察窗口2中查看以地址2000H起始的外部数据存储单元中的内容是否与程序设计运行结果一致。

如果有问题,需要进一步通过单步调试,查看程序的每条语句执行结束后的状态,检查程序设计中的问题。

4.实验结果

图1-1

图1-2

二、实验二

使用μVision集成开发工具设计、调试C51语言程序

1.实验目的

1)进一步熟悉使用μVision集成开发工具编写、编译、调试单片机C51语言程序的方法。

2)初步掌握C51编程语言的基本编程方法。

3)初步领会C51编程语言程序设计的基本思想和方法。

4)学会使用C51库函数进行基本输入输出的编程方法。

2.实验设备

1)计算机。

2)μVision集成开发环境。

3.实验内容

1)进一步学习μVision集成开发环境的使用及C51编程范例结合第11章Vision集成开发环境的使用介绍,对μVision的常用功能及调试C51语言程序的方法进行上机练习。

具体的功能说明请参阅第11章的有关部分和μVision自带的联机帮助。

打开μVision安装目录下路径为“C51\EXAMPLES\CSAMPLE\”中的C51语言最基本的范例工程文件“CSAMPLE.Uv2”。

通过仔细阅读范例程序,了解μVision中C51语言编写的程序项目文件构成、C51语言程序编写规范、模块间的函数和变量调用方法等知识。

通过分析范例程序,掌握利用C51库函数设计使用单片机串行口进行输入输出的基本方法。

2)编写程序实现3个数的大小比较通过学习μVision自带的C51语言程序范例CSAMPLE中关于输入输出的库函数使用方法,编写程序实现3个数的大小比较。

程序要求:

1)程序启动后向串行端口发送提示信息,并提示用户输入待比较的3个数字。

2)程序将用户从串行端口输入的3个数字进行比较并排序。

3)程序将比较结果按数字大小的升序排列从串行端口输出。

4.实验步骤

程序设计时,应采用模块化设计、自底向上的设计方法进行,调试中需要用到的Lr,Vision功能可以参阅11.4节中的有关部分和联机帮助文档。

1)仔细阅读并分析范例,学习C51输入输出库函数的使用方法。

2)编写程序,在调试模式下调试,实现在串行端口调试窗口输出程序设置的信息,调试好后将程序改写成输出接口函数形式保存。

3)编写程序,在调试模式下调试,实现从串行端口调试窗口读入数据,通过变量观察窗口观察读入的数据与输入的数据是否一致,确定程序设计成功后将程序改写成输入接口函数形式保存。

4)编写主程序,实现程序的控制流程,在需要的地方调用已经编写好并调试成功的输入输出接口函数,最后在调试模式下调试完整的程序。

三、实验三跑马灯实验

1.实验目的

1)熟悉51单片机并行口的编程。

2)熟悉共阴极LED的工作特性及控制方法。

3)熟悉单片机实验开发板的设计原理。

4)学习单片机在系统烧录程序(在系统编程ISP)的方法。

2.实验设备

1)计算机

2)μVision集成开发环境

3)ISP编程软件

4)实验开发板

5)交叉式串行口通信线

3.实验原理

一个数码管由8个发光二极管组成,由于是共阴极,所以高电平选通。

74ALS245接成直通方式通过P0口驱动数码管。

由单片机P2口的其中三位控制74LS138译码器对数码管进行位选。

同时控制8个发光二极管和8个数码管。

4.实验内容

1)使用汇编语言编写程序实现数码管跑马灯实验编写A51汇编语言程序,编译成功后,使用ISP下载软件下载程序,在实验板上实现数码管从0到9的跑马显示。

2)使用C51语言编写程序实现数码管的跑马灯实验。

a、控制数码管进行从0到9跑马显示;

b、从右向左循环显示数字“8”,接着依次点亮发光二极管,控制蜂鸣器发声,再将数码管全部点亮,如此往复地循环执行。

5.实验流程图

5.实验结果

6.实验源程序

(1)用C51实现数码管0到9跑马显示

#include

//--定义要使用的IO口--//

#defineGPIO_DIGP0

//--声明全局函数--//

voidDelay100ms(unsignedintc);//误差0us

//--定义全局变量--//

//RAM,ROM

unsignedcharcodeDIG_CODE[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

//0~9段码

voidmain(void)

{

unsignedchari=0;

while

(1)

{

GPIO_DIG=~DIG_CODE[i];

i++;

if(i==10)

{

i=0;

}

Delay100ms(50);

}

}

voidDelay100ms(unsignedintc)//误差0us

{

unsignedchara,b;

//--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--//

for(;c>0;c--)

{

for(b=1000;b>0;b--)

{

for(a=1300;a>0;a--);

}

}

}

(2)从右向左循环显示数字“8”,接着依次点亮发光二极管,控制蜂鸣器发声,再将数码管全部点亮,如此往复地循环执行。

#include

#include

#defineGPIO_DIGP3

sbitLSA=P2^2;

sbitLSB=P2^3;

sbitLSC=P2^4;

sbitbeep=P2^5;//蜂鸣器控制

unsignedcharLED;

unsignedcharcodeDIG_CODE[8]={0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f};//8的显示码

unsignedcharDisplayData[8];//用来存放要显示的8位数的值

voidDigDisplay();

voidDigDisplay2();

//延时函数

voidDelay10ms(unsignedintc)//误差0us

{

unsignedchara,b;

//--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--//

for(;c>0;c--)

{

for(b=38;b>0;b--)

{

for(a=130;a>0;a--);

}

}

}

voidmain()

{

//从右向左循环显示数字8

unsignedchari;

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

{

DisplayData[i]=DIG_CODE[i];

}

while

(1)

{

DigDisplay();

}

//依次点亮流水灯

LED=0x01;

while

(1)

{

P0=LED;

Delay10ms(50);

LED=LED<<1;//循环右移1位,点亮下一个LED"<<"左移位

if(P0==0x00)//当它全灭的时候,重新赋值

{

LED=0x01;

}

}

//蜂鸣器发声

beep=0;

Delay10ms(600);

beep=1;

Delay10ms(600);

//数码管全亮

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

{

DisplayData[i]=DIG_CODE[i];

}

while

(1)

{

DigDisplay2();

}

}

//数码管动态显示

voidDigDisplay()

{

unsignedchari;

unsignedintj;

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

{

switch(i)//位选,选择点亮的数码管,

{

case(7):

LSA=0;LSB=0;LSC=0;//显示第0位

Delay10ms(100);

break;

case(6):

LSA=1;LSB=0;LSC=0;//显示第1位

Delay10ms(100);

break;

case(5):

LSA=0;LSB=1;LSC=0;//显示第2位

Delay10ms(100);

break;

case(4):

LSA=1;LSB=1;LSC=0;//显示第3位

Delay10ms(100);

break;

case(3):

LSA=0;LSB=0;LSC=1;//显示第4位

Delay10ms(100);

break;

case

(2):

LSA=1;LSB=0;LSC=1;//显示第5位

Delay10ms(100);

break;

case

(1):

LSA=0;LSB=1;LSC=1;//显示第6位

Delay10ms(100);

break;

case(0):

LSA=1;LSB=1;LSC=1;//显示第7位

Delay10ms(100);

break;

}

GPIO_DIG=DisplayData[i];//发送段码

j=1000;//扫描间隔时间设定

while(j--);

GPIO_DIG=0x00;//消隐

}

}

//数码管全亮

voidDigDisplay2()

{

unsignedchari;

unsignedintj;

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

{

switch(i)//位选,选择点亮的数码管,

{

case(7):

LSA=0;LSB=0;LSC=0;//显示右边起第8位

break;

case(6):

LSA=1;LSB=0;LSC=0;//显示右边起第7位

break;

case(5):

LSA=0;LSB=1;LSC=0;//显示右边起第6位

break;

case(4):

LSA=1;LSB=1;LSC=0;//显示右边起第5位

break;

case(3):

LSA=0;LSB=0;LSC=1;//显示右边起第4位

break;

case

(2):

LSA=1;LSB=0;LSC=1;//显示右边起第3位

break;

case

(1):

LSA=0;LSB=1;LSC=1;//显示右边起第2位

break;

case(0):

LSA=1;LSB=1;LSC=1;//显示右边起第1位

break;

}

GPIO_DIG=DisplayData[i];//发送段码

j=10;//扫描间隔时间设定

while(j--);

GPIO_DIG=0x00;//消隐

}

}

四、实验四单片机外部中断实验

1.实验目的

(1)通过实验掌握51单片机的中断原理。

(2)熟悉使用C51语言编写中断处理程序的方法。

(3)进一步熟悉单片机实验开发板的设计原理。

(4)进一步熟悉单片机在系统烧录程序(在系统编程ISP)的方法。

2.实验设备

(1)计算机

(2)μVision集成开发环境

(3)ISP编程软件

(4)实验开发板

(5)交叉式串行口通信线

3.实验原理

以第五章例5-2为实验开发板单脉冲产生模块,使用跳线块将JP2的1和2短接。

这样开关N2的状态变化经过RS触发器整形后输入到单片机的INT0/P3.2引脚。

程序中如果设置外部中断0采用下降沿触发方式并允许中断,则每次将开关拨动再使其归位就会产生一个脉冲下降沿,使单片机触发中断。

4.实验内容

1)使用C51语言编写程序,初始化中断,完成中断处理,实现对拨码开关拨动次数计数。

在μVision调试模式下,使用软件仿真调试编写程序。

2)在正确完成上一步程序后,继续编写程序,调用实验三整理的显示接口函数,实现将拨码开关的拨动次数显示在LED数码管上。

注意,只显示有效的位数,无效的位数应不显示。

编写好程序后,使用ISP编程软件将二进制代码文件下载至实验板中运行,拨动开关,观察数码管的显示。

5.实验流程图

主程序框图INT0中断处理程序框图

6.实验结果

7.实验源程序

记录并显示INT0的中断次数,在数码管中显示出来,即每产生一次中断,显示加一。

中断次数不超过16次

#include

#include

unsignedcharduanxuan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

unsignedcharweixuan[2]={0xf7,0xfb};

unsignedinttimes=0;

voiddisplay();

voidint_0(void)interrupt0using1//按键触发外部中断

{

times++;

}

voidmain()

{

IT0=1;//设置中断触发方式为下降沿触发

EX0=1;//允许外部中断

EA=1;//开总中断

while

(1)

{

display();

}

}

voiddisplay()//按键次数显示

{

unsignedintj;

inta,b;

a=times%10;

b=times/10;

P1=weixuan[0];

P0=duanxuan[a];

j=1000;

while(j--);

P1=weixuan[1];

P0=duanxuan[b];

j=1000;

while(j--);

}

五、实验七串行通信实验

1.实验目的

(1)通过实验掌握51单片机的串行中断原理。

(2)通过实验掌握串行通信的基本原理。

(3)熟悉使用C51编程语言编写的查询方式的发送、接收程序的方法。

(4)熟悉使用C51编程语言编写的中断方式的发送、接收程序的方法。

(5)初步掌握单片机与PC通信的程序设计方法。

2.实验设备

(1)计算机

(2)μVision集成开发环境

(3)ISP编程软件

(4)AccessPort串口调试软件

(5)实验开发板

(6)交叉式串行口通信线

3.实验原理

单片机的RXD和TXD引脚作为UART的接收端和发送端,通过MAX232接口芯片分别连接到J4接口端子的2脚和3脚。

MAX232是RS-232接口芯片,主要负责不同标准电平信号间的转换,在很多情况下串行通信的故障是由MAX232芯片的故障造成的。

根据芯片手册,MAX232在正常工作时,第二引脚V+应该输出+8.5V的电压,第六引脚V-应该输出-8.5V的电压。

因此,实际应用中可以通过测量这两个引脚的工作电压是否正常来判断MAX232芯片是否工作正常。

由于计算机的COM端口也遵循RS-232接口标准,因此使用通信线将实验板发送端和接收端与PC接收端和发送端对应相连,即可实现单片机实验板与PC之间的通信。

如果在实验板的JP7端子上使用跳线块将1脚和2脚短接,即把实验板串行接口的发送端与接收端短接起来,这样单片机从TXD发送的数据会返回到RXD上,实现数据的自发自收。

4.实验内容

1)检测MAX232芯片的状态。

首先,使用万用表的20V直流电压档测量教学实验板上MAX232芯片的第二引脚和第六引脚电压是否正常,以判断MAX232是否正常工作。

接着,分别测量第13引脚和第14引脚,检查通信引脚的电平是否符合RS-232标准的要求。

2)参考第六章的相关内容,使用C51编程语言实现查询方式的发送程序,并在μVision的调试模式下,利用串行口调试窗口观察数据输出情况并验证程序。

最后,将发送程序组织成查询方式的发送函数保存起来。

3)参考第六章的相关内容,使用C51编程语言实现查询方式的接收程序,并在μVision的调试模式下,利用串行口调试窗口模拟数据的输入,在程序中设置断点,通过变量观察窗口查看接收的数据并验证程序。

最后,将接收程序组成查询方式的接收函数保存起来。

5.实验结果

每当从键盘输入一个ASCII字符,在屏幕会显示该字符,并在该字符之后屏幕显示该字符加一之后的字符。

如:

输入‘8’,屏幕在现实‘8’之后会接着显示‘9’;输入‘a’,屏幕在现实‘a’之后会接着显示‘b’

6.流程图

 

6.实验源程序

#include

unsignedcharcodeString[]={"whoareyou?

"};

unsignedcharreceive[20];//设置最大能接收20个字符,可以根据实际需要扩大

voidDelay(unsignedintn)

{

unsignedinti,j;

for(i=0;i

for(j=249;j>0;j--);

}

voidjieshou()

{

unsignedinti;

while

(1)

{

while(String[i]!

='\0')//循环发送字节数组中的数据

{

SBUF=String[i];

while(TI==0);

TI=0;

i++;

Delay

(1);

}

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

{

while(RI==0);

receive[i]=SBUF;//存储接收到的数据

if(receive[i]=='E')

{

receive[i]='\0';

RI=0;

break;

}

SBUF=receive[i];

while(TI==0);

TI=0;

RI=0;

}

SBUF='\n';

while(TI==0);

TI=0;

i=0;

}

}

voidmain()

{

SCON=0X50;//设置为工作方式11起始位8数据位1停止位

TMOD=0X20;//设置计数器工作方式2

PCON=0X80;//波特率加倍

TH1=0XF3;//计数器初始值设置,波特率是4800

TL1=0XF3;

EA=0;

TR1=1;

while

(1)

{

jieshou();

}

}

六、实验十一矩阵键盘实验

1.实验目的

(1)进一步掌握单片机通用I/O接口的编程方法。

(2)掌握单片机矩阵键盘电路的设计方法。

(3)掌握单片机读取矩阵键盘状态的编程方法。

2.实验设备

(1)计算机

(2)AccessPort串口调试助手

(3)μVision集成开发环境

(4)ISP编程软件

(5)实验开发板

(6)交叉式串口通信线

3.实验原理

矩阵键盘的读取是通过循环查询I/O接口输入实现的。

在电路中,由于行列信号都设置了上拉电阻,因此如果对某列输出低电平信号,然后查询行信号的输入状态,若代表某行状态的引脚电平为低,则可确定被按下按键的行和列的坐标,反之亦然。

如此往复的不断循环查询,由于单片机的执行速度很快,一旦有按键按下就可确定按键的编号。

另外,还需要注意,由于按键时会出现弹簧抖动或按键的误触碰而造成某次读取状态不确定性。

为解决这样的问题,在程序设计时往往在读取到一个按键被按下后,延时一定时间再读取一次状态以便确认读取无误,如果状态相同则说明有键被按下,反之

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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