关注一下,更多精彩等着你!
打开之前的工程,当然新建也可以,具体步骤看之前的文章就行。因为是学习,所以也用不着总是新建工程,起名起一大堆,接下来,除非要用两个执行文件,只要是单独的程序,我们就用这个工程就好了。
打开工程,上回是测试了软件和硬件,都没有问题。我们不用开发板,自学从简单入手,不用考虑译码器和功率放大。对于已经入门的,可能有点简单,但我想对于初来乍到的伙伴,还是慢慢来,别急。技术这碗饭,不论是不是为了挣钱,都要稳扎稳打。越快越难学会。
之前的程序头文件留着。如果想明白,为什么非要用头文件,不写行不行?我会再写一篇文章,讲一下原因。包括程序中的一些关键字。
这回咱来试一个控制单个IO口的操作。我们仅操作一个IO口,其它的不变。这里选择P1.0这个口。
程序还是我们首次测试的程序,之前运行过一次,这回我们对它作些改动,让它进行自动变换。
这就要用到一个延时函数了。咱说的延时不是定时器,就是让程序作一定时间的等待。
我们先说下芯片是如何运行的。晶振是芯片的心跳,由于芯片做出来后,工艺原因,程序运行的最小时间是12个心跳,就是一个机器周期。相当于精确振12下,程序动一下,而一个程序语句,要想完成运算,就平均要4个机器周期,当然也有一个周期的,咱不细看。研究基础结构留给以后学的上路了再说。
1/(12Mhz/12)=1/1M=10∧-6秒。
1秒=10∧3毫秒=10∧6微秒
由上推算看出,1个机器周期就是1微秒,所以完成一个运算是4微秒。我们假设要延时0.5秒,就要有:
0.5*10∧6/4=12500。
也就是大约1万步,我们写个1万,让它一直减到0,就是1万步。减的过程就相当于延时了,因为程序光在那儿算数了,啥也干不了,算完才能干其它的。这个算的过程就是延时的过程。
原理有了,接下来写程序,首先我们测试时的程序不动,仅需要添加延时部分就可以了。
延时程序代码如下,写完后记得编译一下,如果是语法错误,程序会帮你找到。我们要做到0错误,0警告。这样程序输出时才不会出现不必要的问题。减少自己调试的时间。
然后,由于是延时,我们可以通过keil的仿真分步运行,查看一下我们运行的时间是否合适。首先单击第三行那个小锤子一样的图标,进入设置,然后点开仿真选项,我们把晶振频率修改就可以了,改为11.05692.
修改完成后,我们单击右侧的红色的debug按键,进入调试模式。
进入后,在LED程序前,单击左键,设置断点。出现小红点就是设置成功。
接着先单击复位按键,然后再单击运行按键,单击一下就可以了,它会运行到第一个断点停下等待。
出现的两个小三角就是说明程序此时等待在这里,左侧的列表显示的是内部数据,我们看下倒数第二行sec,这是时间。程序从开始到第一个语句的输出,用时0.00048秒。我们再次单击运行按键,观察时间变化。
此时运行到了第二个语句,我们查看时间从0.00048变成了0.087,说明一个延时用了0.087秒,这个跟我们假想的0.5秒有点远啊,我们简单计算下频率1/0.087=11赫兹,先不管,我们用软件仿真一下试试。仿真发现,闪烁一下就没了,我们用示波器看下什么情况。
这个竖着一格是100毫秒,也就是0.1秒,我们从上图中可以看出,每两个黄色的竖线之间的间隔大致就是一格如果细看,0.8格也是差不多的。就相当于0.08秒。跟我们的程序仿真基本一致,说明我们的延时函数延时时间不够,为什么会出现这种情况?
因为程序在计算加减法的时间是速度比较快的,也就是说,他算加减根本不用四个机器周期。我们不管几个周期了。现在是0.08秒,那么,需要0.5秒,就是说需要大致六倍,程序中需要60000。咱们更改后再次仿真试下。
需记得,更改程序需要退出仿真,还是单击红色的debug就可退出了,更改后,需要先编译,再进入debug,不然程序虽然更改了,但是可执行文件还是原来的旧的,就运行不出更改后的效果。
这次就是0.5秒了吧。
通过软件仿真也说明了情况
示波器上也是5格一个脉冲,基本可以了。但是此时我们发现,灯并没有预想中的亮起,依然一闪而逝。我们看下示波器,发现,高电位也是一根根 的细线,几乎没有时间,什么情况呢?这就是很多同学学习初期经常会发生的,在程序中,我们的赋值是在最前边,单片机是顺序运行的,当他运行完第一个延时语句时,i已经从60000减为0了,这时再运行下一个延时语句时,就会直接判断等于0,跳出函数。所以就是一闪而逝。或者看不到发光。如何解决?
我们需要增加一个变量或者使用另一种循环体。简单的先增加一个变量j,让他也等于60000。再仿真一下。
仿真后,波形就变成了0.5秒为5V,0.5秒为0V,这是可以看到,LED0.5秒亮,0.5秒灭。跟我们预期的一致了。
至此,程序调整结束了如果想查看视频的可以后台回复电气,关注后在单片机选项中点击视频观看。
还有硬件仿真运行,大家自己可以动手试试。问题出现不要气馁,因为我们不是什么都会,出现错误是肯定的,更改的过程才是学习,如果一帆风顺,那最终只会是一知半解。
如果有不懂或者问题可以留言或私信。
更多多内容,欢迎关注百家号:小亮谈电气。微信公众号:电气学苑。