发新帖我要提问
12
返回列表
打印

51新手问题:中断响应后片子里面哪些地方改写了

[复制链接]
楼主: bg6nw
手机看帖
扫描二维码
随时随地手机跟帖
21
hotpower| | 2007-1-22 23:02 | 只看该作者 回帖奖励 |倒序浏览

三十而立~~~不晚~~~

使用特权

评论回复
22
bg6nw|  楼主 | 2007-1-22 23:40 | 只看该作者

平凡老师的教材真好

我是一个星期之前开始看的【平凡的单片机】,之前没有接触过单片机,看了他的教程依葫芦画瓢写的这个半拉的,漏洞百出的,貌似程序的东东,见笑。
因为本人文化程度不高,初中毕业,基础不好,只能看这些速成的教材,至于程序结构之类的,呵呵,看不懂的准

使用特权

评论回复
23
dengm| | 2007-1-23 00:17 | 只看该作者

加 IE=0, 确保不被中断

    TIMER_1  DATA 30H
    ;....
    INC TIMER_1
    ;.......

    acall treti;//空调用一次reti
    clr a
    push acc
    push acc
    MOV IE, A   ; 加 IE=0, 确保不被中断
treti:
    reti;//调用第二次reti//;回到开始,挂掉电话,重来。

使用特权

评论回复
24
hotpower| | 2007-1-23 00:33 | 只看该作者

又来一个~~~学好汇编,要先拜邓苗同志为师~~~

在此处加不加clr ea不是很重要,当然最好加上,否则其他中断可能要搞一些破坏活动.
但复位后应该clr ea或mov ie,#0,且设置好sp后再经过2次reti后再开始运行初始化程序为好.

使用特权

评论回复
25
bg6nw|  楼主 | 2007-1-23 11:11 | 只看该作者

我想也是

还有很多问题,软复位太难了
特别是堆栈部分,堆进去多少,就要弹出来多少,要不几十个软复位下来,堆栈就可能溢出到其他地方,到时候执行的是什么就不好说了。
我现在还不知道软复位之后怎么清堆栈呢,是不是像菜农前辈说的设置好SP后用两个ERTI弹空它

使用特权

评论回复
26
bg6nw|  楼主 | 2007-1-23 11:21 | 只看该作者

我发现学单片机就像金庸老先生的笑傲江湖

笑傲江湖里面有对华山派的描写,说道是剑宗和气宗,剑宗是先学技巧,入门很快,气宗是先学基础,等功力到家了,剑就自然成了。我现在是入了剑宗了,呵呵

使用特权

评论回复
27
xwj| | 2007-1-23 11:25 | 只看该作者

堆栈不成问题,你重设SP后原来的就都不管了:-)

当然,之前的数据丢失、程序中断(中止)、外围模块操作到一半等会不会造成问题就看你想没想到了

所以才说软复位没你想的那么简单

使用特权

评论回复
28
bg6nw|  楼主 | 2007-1-23 11:39 | 只看该作者

我想好了,做硬复位

我想好了,软复位太难,不是我现在现学可以弄成的,就像各位大侠说的,有一个地方照顾不到,就会出现不可欲知的问题。
下一步我想用空端口做一个硬复位,知难而退了,呵呵

使用特权

评论回复
29
computer00| | 2007-1-23 12:08 | 只看该作者

真是晕菜,搞个主循环不就得了?还要搞复位?

使用特权

评论回复
30
hotpower| | 2007-1-23 12:17 | 只看该作者

主程序里要有00(圈圈)~~~

使用特权

评论回复
31
dengm| | 2007-1-23 12:22 | 只看该作者

没那么复杂

          STACK_BUF EQU 60H
          F_55      DATA 7EH
          F_AA      DATA 7FH
     ;-------------------------------
       ORG 0000H
        AJMP START
        NOP
 

INT_RET:
        RETI  

START:
       CLR A
       MOV IE, A
       MOV PSW, A
       CPL A
       MOV P1, A
       MOV P3, A
       MOV SP, #(STACK_BUF-1)
       ACALL INT_RET
       ACALL INT_RET
       MOV A, F_55
       CPL A
       XOR A, F_AA
       JNZ CLR_RAM_1
         MOV A, #55H
         XOR A, F_AA
         JZ SKIP_CLR_RAM
CLR_RAM_1:
           CLR A
           MOV R0, A 
CLR_RAM:
             MOV @R0, A
           DJNZ R0, CLR_RAM
           MOV F_55, #55H
           MOV F_AA, #0AAH

SKIP_CLR_RAM:
   ;....
   ;...
           



        ;....
        ;....
 

使用特权

评论回复
32
bg6nw|  楼主 | 2007-1-23 15:18 | 只看该作者

谢谢邓大侠

看了半天,理解一点了
等会我把你的这个初始化程序粘贴到我的程序头上,试试,来个貂续狗尾。

使用特权

评论回复
33
hotpower| | 2007-1-23 16:10 | 只看该作者

XOR A, F_AA改为XRL A, F_AA

学邓大侠你可要小心点~~~他根基太深,小心把你套牢~~~

使用特权

评论回复
34
caai| | 2007-1-23 20:23 | 只看该作者

这么强!

不是吧~~    7.8天   不要这样无情的打击我的自信心啊  还是去做点端盘子的事算了~~

使用特权

评论回复
35
bg6nw|  楼主 | 2007-1-23 21:09 | 只看该作者

还强呢

我写的这些东东,对前面几位大侠来说,呵呵。
打个比方吧,就像你看三年级小学生写的作文一样

使用特权

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

本版积分规则