试验使命一:教材P15使8个发光二极管一起闪耀,并做出延时剖析
试验原理图(a)如上
试验程序清单如下:
ORG 0000H
LOOP: MOV P1,#0FFH
LCALL DELAY
MOV P1,#00H
LCALL DELAY
SJMP LOOP
DELAY: MOV R0,#0FFH //需求2μs
D1: MOV R1,#0FFH //需求255×2=510μs
D2: DJNZ R1,D2 //履行255×255=65025次
DJNZ R0,D1 //履行255次
RET //每次履行LCALL调用1次,需求4μs
END
延时剖析:
在51单片机中DJNZ指令是双周期指令,MOV是单周期指令,RET是双周期指令。
其间在每次LCALL中MOV R0,#0FFH和RET各履行一次。而晶振频率为6MHz,那便是说一个机器周期为2μs。
每履行一次DELAY时MOV R0,#0FFH 指令履行一次,用时2μs;
指令MOV R1,#0FFH 履行255次用时510μs ;
DJNZ两条指令总共履行了(65025+255)×4=261120μs;
RET 指令履行一次,用时4μs;
所以延时时刻大约为(2+510+261120+4)μs=261636μs,大约为262ms。
硬件试验时,P32一向轻轻地闪耀,而P35则一向弱小地亮着。
试验使命二: 经过改动延时程序改动二极管闪耀速度
延时程序如下:
DELAY: MOV R0,#80H //需求2μs
D1: MOV R1,#0FFH //需求128×2=256μs
D2: DJNZ R1,D2 //履行255×128=32640次
DJNZ R0,D1 //履行128次
延时剖析:
DJNZ两条指令总共履行了(32640+128)×4=131072μs。
所以延时时刻大约为(2+256+131072) μs=131330μs,约为131ms。
当延时时刻为改成R0的值时的一半,理论上上述试验中的发光二极管闪耀的速度将会比改动之前的快一倍。但是在实体会的调查中,二极管的闪耀速度并没有快了一倍。这可能是个人的感观所造成的吧!
试验使命三:教材P108例4.9.8 完成8个LED的亮点活动
试验原理图如(a)所示
试验程序清单如下:
MOV A,#0FEH
LOOP: MOV P1,A
LCALL DELAY
RL A //使A的值不带进位向左循环移动
SJMP LOOP
DELAY: MOV R0,#0FFH //需求2μs
D1: MOV R1,#0FFH //需求255×2=510μs
D2: DJNZ R1,D2 //履行255×255=65025次
DJNZ R0,D1 //履行255次
RET
END
程序剖析:
程序中A的初始值为FEH,其二进制方式为11111110,然后将A的值赋给P1,所以P1 的表现方式为最低位P1.0是亮的。之后当即调用延时子程序DELAY,由上述剖析可知DELAY的延时是262ms,再使A的值不进位的向左循环移动,则A变为11111101,最终程序跳到开端处循环履行。而A的值顺次变为11111011,…,01111111。那这个程序所完成的功用便是P1的8位灯顺次亮,即其显现为流水灯。
试验心得:
试验遇到的问题是试验电路板与软件的衔接。第一次刺进接口时,LSIM总是找不到串口,衔接不成功。经重启电脑后翻开软件,从头检测并刺进接口,才顺畅查找到串口并衔接成功。
因为试验之前在自己的电脑上使用住仿真软件完成过,对其根本操作现已了解,所以试验进行得仍是比较顺畅的。本试验主要是延时剖析,使用延时子程序来改动二极管的闪耀速度;理论上的东西和实践上是有那么一点距离的,经过这个试验我理解了。
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/zhizao/261548.html