◇◇新语丝(www.xys.org)(xys.dxiong.com)(xys.3322.org)(xys.xlogit.com)◇◇ 一本错误百出、越改越错的“高等学校通用教材” hammerred   李广第,朱月秀和王秀山编著的《单片机基础》(北京航空航天大学出版社 出版)是一本错误百出的教材,却能不断再版。再版后,对错误进行了修改,但 是,一些牵涉到概念或稍复杂一点的错误,就改不好,甚至越改越错。   这样的例子很多,以下举1个例子:   在1994年6月第一版的《单片机基础》,第208页,8.2.4的例子如下:   注:我的点评写在注释部分(原注释省去)。 设有一个8路模拟量输入的巡回检测系统,采样数据依次存放在外部RAM A0H~ A7H单元中,其数据采样的初始化和中断服务程序如下: MOV R0,#A0H ;操作数应当为#0A0H MOV R2,#08H ;R2没有作用! SETB IT1 SETB EA SETB EX1 MOV DPTR,#FEF0H ;操作数应当为#0FEF0H MOV A,#00H LOOP: MOVX @DPTR,A HERE: SJMP HERE ;主要错误!读完8路后,将无限地继续下去,破坏随后的数据区 中断服务程序: MOVX A,@DPTR ;中断中没有保护DPTR,A,R0 MOVX @R0,A INC DPTR ;不宜将DPTR,R0作为全局变量使用 INC R0 RETI 这个程序的错误,我估计有可能是别人告诉了李广第,于是在新版的教科书中他做了修改。 2001年7月第2版的《单片机基础》,第252页,9.2.4例子:(文字有所增加,不列出),程序如下: 初始化程序: MOV R0,#0A0H ;操作数改正了 MOV R2,#08H ;注意到R2应当起的作用 SETB IT1 SETB EA SETB EX1 MOV DPTR,#0FEF0H ;操作数改正了 MOV A,#00H LOOP: MOVX @DPTR,A HERE: SJMP HERE ;原注释为:“等待中断”。概念错误!中断返回后仍在原地跳转 DJNZ R2,LOOP ;原注释为:“巡回未完继续”。不可能继续!不会执行到这里! 中断服务程序: MOVX A,@DPTR MOVX @R0,A INC DPTR INC R0 RETI   这一版程序虽改正了一些小错误,但却在HERE指令之后加了一条:DJNZ R2,LOOP,这就越改越错了!而且暴露出原来李广第的“等待中断”意思居然是 “中断返回之后会转到下一条指令”,否则李广第绝对不会在原地转移的HERE: SJMP HERE之后写上DJNZ R2,LOOP这样的计数控制指令。   这样的程序与第一版的程序,实际上执行起来完全是一回事,不过写出的程 序,暴露出作者的无知和编程水平的低下。   大概又有人反映新版书这里的错误,于是,李广第在新印刷的书上又作了修 改:   2005年9月第12次印刷,该书的第252页,9.2.4例子程序如下: 初始化程序: MOV R0,#0A0H MOV R2,#08H SETB IT1 SETB EA SETB EX1 MOV DPTR,#0FEF0H MOV A,#00H LOOP: MOVX @DPTR,A HERE: SJMP HERE 中断服务程序: DJNZ R2,LOOP1 ;这样的改动,更荒唐了,导致无法得到正常的采样数据! MOVX A,@DPTR ;R2减一不等于0时,转移避开了以下的程序段,没有执行! MOVX @R0,A ;实际上,要隔8,256,256...,才能得到并保存一次数据 INC DPTR INC R0 LOOP1: RETI   可能指出错误的人还指出了错误的原因,告诉李广第DJNZ R2,LOOP不可能再 执行了,所以李广第将这条指令搬到中断子程序中。可以肯定的是,指出错误的 人(如果有的话)没有给出正确的程序,于是,李广第自己又来乱写,将DJNZ R2,LOOP这条指令乱搬,越改越错了!   我的感觉,李广第这样的修改完全是慌慌张张加浑浑噩噩:前两种错误的程 序至少还是完成了8个数据的采样和保存,只是错在会造成无限循环的采样和存 数。而新改的程序连正常的采样也不会得到了!   类似的错误还有很多。我甚至将其中的某个例题作为我某年招收研究生考卷 的改错题。   教科书是人写的,当然避免不了错误。不过国人历来对文责看得很重,不希 望谬种流传,怡笑大方,特别对教科书,往往更加认真,不希望贻误学子,所以 一般都会认真校对,检查,尽量将错误减到最少。北航出版社与李广第的“高等 学校通用教材”看起来不是泛泛之辈,却产生了很多低级错误,更离谱得是,这 些低级错误发生后,一而再,再而三地修改,却越改越错,这只能说明作者的水 平低下和教科书审查的粗放与走过场。   这本书更普遍更严重问题在于大量“生造出来的教科书式的想当然尔的程序 范例”(以上例子就是其中之一),严重脱离实际,编程方法不正确,反映出作 者本身对知识掌握的不好,应用得很少。   我认为,一本书的作者对所写的东西应当要吃透,对应用知识型的,本人还 应当有所应用,最好有所发展。如果没有这个水平,不要动念写书,否则只能是 东抄西凑,胡言乱语,加上越改越错。   目前为了评职称或“经济效益”的压力,高校教师不管水平够不够,写论文、 写书,搞急就章,水平当然很低,真的很可悲、可怜和可怕。   李广第的书已经出了十几版了,名利双收了吧。这样多错误的东西,没有带 来什么惩罚,只带来效益,当然鼓励了这种现象的继续。观察中国目前的弄虚作 假,往往没有带来什么惩罚,而收益多多,这样的氛围令人沮丧和灰心。   附带说明一下,要不是遇到了本科教学评估,领导迫使我们采用所谓“21世 纪教科书”,我还将继续选择李广第的教科书,作为我的“微机原理”课程的教 材。我要让学生不仅从正面学习,还要学会怀疑经典,培养批判精神,善于从反 面学习,从错误中学习。只泡在“永远正确的浓汤中”是长不大的。社会和未来 本来就是充满了错误,只有学会将错误作为自己的老师,才能得到正确。 (XYS20070628) ◇◇新语丝(www.xys.org)(xys.dxiong.com)(xys.3322.org)(xys.xlogit.com)◇◇