移植汇编程序到C,思路上有些堵塞了。我先说一下我的疑问。
汇编程序时中断响应232代码,接收到正确的232命令后,把对应的处理函数压栈到SP,然后执行RETI指令到处理函数处,处理完堆栈设置为一个固定值,例子如下:
PC_RS232:
Push PSW
Push A
中间是命令判断RS232_FUN_EXIT:
MOV DPTR, #FUN5;比如要执行函数功能5
RS232_FUN_EXIT:
POP A
POP PSW
POP SP_TEMP
POP SP_TEMP
PUSH DPL
PUSH DPH
RETI
到这里执行了RETI就跳转到FUN5执行了。
执行完之后 ,给SP一个固定的值。
MOV SP, #0BFH ;设置堆栈位置为0BFH
JMP WAIT_INT
整体意思是通过232判断要执行哪个功能,然后直接到哪个功能区执行,不考虑以前
在哪一步执行,不考虑以前的SP是多少,反正执行完之后给SP一个固定的值。
这么做的好处是能快速响应串口命令,比如串口发送一个命令后,单片机执行,执行时间可能是几百毫秒或者几秒,这期间如果再有其他命令则放弃本次任务,执行新任务。
进入中断马上执行新任务可能造成SP错误,所有执行完一次任务就给SP一个固定值,
现在用C改写,应该怎么做才能做到这个实时性的要求呢,C可以这么操作堆栈吗,大家有没有什么更好的办法? |