您的位置:控制工程论坛网论坛 » 教程与手册 » 单片机学习,C51单片机入门经典30课 第二课

xilinxue

xilinxue   |   当前状态:在线

总积分:16186  2024年可用积分:0

注册时间: 2008-06-26

最后登录时间: 2020-03-22

空间 发短消息加为好友

单片机学习,C51单片机入门经典30课 第二课

xilinxue  发表于 2009/1/17 13:13:34      830 查看 2 回复  [上一主题]  [下一主题]

手机阅读

第二课,用指令方式延时闪烁LED 灯


本章将学习如何使LED 闪烁,和如何查看变量的值。
单片机内部的CPU 工作都是要靠时钟驱动的。在标准51 芯片中,每个指令周期是12 个时钟。所以只要外部时钟固定,某一条指令运行的时间也是固定的。比如本试验中的单片机晶振振荡输出的时钟是22118400HZ,一条单周期指令执行的时间就是12/22118400秒=5.425347×10-7 秒,这样如果你想在程序里延迟一段时间,就可以用循环执行多少条指令来实现。这是一个最简单的延时方法,优点是不占用其他的单片机资源,缺点是不容易计算准确延时时间,而且延时过程中CPU 无法做其他工作。指令延时方法一般用在一些不用精确计时的场合。在需要精确计时的场合,需要使用定时器,在之后的课程中将会学到。


现在请打开lesson02code 目录下的工程文件。
如图:




程序由一个循环组成,在点亮P10 口的LED 之后,延时一段时间,再灭掉LED,又延时一段时间,之后循环到前面。


for()循环后面直接一个分号,表示这个循环里面什么事情也不做,就等循环完成指定的次数就退出来。这也是指令循环延时的最常见的C 写法。


编译后,按进入仿真。




按全速运行,可以看到P1.0 的LED 灯不断地闪烁。


下面我们用另一个更简单的方式点灯,就是取反IO 口的状态。取反指令将当前bit 变量的状态反转,当前是1,取反后就是0,当前是0,取反后就是1。IO 口相当于一个bit 变量,也可以这样取反。


请修改程序如下:




编译成功后,再点全速运行。同样可以看到LED 闪烁的现象。


可以看到,这种方法,我们只需要一次延时,就可以实现闪烁了。


下面我们再来学习如何查看变量n 在运行中的值。注意,要查看变量的值,只能在程序停下来的状态下查看。在程序运行的过程中,程序不断地运行,变量也在不断地变化,一般是无法查看的。


点停止程序,将鼠标放在程序中的“n”上面,





可以看到旁边出现了一个小框框,上面显示了n=0x47D3,这就是变量此时的值。


如果觉得这样可能会点不准确,可以选中你要看的变量,同样会显示变量的值,个人感觉这种操作更为方便。如图:




用上面的选中的方式,你还可以选中一个表达式,也会显示出这个表达式的结果:
如图,选中n<20000,结果为1。




在命令行输入的方法也可以看变量,在命令行输入n,回车,就看到结果了。请注意看下图的命令行窗口的结果。





这里再教一招,如果我想让n 现在就变成我想要的值怎么办?


这也是调试常见的手段,设置一个变量的值,比如,让n =0x1234,只要在命令框里输入“n=0x1234”就行了,几乎所有变量都可以这样直接设置,包括IO 口,比如你输入“P1.1=0”,结果第二个灯就亮了。


还有一招常用的,就是在watch 窗口看变量。点watch 图标,就是那个有个眼镜的图标,打开watch 窗口。如图:





这个窗口里有locals 页就是当前函数使用的变量的列表,还有有watch 1 和2 两个窗口,就是自定义要看的变量的值,可以手工输入,也可以选中某个变量,按右键,将出现一个菜单。选择add 到watch 窗口即可,在程序停止时随时看到此变量的值。


注意要看某个变量,如果这个变量是某个函数私有的,必须是程序停止时并且PC 已经停止在了这个函数中才可以看到,各种看变量的情况都是这样。


还有一种直接看存储器的方法,可以看到所有存储器的值,但是和变量名称就不是那么好对应起来了。点memory 窗口图标,打开memory 窗口,如图:





在Address 窗口输入:“d:0x00”就可以看到data 空间的从0x00 开始的所有内存。如上图。


输入“i:0x00”,就可以看到idata 空间的所有内存的值。
输入“x:0x00”,就可以看到xdata 空间的所有内存的值。
输入“c:0x00”,就可以看到code 空间的所有程序。


在实际的硬件调试方式中,如果不用看memery 窗口,就建议不用打开它。因为保持它的打开会增加仿真时通讯的时间,特别是单步运行的时间。


Keil 调试环境的使用可以千变万化,还有许多方法会在之后的课程中陆续介绍,您可以可以去看购买dx516 的光盘中附带的uv2 使用文档。


这一章就完成了,我们学会了,指令延时,取反的用法,还有更重要的就是如何在keil调试环境中查看变量。

1楼 0 0 回复
总共 , 当前 /