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設計方案和實現思路,并經過實用表明完全可行,也比較有實用價值。