打印

从实践中得到的教训

[复制链接]
1788|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chenczy|  楼主 | 2008-8-28 11:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
   编程真是一件非常细心的事。我就因为一个指令,就搞了我2天的时间。大家看看下面二个程序
   这个是错的
   LOOP:
        JNB    P1.0,LOOP
   LOOP1:
        JB     P1.0,LOOP1
   正确的是 
   LOOP:
        JB     P1.0,LOOP
   LOOP1:
        JNB    P1.0,LOOP1
就这么二个指令就搞了二天,本来程序有点长,不好找原因,累得半死才找到,示波器都差点让我给搞环了。看来编程还真是要小心加细心啊。

相关帖子

沙发
gjg191| | 2008-8-28 11:20 | 只看该作者

经验问题!

使用特权

评论回复
板凳
lyjian| | 2008-8-28 11:52 | 只看该作者

都是正确的

看你要干什么而已

使用特权

评论回复
地板
3.3v| | 2008-8-28 12:53 | 只看该作者

高低电平

使用特权

评论回复
5
刘前辈| | 2008-8-28 12:56 | 只看该作者

学习了。

         JB     P1.0,$
         JNB    P1.0,$

容易检错。调换位置而已。

使用特权

评论回复
6
maxking| | 2008-8-28 16:06 | 只看该作者

哪里错了?

看不明白,请指教下。

使用特权

评论回复
7
chenczy|  楼主 | 2008-8-28 16:12 | 只看该作者

我说的不是指令本身有问题

    但是把指令放到程序中去就出错了。再说明白点就是,我要在LOOP和LOOP1之间去等中断,结果LOOP和LOOP1判反了,我等的中断就乱套了。

使用特权

评论回复
8
5880527| | 2008-8-28 19:09 | 只看该作者

等中断?中断不来呢,岂不要死在那里

使用特权

评论回复
9
bg6nw| | 2008-8-28 21:53 | 只看该作者

他本来就是死在这里等中断的

使用特权

评论回复
10
leolle| | 2008-8-29 09:31 | 只看该作者

等中断你早说哦

使用特权

评论回复
11
chenczy|  楼主 | 2008-8-29 10:28 | 只看该作者

因为进来的信号是别人送的

    所以主动在别人那里,别人每给我一个高-低-高这样的一个信号时我就要进中断,结果我指令搞错了,变成了低-高-低进中断了,结果就差了好远,而JNB和JB这二个指令一不小心就混了

使用特权

评论回复
12
甄蔡组合| | 2008-8-29 10:50 | 只看该作者

技术就是这样练出来的

使用特权

评论回复
13
刘前辈| | 2008-8-29 12:52 | 只看该作者

与11楼讨论。

像这种应用显然应该是把外来信号接到本系统MCU的外部中断INT0/INT1管脚,

然后设置TCON控制寄存器中的IT0/IT1—中断类型控制位为下降沿触发即可。

根本不需要程序停止循环等待,(也不会犯这类错误)后台程序该干嘛干嘛,外部信号一到,自动触发前台中断。

使用特权

评论回复
14
chenczy|  楼主 | 2008-8-29 15:51 | 只看该作者

TO:13楼

   我的这个是基准信号,中断信号是另外的,只是这个基准信号一来低的我就要进去中断去。并不是说这个信号就是中断信号。

使用特权

评论回复
15
5880527| | 2008-8-29 17:29 | 只看该作者

扫描随便都能把它扫到,何必等啊

使用特权

评论回复
16
jerkoh| | 2008-8-29 22:56 | 只看该作者

re

我写过最郁闷手误的
;*****************
;设置参数
set_ser1:push acc
         push psw
         mov r1,#1
         ;...略
   
outsev: pop psw
         pop acc
         nop
         nop
         ret

;*****************
;串口服务程序
server:push psw
       push acc
       jnb ti,rev_is
       ;...略

outser:pop acc
       pop psw
       nop
       nop
       reti

rev_is:;
       ...长略
       jmp outsev

使用特权

评论回复
17
农民讲习所| | 2008-8-30 07:08 | 只看该作者

如果

如果 
        JB     P1.0,$
        JNB    P1.0,$
时,正好执行中断程序,比如串口或外部中断什么的,P1.0的脉冲宽度也很窄,这时候会发生检测不到P1.0的变化.LZ如果处理此BUG?

LS:
outser:pop acc
       pop psw
       nop
       nop
       reti
最后几个nop纯粹多余.
push acc,push psw之后,还需要保存R寄存器.

前面几个哥们,用C吧,C可以保证架构的正确性.难道汇编都学会了,C还学不会?

使用特权

评论回复
18
zidaozhou| | 2008-8-30 11:11 | 只看该作者

用汇编写51程序确实要十分注意入栈和出栈问题

用汇编写51程序确实要十分注意入栈和出栈问题,否则程序容易飞到天上去。

使用特权

评论回复
19
gyt| | 2008-8-30 11:20 | 只看该作者

经常会发生

解决时间的长短体现了水平的高下

使用特权

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

本版积分规则

141

主题

792

帖子

0

粉丝