您现在所在的是:

单片机论坛

回帖:22个,阅读:2661 [上一页] [1] [2] [3] [下一页]
1185
85880527
文章数:136
年度积分:50
历史总积分:1185
注册时间:2006/1/16
发站内信
发表于:2006/2/13 21:01:00
#10楼
原来用KEIL的,后来的公司用AEDK的就跟着用,当然我不是给它做广告什么的,在www.aedk.com.com.cn里去下载一个LCA51.ZIP,不大,就2M多,只支持汇编,几分钟就学会了,只需要学会会编译就够了,因为你没必要买仿真机,所以其它的功能就不要学了。我觉得用什么软件不是很重要。烧写器我就不知道怎么解决了:)
1059
woodyxue
文章数:66
年度积分:50
历史总积分:1059
注册时间:2006/2/5
发站内信
发表于:2006/2/14 12:47:00
#11楼
多谢!
谢谢你的指点,我回头下个软件试一下!你说你现在工作是控制伺服电机的,羡慕死了,我以前也是学机械自动化的,可是现在搞电器了!哦,这里有点程序我不太明白,你要是有空帮我看看!!
LOOP:MOV  P1  A;                     点亮第一个二极管
        MOV   R1   #10;                延迟1s
DEL1:MOV   R2   #200;                DEL1是延迟0.1s
DEL2:MOV   R3    #126;
DEL3:DJNZ    R3    DEL3
       DJNZ    R2   DEL2
       DJNZ    R1    DEL1
大哥我不明白的是#200是什么意思,是十六进制数还是十进制数??另外他的定时怎么是这样啊,不可以用定时器吗?麻烦你帮我人工编译一下,我看不太懂!!1表情
1185
85880527
文章数:136
年度积分:50
历史总积分:1185
注册时间:2006/1/16
发站内信
发表于:2006/2/14 21:25:00
#12楼
这种延时我觉得几乎没什么实用的价值,因为电脑不可能让一个事件耽误这么长的时间的,1秒钟电脑能做很多很多事情的。我喜欢用定时器来处理这种延时的事件的,比如2ms一循环(2ms能做很多事的,PLC的扫描时间一般都还比这个长),定时器中断一次可以把所有需要及时处理的事件都处理一遍,如果有需要非常及时处理的可以用两个定时器,其中一个中断级别最高,定时更短,在这个级别最高的定时中断里处理它们(甚至可以不要外部中断)。那些不重要的事情或是需要浪费很长时间的事件可以在大循环(不在任何中断里的程序)里进行。这种结构你特别需要注意双字节的数据的处理,防止读到半个字而可能出现误判断发生。#200就是#0C8H,电脑认它的,只是我不喜欢这样偷懒。今天虽然过节,但女友跟她妹妹跑到辽宁盘锦那鸟不拉屎的地方搞传销去了,哎,要去烧洗脚水了
1059
woodyxue
文章数:66
年度积分:50
历史总积分:1059
注册时间:2006/2/5
发站内信
发表于:2006/2/15 7:30:00
#13楼
谢谢,可是我还是没看明白!
我的这个程序是p1口控制二极管亮,然后在延时在点亮下一个,依次循环的!!你说的意思有定时中断的嵌套吗??可以给我个例子让我看看不??我原来写的哪个是不是用的机器周期的时间累加的啊!!

好可怜啊,我和我女朋友昨天也没玩什么,其实感情深了并不会在意这些的啊!你是辽宁的??表情表情
1308
eastzsp
文章数:167
年度积分:50
历史总积分:1308
注册时间:2005/8/10
发站内信
发表于:2006/2/17 10:18:00
#14楼
可以是可以,使用堆栈操作要非常的小心,有时侯堆栈的操作会带来不可预料的问题.能避免尽量避免.
981
plc自动化
文章数:30
年度积分:50
历史总积分:981
注册时间:2005/9/6
发站内信
发表于:2006/2/20 9:16:00
#15楼
eastzsp老兄,能不能像细说一下堆栈操作会出现什么不可预料的问题?
1308
eastzsp
文章数:167
年度积分:50
历史总积分:1308
注册时间:2005/8/10
发站内信
发表于:2006/2/20 9:46:00
#16楼
所谓不可预料就是无法知道会出现的问题,比如死机,乱动作,乱显示,或者局部功能正常等。
在51系列的CPU中,堆栈空间共用128BYTE的RAM空间,CPU复位后SP=7,也就是说地址空间SP+1的位置后面都可以做为堆栈空间,当然你可以调整SP.一般来说主要注意以下一些问题:
1、PUSH和POP是成对出现,如果子程序中不小心忘记了POP,或者漏掉了一个POP数据出栈那程序就不能正常返回,造成死机。
2、由于和RAM空间共用,所以在使用RAM空间的时候必须避开堆栈使用的空间,而使用堆栈空间时候也要小心别只顾着PUSH呢,造成栈空间和RAM空间地址冲突。
一般这些问题在使用汇编语言的时候比较突出,使用C语言写程序一般编译器会帮你管理堆栈的,所以基本不用操心会出现堆栈管理出问题。


[此贴子已经被作者于2006-2-20 9:48:20编辑过]
981
plc自动化
文章数:30
年度积分:50
历史总积分:981
注册时间:2005/9/6
发站内信
发表于:2006/2/21 13:55:00
#17楼
eastzsp,你好,我基本上看懂了你写的,但是大家都知道执行一个语句之后, sp自动加程序执行的地址,也就是除了跳转指令都是按照RAM中的地址顺序执行的吧。那PUSH和POP也是吗?如果是的话,怎么会出现乱动作啊?
1308
eastzsp
文章数:167
年度积分:50
历史总积分:1308
注册时间:2005/8/10
发站内信
发表于:2006/2/21 14:22:00
#18楼
你理解错了,CPU每执行一条指令PC自动加一,而不是SP自动加一,SP调整是在子程序调用、RET,RETI,执行PUSH、POP的时候。我只是举例说明,并不是说针对某个系统一定会乱动作,因为如果堆栈出错针对不同的设计,有不同的表现形式,程序飞是最常见的一种表现形式。
931
changyingjie
文章数:10
年度积分:50
历史总积分:931
注册时间:2006/2/19
发站内信
发表于:2006/2/21 21:45:00
#19楼
没必要!

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

93.6006