在编写单片机程序时,例如 DDRA=0xff; 这个0xff是怎么确定的呢?

如题所述

KEILC51里如何查看变量的值

用指令方式延时闪烁LED 灯

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

程序由一个循环组成,在点亮P10 口的LED 之后,延时一段时间,再灭掉LED,又延时一段时间,之后循环到前面。for()循环后面直接一个分号,表示这个循环里面什么事情也不做,就等循环完成指定的次数就退出来。这也是指令循环延时的最常见的C 写法。编译后,按进入仿真。

按全速运行,可以看到P1.0 的LED 灯不断地闪烁。下面我们用另一个更简单的方式点灯,就是取反IO 口的状态。取反指令将当前bit 变量的状态反转,当前是1,取反后就是0,当前是0,取反后就是1。IO 口相当于一个bit 变量,也可以这样取反。请修改程序如下:

编译成功后,再点全速运行。同样可以看到LED 闪烁的现象。可以看到,这种方法,我们只需要一次延时,就可以实现闪烁了。下面我们再来学习如何查看变量n 在运行中的值。注意,要查看变量的值,只能在程序停下来的状态下查看。在程序运行的过程中,程序不断地运行,变量也在不断地变化,一般是无法查看的。点停止程序,将鼠标放在程序中的“n”上面。

[ 此帖被杀手不冷在2008-09-08 19:54重新编辑 ]

顶端 Posted: 2008-09-08 19:40 | 6 楼

小 中 大 引用 推荐 编辑 只看 复制

可以看到旁边出现了一个小框框,上面显示了n=0x47D3,这就是变量此时的值。如果觉得这样可能会点不准确,可以选中你要看的变量,同样会显示变量的值,个人感觉这种操作更为方便。如图:

在命令行输入的方法也可以看变量,在命令行输入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调试环境中查看变量。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-07-01
在AVR 单片机里 DDRA寄存器是用来设置IO口方向的

1表示输出口
0表示输入口
每一位对应一个端口
第2个回答  2011-07-01
这个是根据实际情况确定的,具体怎么定那就不好说了,应为情况太多了比如这个是端口方向寄存器,那根据需要,配置端口输出、输入