打印

简单的延时程序理解,求鉴定...

[复制链接]
2795|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
vincent.liu|  楼主 | 2011-6-3 22:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
终于狠下决心要学习单片机了.
买了两套经典教材
首先是<平凡的单片机教程>的作者周坚出的<单片机轻松入门>
然后是<例说8051>,在卓越订了,一共是48元包邮,我觉得如果这48块钱能够让
教会我单片机的知识的话,那是太值了.以前都在网上下电子书,呵呵.现在我觉得
有本纸质的书,会更有感觉.随时随地都可以看.不用整天坐在电脑前.
有点扯远了.其实我是来问问题D,呵呵

粗略地看了两本.周坚的比<例说8051>更适合我.主要是前者更自然,更基础一些.
本来我是看好<例说8051>的,甚至是先看它的,看了一两章,觉得还是有挺多东西要先背
下来,呵呵..而且它里面写程序没有用KEIL集成环境,还手动连接,,,而周坚的就是教KEIL,
光盘还带有软件模拟开发版(就是一些DLL),再有就是读他的书,你会发现他真是很细心.
几乎每个细节都照面到了.比如说程序的解读,说得很细,我有过VB编程的基础,其实有些
地方我是知道的,比如说行号(标号),他都会在忆中解释,这点很好.对我好奇心强烈的人来说,呵呵



再次回归到主题,如果你也和我一样买了周坚的教程(第二版的,非C语言版本),可以番到
第21页.程序如下...

;以下是延时子程序
DELAY: MOV    R7,#250   ;(6)
D1:      MOV    R6,#250   ;(7)
D2:      DJNZ   R6,D2     ;(8)
           DJNZ    R7,D1    ;(9)
           RET                  ;(10)
           END                 ;(11)


由于我是汇编新手,所以很依赖书中的程序解读.这点跟一个盲人很相似,呵呵
而且我天生疑心较重.对于书中的解释,我觉得不太清楚.在这里确认下,请大家帮我
鉴定下,我的理解是不是正确的.

由于第(7)句把250送入到寄存器R6,所以R6装载的是250,
第(8)句,DJNZ,将R6里面的数减1,R6变成240,比较下是否等于0,如果等于0,执行第(9)句,如果不等于0,则执行 D2,
我的疑问是,DJNZ是否会把R6里面的数减1,并把结果再次存入到R6?

请鉴定下我这个理解是否正确?

相关帖子

沙发
NE5532| | 2011-6-3 22:13 | 只看该作者
学单片机不能光看书,要自己看指令集,你对着汇编指令来说DJNZ这条指令做了些什么,就知道了。

预先告诉你,你的认为是对的,不过为什么对请自己看了。

使用特权

评论回复
板凳
渤海三叠浪| | 2011-6-3 23:05 | 只看该作者
你的情况我大概了解了

我根据自己的理解说下

首先多上网搜搜网上的初学者是咋学的

比如 先学C还是先学汇编。  有高人说你要先学汇编。但我觉得你先不要看汇编 要先看C语言。要打好基础。

C基础要好,再次强调一下。

然后看单片机资料  看啥呢  看郭天祥的视频就好了  看他的每一讲视频之前 先读一读你买的书的相关内容。这样不至于一点也听不懂。
反正最重要的是要建立信心。

要买块板子  如果不知道买啥板子好,就买郭天祥的。 尽管我没买他的

板子至少要具备两个功能  一个是1个LED灯泡,  还有最好能有串口。  这些就足够了!

这些就是我的个人看法,不一定适合你。

还有你可以上网搜索《51单片机C语言实例浅析》  我自己写得  刚学单片机3个月写得 哈哈  自吹自擂一下!

基础很重要 培养兴趣很重要 其他都是浮云

使用特权

评论回复
地板
云的追寻| | 2011-6-3 23:20 | 只看该作者
恩,入门看郭天祥的《新概念51单片机教程》,很好,我也是这么过来的,这是我看的第一本关于单片机的书,呵呵。

使用特权

评论回复
5
ali_sww| | 2011-6-4 20:34 | 只看该作者
学习单片机一定是要有开发板得。。《例说8051》还有一版C语言的,我还是建议单片机用C

使用特权

评论回复
6
aidongmingwei| | 2011-6-4 23:33 | 只看该作者
对  实践出真知

使用特权

评论回复
7
flyawjk| | 2011-6-7 10:21 | 只看该作者
我觉得对于新手来说单片机用C比较好一点,可移植性强,通用性强,当然开发板是必须的,否则你永远不知道你编写的程序是否正确,而且对于新手来说如果编写的程序你看不到结果那对你也是一种信心的打击。

使用特权

评论回复
8
vincent.liu|  楼主 | 2011-6-23 13:37 | 只看该作者
呵呵...对这里不是很熟悉.今天突然才想起要结帐D.哈

使用特权

评论回复
9
joyme| | 2011-6-24 10:12 | 只看该作者
第(8)句,DJNZ,将R6里面的数减1,R6变成240,比较下是否等于0,如果等于0,执行第(9)句,如果不等于0,则执行 D2,
你家的250 - 1 = 240?呵呵

相当于c语言:
i = 250;
j = 250;
while(i--)
{
    while(j--)
         ;
}

使用特权

评论回复
10
readdai| | 2011-6-24 10:56 | 只看该作者
DJNZ干了什么事情那你就要看汇编指令的意义啦,你连汇编指令的意义都不懂的话,何谈使用它们呢?
不同单片机可能有不同的汇编指令,当然都大同小异了,如果用汇编的话,首先你就得看它们汇编的意义吧?

使用特权

评论回复
11
just志鹏| | 2011-7-9 12:04 | 只看该作者
看不懂啊

使用特权

评论回复
12
shamodehuhuan| | 2011-7-9 12:22 | 只看该作者
哈~开始我也遇到这些事情啦   学了半天汇编,没怎么有效果,又开始学了c,觉得一下子就豁然开朗啦,也容易理解了

使用特权

评论回复
13
何工| | 2011-7-9 14:13 | 只看该作者
DJNZ指令不需要经过累加器A,,,,,,所以不需经取出来,,减1再存回去的操作..

你上面的DJNZ R6,D2指令中  直接从R6中的值减1,再判断R6中是否为0...

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

63

帖子

2

粉丝