再提汇编软复位问题?

[复制链接]
 楼主| diannaoza 发表于 2007-1-22 12:26 | 显示全部楼层 |阅读模式
org 0000h
ajmp beg
org 0003h
reti
org 000bh
reti
org 0013h
reti
org 001bh
reti
org 0023h
reti

org 0030h
beg:
jb 00h,beg1
inc 21h
mov r6,#99h
beg1:
mov r6,#88h
loop1:
cpl 00h
       clr a;;软复位
       push acc
    push acc
    reti ;;软复位
nop
ajmp loop1
end

看了相关的贴子,说复位到0000h,重新运行,寄存器状态不确定?
我上面的例子软件模拟运行却是确定的。
//我想得到的是位00h,在软复位后还是保持在没软复位前的状态//。
当00h=1时,软复位后它的值还是1,不会因为软复位而改变。
这样运行程序有问题吗?
hotpower 发表于 2007-1-22 12:37 | 显示全部楼层

应该没问题,如何知道有问题???

maychang 发表于 2007-1-22 18:46 | 显示全部楼层

没掉电,各RAM内容就是确定的,不会成为随机数

各SFR在硬复位时初始化,软复位不会初始化。
conwh 发表于 2007-1-22 21:25 | 显示全部楼层

还是不建议这样使用,因为你的这段程序不是充分地说明各

比如说,你的口状态当发生改变时,你这样的“复位”就不能改变口的状态,有时可能还是危险的。
 楼主| diannaoza 发表于 2007-1-22 23:55 | 显示全部楼层

我想知道这样的软复位什么场合可以用,适合用?

当然我想要的是就是不想让寄存器的状态改变,而让程序从头(0000H)处开始运行?当然是有用处的。
也就想多解下这样的软件复位,可以在什么场合下用,适合用,可靠用,不会说这样的软复位什么场合也不能用吧?HeHe...
hotpower 发表于 2007-1-23 00:02 | 显示全部楼层
 楼主| diannaoza 发表于 2007-1-23 00:04 | 显示全部楼层

软复位后想在特定的时间得到运行体!

;;硬件带硬狗;;想得到在特定的时间里“运行体”;;
org 0000h
ajmp beg
org 0003h
reti
org 000bh
reti
org 0013h
reti
org 001bh
reti
org 0023h
reti

org 0030h
beg:
jb 00h,beg1
;;;
;;;运行体后
pcon,#2;;;
beg1:
mov p1,#0ffh
mov p3,#0ffh
mov tmod,#22h
mov smod,#55h
mov scon,#50h
mov ie,#83h
..
loop1:
..
cpl 00h
..
       clr a;;软复位
       push acc
    push acc
    reti ;;软复位
nop
ajmp loop1
end

看了相关的贴子,说复位到0000h,重新运行,寄存器状态不确定?
我上面的例子软件模拟运行却是确定的。
//我想得到的是位00h,在软复位后还是保持在没软复位前的状态//。
当00h=1时,软复位后它的值还是1,不会因为软复位而改变。
这样运行程序有问题吗?

 
 楼主| diannaoza 发表于 2007-1-23 00:06 | 显示全部楼层

一路人~~~

“” 一路人~~~“”什么叫一路人,倒塌...HeHe...
hotpower 发表于 2007-1-23 00:10 | 显示全部楼层

倒塌了~~~有硬狗就原地踏步掐死狗~~~硬复位操心少的~~~

 楼主| diannaoza 发表于 2007-1-23 00:14 | 显示全部楼层

有硬狗就原地踏步掐死狗?

有硬狗就原地踏步掐死狗!

我的实体运行部份运行不了。这个运行是在寄存器标志为1的情况下进行的。你硬启了就进不了我的运行实体,因为寄存器复位初始。还有这个软件复位什么场合可以用??
dengm 发表于 2007-1-23 00:21 | 显示全部楼层

RE

    ACALL SUB_RETI
    clr a;;软复位
    MOV IE, A
    push acc
    push acc
SUB_RETI:
    reti ;;软复位
xwj 发表于 2007-1-23 00:24 | 显示全部楼层

软复位不是那么简单的,还有很多事要做的


IO
SP
PSW
中断标志和配置
IE
中断占用
清内存
部分特殊寄存器
外围器件的释放
正常初始化
等等等等。。。


系统可靠性要考虑的东西很多的,LZ想的还是过于简单了哦

软复位、特殊处理的提出是基于出错情况的不确定性来假设的,就是说复位时的情况、寄存器值可能是你不知道或不可预计、不受控的
虽然现在能用,但不保证以后或现场不出错误哦


虚心点吧,再仔细点哦

对你的领悟和应用能力表示赞赏,再接再厉,把结构化编程和可靠性考虑成为习惯,把51彻底研究透彻,把思路和知识面无限扩展,那你就是高手了

加油吧!
 
 
conwh 发表于 2007-1-23 00:25 | 显示全部楼层

为什么非得再从0000开始?

hotpower 发表于 2007-1-23 00:39 | 显示全部楼层

今天遇到两位"一路人"~~~有意思~~~

倒塌了~~~昨天看丁俊辉打球到6:00,该倒塌去了~~~
 楼主| diannaoza 发表于 2007-1-23 00:44 | 显示全部楼层

为什么非得再从0000开始?想节省程序存储字节。

也就是有想当的一部分程序是共用的。
hotpower 发表于 2007-1-23 00:51 | 显示全部楼层

晕~~~这个你先请教一下dengm~~~

 楼主| diannaoza 发表于 2007-1-23 01:43 | 显示全部楼层

软件复位与程序构架!

org 0000h
ajmp beg
org 0003h
..
reti
org 000bh
..
reti
org 0013h
..
reti
org 001bh
..
reti
org 0023h
..
reti

org 0030h
beg:
mov sp,#5fh;;
mov p1,#0ffh
mov p3,#0ffh
mov tmod,#22h
mov smod,#55h
mov scon,#50h
mov ie,#83h
loop:
;;500b的主体程序;;
;;;;
jb 00h,rrdd;;;这个rrdd不常进入只是偶而用下;;;
loop1:
500b的子体

here:mov pcon,#01h
ajmp here
;;//

子程序的一部份:;;当进入这个时;;
rrdd:
nop
jb 00h,rrd1
    setb 00h
       ACALL SUB_RETI
    clr a;;软复位
    MOV IE, A
    push acc
    push acc
       SUB_RETI:
    reti ;;软复位

    rrd1:
主体处理完的得到的相关数据
    clr 00h
ret
end

不知道完成这样的程序,用这样的构架是否有问题?还有更好的构架吗?谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

315

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

21

主题

315

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部