跟51emb-32k的特殊寄存器SFR读取有什么不同? 答:在仿真时打开特殊寄存器窗口如图: d:80H表示显示的是特殊寄存器窗口。这时候使用emb-32k来仿真,进行单步操作,你会发现,emb-32k运行很慢,一条指令的执行时间长达2-3秒。为什么打开sfr窗口之后运行会变的很慢呢?下面将讲述keil mon51的原理(etool的emb-32k使用的执行过程跟keil 的一样): 对于sfr的读取,keil的mon51程序把它分为两种情况,一是读取的寄存器是已经保存的特殊寄存器(ACC,PSW,IE,SP,DPH,DPL,B,R0-R7),就从保存区直接读出送回电脑。二,如果不是这些寄存器,例如要读取TH0,keil是通过运行一条指令的方式来进行的,而运行一条指令的过程很复杂:
这一系列的操作至少耗时60毫秒。每读出一个sfr的值就要耗这么多的时间,读出所有128个sfr,耗时要2-3秒。 可以看出keil的程序拐了一个很大的弯,实际上直接读出TH0送到电脑就可以了,何必做这么多的保存和恢复的过程呢? 我的仿真机改用新的办法: 判断是读TH0吗? 是: MOV ACC,TH0 将ACC的值送回电脑。 执行速度至少要提高10倍以上。我的仿真机的执行要快很多,这种情况下的执行时间不会超过200毫秒。
|