最新版单片机实验报告1534399Word下载.docx
《最新版单片机实验报告1534399Word下载.docx》由会员分享,可在线阅读,更多相关《最新版单片机实验报告1534399Word下载.docx(40页珍藏版)》请在冰豆网上搜索。
Output1:
mova,#0fEH
movr5,#8
loop1:
3
CLRC
movC,DIR
JCOutput2
movP1,a
rla
AcallDelay
djnzr5,loop1
SjmpOutput1
Output2:
mova,#07fH
loop2:
JNCOutput1
rra
djnzr5,loop2
SjmpOutput2
Delay:
movr6,#0
DelayLoop1:
movr7,#0
DelayLoop2:
NOP
djnzr7,DelayLoop2
djnzr6,DelayLoop1
end4
八、实验现象:
进行全速运行后,跑跑马灯变亮,当拨动开关后,可以改变跑马灯的方向,实验结果与设计程序运行结果相符合,实验得到验证.
九、实验分析:
整体功能就是P3.0口相当于开关把值给了C,当在output1时C为0,如果在这时候按下开关以后。
继续完成剩下的程序后就跳到0utput2进行这时跑马灯的方向反了,在调用delay的程序延时了时间=256*256*4*机器周期时间。
十、实验总结:
首次单片机实验是对于实验箱进行了解及熟悉单片机的编程软件。
进行I/O口输入和输出的实验,通过8位电平的输出,用来控制跑马灯的方向。
这是第一个实验,但是由于刚刚开始,还不回自己编写程序,所以只能照搬原有程序了,但是自己会努力的。
实验二外部中断实验
2013年11月4日星期一
三、实验目的:
学习外部中断技术的基本使用方法。
INT0端接单次脉冲发生器。
按一次脉冲产生一次中断,CPU使P1.0状态发生一次反转,P1.0接LED灯,以查看信号反转。
1)系统各跳线器处在初始设置状态,用导线连接单次脉冲模块的输出端到CPU模块的P32;
CPU模块的P10接八位逻辑电平显示模块的灯。
3)连续按动单次脉冲产生电路的按键,发光二极管L0每按一次状态取反,即隔一次点亮。
//*************************************************
导线连接单次脉冲模块的输出端到CPU模块的P32,
CPU模块的P10接八位逻辑电平显示模块的L0灯。
LEDBITP1.0
LEDBufBIT20H
org0
ljmpStart
org3
Interrupt0:
pushPSW;
保护现场
cplLEDBuf;
取反LED
movc,LEDBuf
movLED,c
popPSW;
恢复现场
reti
Start:
clrLEDBuf
clrLED
movTCON,#01h;
外部中断0下降沿触发
movIE,#81h;
打开外部中断允许位(EX0)及总中断允许位(EA)
OK:
ljmpOK
end
全速运行程序,LED灯不亮,按下脉冲输入键时,每按一次脉冲产生键时,LED灯的状态取反一次。
本实验将TCON置入#01H,选择了外部中断0下降沿触发。
又由于P3.2直接与单次脉冲模块的输出端相连,则按下一次单次脉冲产生电路的按键,产生一次外部中断。
每产生一次中断,将LEDBuf取反一次,然后将LEDBuf内容放入进位标志位C,再将C内容放入20H,由于20H与LED灯相连,则每次按一下脉冲产生键,LED灯状态取反一次。
本次实验,对于外部中断功能的实现有了一定的的认识。
通过中断来对LED灯状态的不断取反,加深了对课本上中断这一章的理解层度。
外部中断在实际应用中处于十分重要的地位,许多设计中都应用了外部中断。
虽然这只是最基本的中断实验,在今后的学习中还会有更深的讲解,但是这却是目前最适合我们自己动手操作的实验,很有帮助。
6
实验三定时/计数器实验
2013年11月11日星期一
三、实验目的:
学习MCS-51内部计数器的使用和编程方法。
使用MCS-51内部定时/计数器,定时一秒钟,CPU运用定时中断方式,实现每一秒钟输出状态发生一次反转,即发光管每隔一秒钟亮一次。
1)系统各跳线器处在初始设置状态,用导线连接CPU模块P10到八位逻辑电平显示模块的L0。
3)运行程序观察发光二极管隔一秒点亮一次,点亮时间为一秒。
导线连接CPU模块P10到八位逻辑电平显示模块的L0.
Tickequ10000;
10000x100us=1s
T100usequ156;
100us时间常数(6M)
C100usequ30h;
100us记数单元7
LEDBufbit20h
org000bh
T0Int:
pushPSW
mova,C100us+1
jnzGoon
decC100us
Goon:
decC100us+1
mova,C100us
orla,C100us+1
jnzExit;
100us记数器不为0,返回
movC100us,#27H;
#high(Tick)
movC100us+1,#10H;
#low(Tick)
100us记数器为0,重置记数器
Exit:
popPSW
movTMOD,#02h;
方式2,定时器
movTH0,#t100us
movTL0,#t100us
movIE,#b;
EA=1,IT0=1
setbTR0;
开始定时
clrP1.0
#high(Tick)
#low(Tick)
Loop:
movP1.0,c
ljmpLoop
8
八、实验结果:
全速运行并按下按钮后,发光二极管点亮,大约1秒后熄灭,又过1秒,再次点亮,之后又熄灭,如此循环下去。
这里使用计时器T0进行1s中断然后使led灯1s亮1s灭,但是这里应为T0方式2记不到1s所以用C100us来做标记来使时间满足1s=10000*100us。
本次实验让我学会了如何利用定时器定时时间长于该方式下的最大时间。
而且这次实验让我明白了等待中断有不只一条语句可以使用。
理论知识毕竟只是纸上谈兵,只有应用到实际操作中,才能收获价值。
实验四交通灯控制实验
2013年11月18日星期一
掌握十字路口交通灯控制方法。
利用系统提供的双色LED显示电路,和四位静态数码管显示电路模拟十字路口交通信号灯。
4位LED数码管显示时间,LED显示红绿灯状态。
P10同时接G1、G3;
P11同时接R1、R3;
P1.2同时接G2、G4;
P1.3同时接R2、R4;
P1.6、P1.7分别接静态数码显示的DIN、CLK。
3)观察十字路口交通灯效果。
//*******************************************************************
接线:
P1.0同时接G1、G3,P1.1接R1、R3,P1.2接G2、G4,P1.3同时接R2、R4,
P1.6、P1.7接静态数码显示的DIN、CLK。
//*******************************************************************10
SECOND1EQU30H;
东西秒寄存器
SECOND2EQU31H;
南北秒寄存器
DBUFEQU40H;
显示缓冲1
TEMPEQU44H;
显示缓冲2
LED_G1BITP1.0;
东西绿灯
LED_R1BITP1.1;
东西红灯
LED_G2BITP1.2;
南北绿灯
LED_R2BITP1.3;
南北红灯
DinBITP1.6;
串行显示数据
CLKBITP1.7;
串行显示时钟
ORG0100H
LCALLSTATE0;
调用状态0
LCALLDELAY;
调用延时
MOVTMOD,#01H;
置T0工作方式1
MOVTH0,#3CH;
置T0定时初值50mS
MOVTL0,#0B0H
SETBTR0;
启动T0CLREA
LOOP:
MOVR2,#20;
置1S计数初值50mS*20=1S
MOVR3,#20;
红灯20S
MOVSECOND1,#25;
东西秒显示初值25S
MOVSECOND2,#25;
南北秒显示初值25S
LCALLDISPLAY
LCALLSTATE1;
调用状态1
WAIT1:
JNBTF0,WAIT1;
查询50mS到否
CLRTF0
恢复T0定时初值50mS
启动T0
DJNZR2,WAIT1;
判1S到否?
未到继续状态1
置50mS计数初值10
DECSECOND1;
东西秒显示减一
DECSECOND2;
南北秒显示减一
DJNZR3,WAIT1;
状态1维持20S
***************************************************
MOVR2,#5;
置50mS计数初值5*4=20
MOVR3,#3;
绿灯闪3S
MOVR4,#4;
闪烁间隔200mS
MOVSECOND1,#5;
东西秒显示初值5S
MOVSECOND2,#5;
南北秒显示初值5S
WAIT2:
LCALLSTATE2;
调用状态2
JNBTF0,WAIT2;
DJNZR4,WAIT2;
判200mS到否?
未到继续状态2
CPLLED_G1;
东西绿灯闪
DJNZR2,WAIT2;
置50mS计数初值
DJNZR3,WAIT2;
状态2维持3S
MOVR3,#2;
黄灯2S
MOVSECOND1,#2;
东西秒显示初值2S
MOVSECOND2,#2;
南北秒显示初值2S
WAIT3:
LCALLSTATE3;
调用状态3
JNBTF0,WAIT3;
查询30mS到否
DJNZR2,WAIT3;
未到继续状态3
置50mS计数初值11
DJNZR3,WAIT3;
状态3维持2S
WAIT4:
LCALLSTATE4;
调用状态4
JNBTF0,WAIT4;
DJNZR2,WAIT4;
未到继续状态4
DJNZR3,WAIT4;
状态4维持20S
WAIT5:
LCALLSTATE5;
调用状态5
JNBTF0,WAIT5;
恢复T0定时初值100mS
DJNZR4,WAIT5;
未到继续状态5
CPLLED_G2;
南北绿灯闪
闪烁200mS
DJNZR2,WAIT5;
置100mS计数初值12
DJNZR3,WAIT5;
状态5维持3S
WAIT6:
LCALLSTATE6;
调用状态6
JNBTF0,WAIT6;
查询100mS到否
DJNZR2,WAIT6;
未到继续状态6
置100mS计数初值
DJNZR3,WAIT6;
状态6维持2S
LJMPLOOP;
大循环
STATE0:
状态0
MOVP1,#0
CLRLED_G1
SETBLED_R1;
东西红灯亮
CLRLED_G2
SETBLED_R2;
南北红灯亮
RET
STATE1:
状态1
SETBLED_G1;
东西绿灯亮
CLRLED_R1
STATE2:
状态2
CLRLED_G213
STATE3:
状态3
SETBLED_G1
东西黄灯亮
STATE4:
状态4
SETBLED_G2;
南北绿灯亮
CLRLED_R2
STATE5:
状态5
STATE6:
状态6
SETBLED_G2
南北黄灯亮
DISPLAY:
数码显示
MOVA,SECOND1;
MOVB,#10;
16进制数拆成两个10进制数
DIVAB
MOVDBUF+1,A
MOVA,B
MOVDBUF,A
MOVA,SECOND2;
MOVDBUF+3,A
MOVDBUF+2,A
MOVR0,#DBUF
MOVR1,#TEMP
MOVR7,#4
DP10:
MOVDPTR,#LEDMAP
MOV
MOVC+DPTR
MOV@R1,A
INCR0
INCR1
DJNZR7,DP10
MOVR0,#TEMP
MOVR1,#4
DP12:
MOVR7,#8
DP13:
RLCA
MOVDIN,C
CLRCLK
SETBCLK
DJNZR7,DP13
DJNZR1,DP12
LEDMAP:
DB3FH,6,5BH,4FH,66H,6DH;
0,1,2,3,4,5
DB7DH,7,7FH,6FH,77H,7CH;
6,7,8,9,A,B
DB58H,5EH,7BH,71H,0,40H;
C,D,E,F,,-
movr5,#5
DLoop0:
movr6,#0
DLoop1:
movr7,#0
DLoop2:
NOP
djnzr7,DLoop2
djnzr6,DLoop1
djnzr5,DLoop0
ret
END
全速运行后,东西路口的绿灯亮,南北红灯亮,20秒后东西绿灯闪烁,3秒后熄灭,同时黄灯亮,维持2秒后熄灭,红灯亮,同时南北红灯熄灭,南北绿灯亮,20秒后绿灯闪亮,3秒后熄灭,同时黄灯亮,又过2秒熄灭,同时红灯亮,东西红灯熄灭,东西绿灯亮,如此循环。
完成了上述所需的交通灯的要求,而且数码管可以正确的显示所处的时间。
九、实验总结:
这次实验即交通灯的实验可能是本学期实验中程序最复杂的一个了,但是也是最接近生活的一个实验。
通过这次实验我体会到了一个大的程序都需要很多程序结合在一起最后才能完成所需的任务,这里就是把交通灯的每个状态分开然后一个一个编译,而且也用到了数码管显示程序。
只有注意每一个小的细节,才能最后综合在一起,形成一个大的复杂的整体,学习也应如此。
实验五串转并与并转串实验
2013年11月25日星期一
1.掌握使用74LS164扩展输出方法。
2.掌握使用74LS165扩展输入的方法。
使用74LS165扩展输入数据,使用74LS164扩展输出数据。
74LS165的并行口接八位逻辑电平输出(开关),CPU使用P1.0、P1.1和P1.2串行读入开关状态;
74LS164的并行口接一只数码管,CPU使用P1.3和P1.4串行输出刚读入的开关状态,使之在数码管上显示出来。
五、