单片机实验报告.docx

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

单片机实验报告.docx

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

单片机实验报告.docx

单片机实验报告

 

学生实验报告

(理工类)

 

课程名称:

单片机原理及应用专业班级:

14电子信息工程

(1)班

学生学号:

1415101005学生姓名:

丁剑

所属院部:

电子信息工程学院指导教师:

徐志国

2016——2017学年第1学期

 

金陵科技学院教务处制

实验报告书写要求

实验报告原则上要求学生手写,要求书写工整。

若因课程特点需打印的,要遵照以下字体、字号、间距等的具体要求。

纸张一律采用A4的纸张。

实验报告书写说明

实验报告中一至四项内容为必填项,包括实验目的和要求;实验仪器和设备;实验内容与过程;实验结果与分析。

各院部可根据学科特点和实验具体要求增加项目。

填写注意事项

(1)细致观察,及时、准确、如实记录。

(2)准确说明,层次清晰。

(3)尽量采用专用术语来说明事物。

 

(4)外文、符号、公式要准确,应使用统一规定的名词和符号。

(5)应独立完成实验报告的书写,严禁抄袭、复印,一经发现,以零分论处。

实验报告批改说明

实验报告的批改要及时、认真、仔细,一律用红色笔批改。

实验报告的批改成绩采用百分制,具体评分标准由各院部自行制定。

实验报告装订要求

实验批改完毕后,任课老师将每门课程的每个实验项目的实验报告以自然班为单位、按学号升序排列,装订成册,并附上一份该门课程的实验大纲。

 

实验项目名称:

1存储器块清零实验学时:

2

同组学生姓名:

陈超逸实验地点:

B403

实验日期:

16.11.09实验成绩:

批改教师:

徐志国批改时间:

一、实验目的和要求

(1)掌握存储器读写方法

(2)了解存储器的块操作方法

二、实验仪器和设备

伟福LAB6000仿真实验系统,奔腾以上计算机,装有WAVE集成调试软件

三、实验原理

指定存储器中某块的起始地址和长度,要求能将其内容清零。

 

四、实验结果与分析

1、程序如下

//软件实验一存储器块清零

xdataunsignedcharBuffer[256]_at_0x4000;

voidmain()

{

unsignedintindex;

unsignedcharxdata*ptr;

ptr=&Buffer;//起始地址

for(index=0;index<=255;index++){

*ptr++=0;//清0,地址加一

}

}

 

2、实验结果

程序未运行前状态

 

程序运行后结果如下图所示;

 

程序运行结果如下图所示:

 

 

 

五、实验问题及心得

思考题

如何将存储器块的内容置成某固定值(例全填充为0FFH)?

请学生修改程序,完成此操作

答:

程序如下:

xdataunsignedcharBuffer[256]_at_0x4000;

voidmain()

{

unsignedintindex;

unsignedcharxdata*ptr;

ptr=&Buffer;//起始地址

for(index=0;index<=255;index++){

*ptr++=0xff;//清0,地址加一

}

}

心得体会:

只有事先把程序的各部分作用弄清楚,再在原程序上修改,才能达到预计的效果。

实验项目名称:

实验2内存块移动实验学时:

2

同组学生姓名:

陈超逸实验地点:

B403

实验日期:

16.05.04实验成绩:

批改教师:

徐志国批改时间:

一、实验目的和要求

(1)掌握存储器读写方法

(2)了解存储器的块操作方法

二、实验仪器和设备

伟福LAB6000仿真实验系统,奔腾以上计算机,装有WAVE集成调试软件

三、实验原理

 

 

四、实验结果与分析

实验程序如下:

xdataunsignedcharBuffer1[256]_at_0x3000;

xdataunsignedcharBuffer2[256]_at_0x4000;

voidmain()

{

unsignedintindex;

unsignedcharxdata*ptr1;

unsignedcharxdata*ptr2;

ptr1=&Buffer1;

ptr2=&Buffer2;

for(index=0;index<=255;index++){

*ptr2++=*ptr1++;

}

}

实验结果:

 

运行结果如下图所示:

(原图上修改后的图下)

 

 

五、实验问题及心得

本程序是给出起始地址,用地址加一方法移动块,请思考给出块结束地址,用地址减一方法移动块的算法。

另外,若源块地址和目标块地址有重叠,该如何避免?

修改后结果如下图所示:

 

心得体会:

汇编语言也有它的独到之处需要不断尝试。

实验项目名称:

3.P1口输入输出实验学时:

2

同组学生姓名:

陈超逸实验地点:

B403

实验日期:

16.05.04实验成绩:

批改教师:

徐志国批改时间:

一、实验目的和要求

(1)掌握存储器读写方法

(2)了解存储器的块操作方法

二、实验仪器和设备

伟福LAB6000仿真实验系统,奔腾以上计算机,装有WAVE集成调试软件

三、实验原理

1、实验电路及连线

 

实验1:

P1口循环点灯实验2:

P1口输入输出

Delay:

MOVR6,#0H

MOVR7,#0H

DelayLoop:

DJNZR6,DelayLoop

DJNZR7,DelayLoop

RET

2、实验程序

8051延时子程序的延时计算问题,对于程序

查指令表可知MOV,DJNZ指令均需用两个机器周期,在6MHz晶振时,一个机器周期时间长度为12/6MHZ,所以该段程序执行时间为:

(256×255+2)×2×12÷6≈261ms

3、实验框图

 

四、实验结果与分析

1.实验程序:

 

实验结果如下:

 

五、实验问题及心得

若是12MHZ的晶振,延时程序如何修改?

答:

修改程序如下

Loop:

mova,#01h

movr2,#8

Output:

movP1,a

rla

callDelay

djnzr2,Output

ljmpLoop

Delay:

MOVr5,#5

movr6,#5

MOVr7,#5

DelayLoop:

djnzr5,DelayLoop

djnzr6,DelayLoop

djnzr7,DelayLoop

ret

end

心得:

通过本次实验让我深刻认识到延时在单片机程序中的重要作用,以及延时的使用方法。

掌握了延时的使用方法。

 

实验项目名称:

实验4计数器实验实验学时:

2

同组学生姓名:

陈超逸实验地点:

B403

实验日期:

16.11.09实验成绩:

批改教师:

徐志国批改时间:

一、实验目的和要求

学习8051内部定时/计数器使用方法

8051内部定时计数器T0,按计数器模式和方式1工作,对P3.4(T0)引脚进行计数。

将其数值按二进制数在P1口驱动LED灯上显示出来

二、实验仪器和设备

伟福LAB6000仿真实验系统,奔腾以上计算机,装有WAVE集成调试软件

三、实验原理

连线

连接孔1

连接孔2

1

P1.0

L0

2

P1.1

L1

3

P1.2

L2

4

P1.3

L3

5

单脉冲输出

T0

1、实验电路

 

2、实验框图

 

四、实验结果与分析

1、程序如下

 

 

实验结果

 

五、实验问题及心得

思考题

若定时计数器T0,按计数器模式和方式0工作,程序如何修改?

答:

修改后的程序如下所示:

movTMOD,#00000100b;方式1,记数器

movTH0,#0

movTL0,#0

setbTR0;开始记数

Loop:

movP1,TL0;将记数结果送P1口

ljmpLoop

end

心得体会:

了解了如何设置定时器计数器方式控制字的使用,以及定时计数程序的使用。

 

实验项目名称:

实验5外部中断实验实验学时:

2

同组学生姓名:

陈超逸实验地点:

B403

实验日期:

16.11.09实验成绩:

批改教师:

徐志国批改时间:

一、实验目的和要求

1.学习外部中断技术的基本使用方法。

2.学习中断处理程序的编程方法。

3.用单次脉冲申请中断,在中断处理程序中对输出信号进行反转

二、实验仪器和设备

伟福LAB6000仿真实验系统,奔腾以上计算机,装有WAVE集成调试软件

三、实验原理

1、实验电路

 

2、实验框图

 

主程序框图外部中断子程序框图

四、实验结果与分析

实验程序如下

#include

sbitLED=P1^0;

bitLEDBuf;

voidExtInt0()interrupt0

{

LEDBuf=!

LEDBuf;

LED=LEDBuf;

}

voidmain()

{

LEDBuf=0;

LED=0;

TCON=0x01;//外部中断0下降沿触发

IE=0x81;//打开外部中断允许位(EX0)及总中断允许位(EA)

while

(1);

}

 

实验结果:

 

 

模拟仿真

 

 

五、实验问题及心得

思考题

若采用INT1中断源,电路如何连接,程序如何修改?

答:

连线P3.2换成P3.3

#include

sbitLED=P1^0;

bitLEDBuf;

voidExtInt0()interrupt2

{

LEDBuf=!

LEDBuf;

LED=LEDBuf;

}

voidmain()

{

LEDBuf=1;

LED=1;

TCON=0x04;//外部中断0下降沿触发

IE=0x84;//打开外部中断允许位(EX0)及总中断允许位(EA)

while

(1);

}

心得体会:

通过本次实验我们学习了外部中断技术的基本使用方法。

学习中断处理程序的编程方法。

 

实验项目名称:

实验6定时器记数实验学时:

2

同组学生姓名:

陈超逸实验地点:

B403

实验日期:

16.11.09实验成绩:

批改教师:

徐志国批改时间:

一、实验目的和要求

1、学习8051内部计数器的使用和编程方法。

2、进一步掌握中断处理程序的编程方法。

二、实验仪器和设备

伟福LAB6000仿真实验系统,奔腾以上计算机,装有WAVE集成调试软件

三、实验原理

1、实验电路

 

Y

 

主程序框图定时中断子程序框图

2、实验框图

四、实验结果与分析

实验程序:

#include

#defineTick10000//10000x100us=1s

#defineT100us(256-50)//100us时间常数(6M)

unsignedintC100us;//100us记数单元

bitLEDBuf;

sbitLED=P1^0;

voidT0Int()interrupt1

{

C100us--;

if(C100us==0){

C100us=Tick;//100us记数器为0,重置记数器

LEDBuf=!

LEDBuf;//取反LED

}

}

voidmain()

{

TMOD=0x02;//方式2,定时器

TH0=T100us;

TL0=T100us;

IE=0x82;//EA=1,IT0=1

LEDBuf=0;

LED=0;

C100us=Tick;

TR0=1;//开始定时

while

(1){

LED=LEDBuf;

}

}

 

实验模拟

 

 

五、实验问题及心得

思考题

若定时时间为500us,计数器初始值是多少?

#include

#defineTick10000//10000x100us=1s

#defineT100us(256-6)//100us时间常数(6M)

unsignedintC100us;//100us记数单元

bitLEDBuf;

sbitLED=P1^0;

voidT0Int()interrupt1

{

C100us--;

if(C100us==0){

C100us=Tick;//100us记数器为0,重置记数器

LEDBuf=!

LEDBuf;//取反LED

}

}

voidmain()

{

TMOD=0x02;//方式2,定时器

TH0=T100us;

TL0=T100us;

IE=0x82;//EA=1,IT0=1

LEDBuf=0;

LED=0;

C100us=Tick;

TR0=1;//开始定时

while

(1){

LED=LEDBuf;

}

}

心得体会:

通过本次实验我们学习了8051内部计数器的使用和编程方法,进一步掌握中断处理程序的编程方法

 

实验项目名称:

实验7A/D转换实验实验学时:

2

同组学生姓名:

陈超逸实验地点:

B403

实验日期:

16.11.09实验成绩:

批改教师:

徐志国批改时间:

一、实验目的和要求

1、掌握A/D转换与单片机的接口方法。

2、了解A/D芯片ADC0809转换性能及编程。

3、通过实验了解单片机如何进行数据采集。

二、实验仪器和设备

伟福LAB6000仿真实验系统,奔腾以上计算机,装有WAVE集成调试软件

三、实验原理

1、实验电路

 

2、实验框图

主程序框图

 

1、实验电路

 

2、实验框图

主程序框图

 

四、实验结果与分析

实验程序:

#definemode0x82

xdataunsignedcharCTL_at_0x9003;

xdataunsignedcharPA_at_0x9000;

xdataunsignedcharCS0809_at_0x8000;

unsignedcharRead0809()

{

unsignedchari;

CS0809=0;//起动A/D

for(i=0;i<0x20;i++);//延时>100us

return(CS0809);//读入结果

}

main()

{

unsignedcharb;

CTL=mode;

while

(1){

b=Read0809();

PA=b;

}

}

modeequ082h;方式0,PA,PC输出,PB输入

CS0809equ8000h

PortAequ9000h;PortA

PortBequ9001h;PortB

PortCequ9002h;PortC

CAddrequ9003h;控制字地址

org0

movdptr,#CAddr

mova,#mode

movx@dptr,a

movdptr,#CS0809

mova,#0

movx@dptr,a;起动A/D

mova,#40h

djnzACC,$;延时>100us

movxa,@dptr;读入结果

movr7,#100

dly:

movdptr,#PortA

movx@dptr,a

djnzr7,dly;延时

ljmp0

end

 

实验现象如下图所示:

 

 

五、实验问题及心得

思考题

试编程用中断方式读回A/D结果。

Mode equ 082h;

CSO8O9 equ 8000h

PortA  equ 8000h

PortB  equ 8000h

PortC  equ 8000h

CAddr  equ 8000h

mov dptr,#Caddr

mov a,#mode

movx @dptr,#CS0809

mov a,#0

movx @dptr,a;

mov a,#40h

mjnz ACC,$;

movx a,@dptr;

mov r7,#100

心得体会:

通过本次实验,我们学会了掌握A/D转换与单片机的接口方法,了解了A/D芯片ADC0809转换性能及编程。

 

实验项目名称:

实验8八位段数码管显示实验学时:

2

同组学生姓名:

陈超逸实验地点:

B403

实验日期:

16.11.09实验成绩:

批改教师:

徐志国批改时间:

一、实验目的和要求

了解数码管动态显示的原理。

了解用总线方式控制数码管显示

利用实验仪提供的显示电路,动态显示一行数据

二、实验仪器和设备

伟福LAB6000仿真实验系统,奔腾以上计算机,装有WAVE集成调试软件

三、实验原理

1、实验电路

 

2、实验框图

 

 

 

四、实验结果与分析

实验程序:

#defineLEDLen6

xdataunsignedcharOUTBIT_at_0x8002;//位控制口

xdataunsignedcharOUTSEG_at_0x8004;//段控制口

xdataunsignedcharIN_at_0x8001;//键盘读入口

unsignedcharLEDBuf[LEDLen];//显示缓冲

codeunsignedcharLEDMAP[]={//八段管显示码

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71

};

voidDelay(unsignedcharCNT)

{

unsignedchari;

while(CNT--!

=0)

for(i=100;i!

=0;i--);

}

voidDisplayLED()

{

unsignedchari,j;

unsignedcharPos;

unsignedcharLED;

Pos=0x20;//从左边开始显示

for(i=0;i

OUTBIT=0;//关所有八段管

LED=LEDBuf[i];

OUTSEG=LED;

OUTBIT=Pos;//显示一位八段管

Delay

(1);

Pos>>=1;//显示下一位

}OUTBIT=0;//关所有八段管}

voidmain()

{unsignedchari=0;unsignedcharj;

while

(1){LEDBuf[0]=LEDMAP[i&0x0f];

LEDBuf[1]=LEDMAP[(i+1)&0x0f];

LEDBuf[2]=LEDMAP[(i+2)&0x0f];

LEDBuf[3]=LEDMAP[(i+3)&0x0f];

LEDBuf[4]=LEDMAP[(i+4)&0x0f];

LEDBuf[5]=LEDMAP[(i+5)&0x0f];

i++;

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

DisplayLED();//延时

}

}

实验结果:

 

五、实验问题及心得

思考题:

1、该数码管是共阴极还是共阳极?

答:

共阳极。

2、LED显示方法有哪些?

答:

接并口显示和单片机串口动态扫描的led显示。

心得:

通过本次实验,我们解了数码管动态显示的原理,也了解了如何用总线方式控制数码管显示。

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

当前位置:首页 > 高中教育 > 语文

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

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