1 MC14499简介
MC14499 是Motorola公司生产的串行输入BCD十进制输出的CMOS集成块,它内含BCD译码器和串行接口,可以与任何CPU接口连接,在比较复杂的单片机控制系统中,MC14499具有占用I/O少、控制显示器多、功耗低、使用方便等优点,因而得到广泛的应用。但其缺点是用它来实现显示系统比较复杂,并且成本太高。随着技术的飞速发展和微处理性能价格比的较高,人们可以采用高性价比的MCU来代换它,这也许是一个趋势,如用力源PS7219代换 MAX7219等。笔者用AT90S1200来代换CM14499,取得了非常好的效果。AT90S1200是一种性能非常优异的RISC单片机,它可以与主CPU并行工作,而且功耗也特别你,在性能上完全与MC14499兼容,由其组成的显示系统非常简单。另外,它的一个最突出的优点是操作灵活,并可在 MC14499接口的基础上增加SPI接口、I2C及单线传输等功能。
MC14499片内主要包括移位寄存器、锁存器、多路输出、译码驱动器及振荡器,由多路输出从锁存器中取出的BCD码数据经段译码器译码后送至八段输出脚,片内振荡信号经四分频后接至I~IV四条位控制线对显示器进行轮流扫描,以实现动态扫描显示。
MC14499一次可接收20位串行输入数据,MC14499的前四位为4个LED显示器的小数点选择位,后16位是4个LED显示器的BCD码输入数据,高位在前,低位在后,当EN由高变低时,MC14499的寄存器开始接收串行数据。
MC14499采用双列直播式18脚DIP封装形式。图1所示是它的引脚排列示意图。
2 AT90S1200的主要特点
AT90S1200单片机是由ATMEL公司推出的RISC(reduced Instruction Set cpu)单片机,它充分吸取了PIC及8051的优点,并发挥了其自身Flash存储器技术特长。从而使AT90S1200具有非常优异的性能。其特点如下:
●具有大电流(10~20mA)输出特性,可直接驱动LED显示、继电器、SSR固态继电器等。片内看门狗定时器具有安全保护功能,可防止程序走飞,从而提高了产品的抗干扰能力。
● 内部带有价格低廉的可擦写1000次以上的1k字节FLASH,速度高,功耗低,并具有sleep功能,可分别在空闲、掉电及省电模式下实现低功耗。在 1MHz时呆实现1MIPS的处理能力,AT90S1200采用单周期执行指令,耗电在1mA~3mA之间。(睡眠时的典型损耗电流≤1μA)。
●带有高度保密但可多次烧写的FLASH,具有多重保密保护锁死功能,可低价快速完成产品商品化生产。
●有串行异步通讯UART口,不占用定时器和SCI传输功能,其高速性能可使其工作在一般标准整数频率,它的波特率可达576k,并带有系统可编程SPI接口。
●采用超功能简精指令:具有32个通用工作寄存器,可灵活使用指令运算,并支持功能强大C语言编程,易学易用。
●AT90S1200内置比较器,I/O口可作A/D转换用,内含一个8位定时器/计时器。
●具有三个固定中断向量地址,分别为:外部中断、内部定时器中断、片内模拟比较器输出中断,可实时快速响应,适用于实时控制系统。
●是一种可重设启动复位器件,具有内部电源开关启动计数器,可将低电平复位(RESET)直接接到Vcc端。当电源打开时,利用内部的RC看门狗定时器可延迟MCU启动执行程序,这种延时可以使I/O在稳定后执行程序,以提高单片机的工作可靠性。
●AT90S1200器件内置1MHz工作频率RC振荡器,这使得单片机无需外加振荡元器件即可工作,因而设计使用简单方便。
●具有可描写100000次的EEPROM(64个字节),为掉电后的数据保存提供方便。
●工作电压范围为2.7V~6.0V,具有较强的电源抗干扰能力。
3 代换电路
用AT90S1200代换KMC14499的电路连接如图2所示,其中AT90S1200的RST为复位引脚,可直接接至高电平,并在内部复位,A~G为7段,DP为小数点,Ⅰ~Ⅳ为四位位选信号输出,可用于从显示器吸收电源。
可以看出,图2所示电路非常简单,只需外接8只电阻即可驱动四位动态显示,阻值可根据LED数码管的性能在200~500Ω之间选择,笔者使用200Ω,亮度很高,且功耗很低,这一些需24小时工作的场合很适用,可直接代换MC14499.和主EN为使能信号,只有EN为低时才接收数据,CLK为时钟信号,使用AT90S1200的中断口pd2,可快速反应实时接收,data为串行数据输入端,在CLK的下降沿,data线上的数据被移入到内部20位移位寄存器中。
4 软件设计
使用AT90S1200直接代换MC14499完成显示功能时,系统软件可采和AVR精简指令的汇编语言编写,并可采用模块化结构设计。为达到 MC14499的通讯速度,对串行数据的接收采用中断方式处理,使用内置振荡器,WDT可使用外部中断接收CLK信号,AT90S1200具有89条指令代码,且全部为单字节指令,可进行十位数字运算,在32个工作寄存器中只有16~31个寄存器可执行立即数据的操作,并支持C语言编程,而且灵活方便,下面给出用AT90S1200代换MC1449的显示数据转换子程序和接收数据子程序。
4.1 驱动显示子程序
由于AT90S1200不能查表。故在显示子程序中应分别进行处理,主程序内使用了通用寄存器R26中带为的接收BCD码,并通过本子程序转换为段码,仍由R26带出并返回到调用程序处,本示例为0、1、2、3、4五个字段码的转换:
Data:CPI R26,$00 ;数据0的转换
BRNE Data0
LDI R26,$7B
RJMP DataD
Data0:CPI R26,$01 ;数据1由BCD转换为段码
BRNE Datal
LDI R26,$48
RJMP DataD
Datal:CPI R26,$02 ;数据2的转换
BRNE Data2
LDI R26,$D3
RJMP DataD
Data2:CPI R26,$03 ;数据3的转换
BRNE Data3
LDI R26,$D9
RJMP DataD
Data CPI R26,$04 ;数据4的转换
BREN Data4
LDI R26,$E8
RJMP DataD
…
DataD:RET
4.2 数据接收子程序
首先把状态寄存器的数据送到R18暂存,然后分别接收小数点及四位BCD码,并将数据寄存在R20、R21、R22、R23、R24中,程序如下:
PROG:IN R18,SREG ;状态标志寄存
CLC
SBIC PIND,0
SEC
ROL R29
ROL R28
ROL R27
INC R16
CPI R16,$14
BRNE PROGD
MOV R20,R27;小数点位置位的接收,寄存在R20
ANDI R20,$0F
MOV R21,R28 ;显示首位数据接收
SWAP R21
ANDI R21,$0F
MOV R22,R28 ;第二位接收
ANDI R22,$0F
MOV R23,R29 ;第三位接收
SWAP R23
ANDI R23,$0F
MOV R24,R29 ;第四位接收
ANDI R24,$0F
CLR R16
CLR R27
CLR R38
CLR R29
CPI R24,$0A
BRL0 RPOGD
CLR R20
LDI R21,$0F
LDI R22,$0F
LDI R23,$0F
LDI R24,$00
PROGD RETI
5 结束语
文中所述的方案已被成功应用于无功补偿控制器的显示系统中,经使用表明:AT90S1200不仅可以完全取代MC14499进行驱动显示,而且还具有功耗低、使用方便的特独性能,仅用8只外接电阻即可驱动四位动态显示系统,且接口非常灵活,可方便地与任何单片机接口,并可编程为串行同步接口、I2C接口、 SPI接口等,更重要的是提出了一种用MCU代换ADIC设计方案和实现思路,并经过实用表明完全可行,也比较有实用价值。