看了楼主的问题和回复的贴子,觉得很多人在学习的过程中显得非常飘浮,基本功非常缺欠,对单片机的基本原理不理解,对KEIL C理解又太片面,受那些所谓经典教材上声称的C语言如何如何强大的误导非常深.其实,学过8位机的话就应该知道这个"8"的含义的,即任何一条指令只能操作8个位也就是单字节的数据,如果要操作超过1个字节的数据,则必须至少要通过不少于两条的指令.再就是中断机制(详细的可参考上海复旦大学的那本教材),只有单条指令才能保证不被中断,也就是说单条指令是符合"原子性的",处理多字节数据时,就有可能在处理的过程中被中断,对于新手来说,表面上看程序确实是没问题,逻辑上也很清晰,但这只是宏观上的,还应该从微观上去进行思考.如果在中断后所执行的代码中没有对该多字节数据进行操作,则是不会出问题的,问题就出在对这个多字节数据进行的操作,从而引起错误.就拿楼主的程序来说吧,假设在while中,TD = 00 FF(高字节在前,16进制),先取出高字节00H,接着中断发生,TD= 01 00,中断返回后,取低字节本来应该是FFH才对,但由于中断的影响,取出来的TD就变成了00 00了! |