PIC单片机在几年前就已经开始接触了,当时主要是因为该系列的集成度很高,什么AD,CPP,SPI,IIC,UART,EEPROM等都弄进去了,而且FLASH类型的也多,精简指令,容易入手。 WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
PIC从进入中国大陆到现在,已经得到广大工程技术人员的认可,被认为是行业内抗干扰性最强的单片机之一。而近一两年,随着台湾MCU的发展和壮大,PIC为了保护中国市场,已经在针对台湾MCU采取一系列的措施,其中包括原PIC16C54,PIC16C57等的替代品,CF774,CF775的推出,将一些原OTP的型号如PIC12C508,PIC12C509等用新型的FLASH制程技术的PIC12F508,509等来代替,逐步的降价等。而这些措施的推出,随之而来的问题也产生了,一些用户反映以前用PIC16C57的方案改用CF775后可靠性明显降低,甚至导致系统无法使用等。同样用PIC12F508,509等也是一样,PIC还是PIC,就是在产品上体现出来的效果完全不一样了。但是无论怎么样,毕竟还有很多朋友在熟悉PIC,学习PIC。所以,经过这么长时间后,今天终于决定花点时间将这个BUG提出来,不让更多的朋友,一开始就去使用一个存在BUG的子程序,在以后的产品设计中埋下一颗“地雷”。 WWW_P※LCJS_COM-PLC-)技.术_网
这个BUG在乘法子程序中最为明显,当然也会涉及到相关的其他子程序。先看看双字节乘法子程序吧,这是个带符号位的乘法子程序。 WWW_PLC※JS_COM-PmLC-技.术_网
;******************************************************************* WWW_PLCJS_COM-PLC-技.术_网
; Double Precision Multiplication WWW_PLCJS@_COM%-PLC-技.术_网
; WWW_PL※CJS_COM-PLC-技.术_网
; ( Optimized for Code Size : Looped Code ) WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
; WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
;*******************************************************************; WWW_PLCJS@_COM%-PLC-技.术_网
; Multiplication : ACCb(16 bits) * ACCa(16 bits) -> ACCb,ACCc ( 32 bits ) W1WW_P4LCJS_COM-PLC-技.术_网
; (a) Load the 1st operand in location ACCaLO & ACCaHI ( 16 bits ) WW.W_PLC※JS_C,OM-PL,C-技.术_网
; (b) Load the 2nd operand in location ACCbLO & ACCbHI ( 16 bits ) P.L.C.技.术.网——可编程控制器技术门户
; (c) CALL D_mpy WWW_PLCJS@_COM%-PLC-技.术_网
; (d) The 32 bit result is in location ( ACCbHI,ACCbLO,ACCcHI,ACCcLO ) WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
; WWW.PLCJS.COM——可编程控制器技术门户
; Performance : W1WW_P4LCJS_COM-PLC-技.术_网
; Program Memory : 033 ——可——编——程——控-制-器-技——术——门——户
; Clock Cycles : 333 WWcW_PLCJS_COM-PLC-技.术_网
; WWW.PLCJS.COM——可编程控制器技术门户
; Note : The above timing is the worst case timing, when the WW.W_PLCJS_COM-PLC-技.术_网
; register ACCb = FFFF. The speed may be improved if WWW_PLCJS_COM-PLC-技.术_网
; the register ACCb contains a number ( out of the two WWW_PLCJS@_COM%-PLC-技.术_网
; numbers ) with less number of 1s. W1WW_P4LCJS_COM-PLC-技.术_网
; The performance specs are for Unsigned arithmetic ( i.e, WWW_PLC※JS_COM-PmLC-技.术_网
; with "SIGNED equ FALSE "). WWW_PLCJS_COM-PLC-技.术_网