单片机实验报告文档格式.docx
- 文档编号:16644355
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:41
- 大小:2.23MB
单片机实验报告文档格式.docx
《单片机实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《单片机实验报告文档格式.docx(41页珍藏版)》请在冰豆网上搜索。
同组学生姓名:
陈超逸实验地点:
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)?
请学生修改程序,完成此操作
答:
程序如下:
*ptr++=0xff;
心得体会:
只有事先把程序的各部分作用弄清楚,再在原程序上修改,才能达到预计的效果。
实验2内存块移动实验学时:
陈超逸实验地点:
16.05.04实验成绩:
实验程序如下:
xdataunsignedcharBuffer1[256]_at_0x3000;
xdataunsignedcharBuffer2[256]_at_0x4000;
unsignedcharxdata*ptr1;
unsignedcharxdata*ptr2;
ptr1=&
Buffer1;
ptr2=&
Buffer2;
for(index=0;
*ptr2++=*ptr1++;
实验结果:
运行结果如下图所示:
(原图上修改后的图下)
本程序是给出起始地址,用地址加一方法移动块,请思考给出块结束地址,用地址减一方法移动块的算法。
另外,若源块地址和目标块地址有重叠,该如何避免?
修改后结果如下图所示:
汇编语言也有它的独到之处需要不断尝试。
实验项目名称:
3.P1口输入输出实验学时:
陈超逸实验地点:
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计数器实验实验学时:
学习8051内部定时/计数器使用方法
8051内部定时计数器T0,按计数器模式和方式1工作,对P3.4(T0)引脚进行计数。
将其数值按二进制数在P1口驱动LED灯上显示出来
连线
连接孔1
连接孔2
1
P1.0
L0
2
P1.1
L1
3
P1.2
L2
4
P1.3
L3
5
单脉冲输出
T0
1、实验电路
2、实验框图
实验结果
若定时计数器T0,按计数器模式和方式0工作,程序如何修改?
修改后的程序如下所示:
movTMOD,#00000100b;
方式1,记数器
movTH0,#0
movTL0,#0
setbTR0;
开始记数
movP1,TL0;
将记数结果送P1口
了解了如何设置定时器计数器方式控制字的使用,以及定时计数程序的使用。
实验5外部中断实验实验学时:
1.学习外部中断技术的基本使用方法。
2.学习中断处理程序的编程方法。
3.用单次脉冲申请中断,在中断处理程序中对输出信号进行反转
主程序框图外部中断子程序框图
实验程序如下
#include<
reg51.h>
sbitLED=P1^0;
bitLEDBuf;
voidExtInt0()interrupt0
LEDBuf=!
LEDBuf;
LED=LEDBuf;
LEDBuf=0;
LED=0;
TCON=0x01;
//外部中断0下降沿触发
IE=0x81;
//打开外部中断允许位(EX0)及总中断允许位(EA)
while
(1);
模拟仿真
若采用INT1中断源,电路如何连接,程序如何修改?
连线P3.2换成P3.3
voidExtInt0()interrupt2
LEDBuf=1;
LED=1;
TCON=0x04;
IE=0x84;
通过本次实验我们学习了外部中断技术的基本使用方法。
学习中断处理程序的编程方法。
实验6定时器记数实验学时:
1、学习8051内部计数器的使用和编程方法。
2、进一步掌握中断处理程序的编程方法。
Y
主程序框图定时中断子程序框图
实验程序:
#defineTick10000//10000x100us=1s
#defineT100us(256-50)//100us时间常数(6M)
unsignedintC100us;
//100us记数单元
voidT0Int()interrupt1
C100us--;
if(C100us==0){
C100us=Tick;
//100us记数器为0,重置记数器
//取反LED
TMOD=0x02;
//方式2,定时器
TH0=T100us;
TL0=T100us;
IE=0x82;
//EA=1,IT0=1
TR0=1;
//开始定时
while
(1){
实验模拟
若定时时间为500us,计数器初始值是多少?
#defineT100us(256-6)//100us时间常数(6M)
通过本次实验我们学习了8051内部计数器的使用和编程方法,进一步掌握中断处理程序的编程方法
实验7A/D转换实验实验学时:
1、掌握A/D转换与单片机的接口方法。
2、了解A/D芯片ADC0809转换性能及编程。
3、通过实验了解单片机如何进行数据采集。
主程序框图
#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,$;
延时>
movxa,@dptr;
读入结果
movr7,#100
dly:
movdptr,#PortA
djnzr7,dly;
延时
ljmp0
实验现象如下图所示:
试编程用中断方式读回A/D结果。
Mode
equ
082h;
CSO8O9
8000h
PortA
PortB
PortC
CAddr
mov
dptr,#Caddr
a,#mode
movx
@dptr,#CS0809
a,#0
@dptr,a;
a,#40h
mjnz
ACC,$;
a,@dptr;
r7,#100
通过本次实验,我们学会了掌握A/D转换与单片机的接口方法,了解了A/D芯片ADC0809转换性能及编程。
实验8八位段数码管显示实验学时:
了解数码管动态显示的原理。
了解用总线方式控制数码管显示
利用实验仪提供的显示电路,动态显示一行数据
否
是
四、实验结果与分析
#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)
while(CNT--!
=0)
for(i=100;
i!
=0;
i--);
voidDisplayLED()
unsignedchari,j;
unsignedcharPos;
unsignedcharLED;
Pos=0x20;
//从左边开始显示
for(i=0;
i<
LEDLen;
i++){
OUTBIT=0;
//关所有八段管
LED=LEDBuf[i];
OUTSEG=LED;
OUTBIT=Pos;
//显示一位八段管
Delay
(1);
Pos>
>
=1;
//显示下一位
}OUTBIT=0;
//关所有八段管}
{unsignedchari=0;
unsignedcharj;
while
(1){LEDBuf[0]=LEDMAP[i&
0x0f];
LEDBuf[1]=LEDMAP[(i+1)&
LEDBuf[2]=LEDMAP[(i+2)&
LEDBuf[3]=LEDMAP[(i+3)&
LEDBuf[4]=LEDMAP[(i+4)&
LEDBuf[5]=LEDMAP[(i+5)&
i++;
for(j=0;
j<
30;
j++)
DisplayLED();
//延时
思考题:
1、该数码管是共阴极还是共阳极?
共阳极。
2、LED显示方法有哪些?
接并口显示和单片机串口动态扫描的led显示。
通过本次实验,我们解了数码管动态显示的原理,也了解了如何用总线方式控制数码管显示。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)