手上有一款較老的51開發(fā)板,普中CH6800-ES,5、6年前剛剛對單片機感興趣時候買的,買了之后只學了幾個流水燈、蜂鳴器就跑到Arduino方向去了。
這些天稍稍研究了一點兒51單片機與Phyphox藍牙互通的問題,又撿起來51單片機,仍然是STC89C52/89C51/89C52RC/89C51RC這幾種最最最初入門級的芯片,發(fā)現(xiàn)這種開發(fā)板自帶的自動復位燒錄電路,對其它幾種芯片都可正常燒錄,唯獨不能正常燒錄89C52RC的芯片(盡管上面的附圖就是89C52RC的芯片)。后來在網上大致掃了幾眼,確實有很多人遇到89C52RC不能燒錄的情況,主要原因是電流太小。
使用STC-ISP并不影響89C52RC正常的燒錄,只是需要我們自己把USB2TTL的TXD、RXD與89C52RC的RXD、TXD連接并冷啟動一下即可。一個竅門是最低波特率和最高波特率需要都設置成1200,或都設置成2400,偶爾4800也可以,但失敗次數(shù)居多。
在查閱資料琢磨這些芯片的燒錄的時候,——自然的原因,我們知道很多時候這種51單片機最大的應用場合,應該是大、中學生學習單片機的時候使用;我也曾在物理實驗儀器上見到STC單片機,貼片的——也有人在研究如何升級這種古老的開發(fā)板,就是自己做引腳轉換板,讓STC新產品替換掉原來的89系列芯片,目前見到的,有STC8、STC12、STC15系列的轉換都有人在做。事實上STC的這些單片機在功能上也已經很好用了:多個時鐘中斷、多個串口、多個PWM輸出、12位ADC、IIC、SPI等等。
于是買了一個STC8A8K64S4A12的轉換板。排針需要自己焊。
焊好排針之后,尺寸和經典Arduino Nano對比,仍顯得大一點兒;但比ESP32要小一點兒。還有10根針沒有焊,手工焊太難了。反正也用不上,就不焊了。
然后到STC-ISP里面安裝STC8頭文件。
到Keil里寫一個最簡單的LED閃爍。
/* 閃爍燈實驗 */
#include "stc8.h"
//自動適應主時鐘延時毫秒數(shù)
#define MAIN_Fosc 24000000UL //定義主時鐘24MHZ
typedef unsigned int uint;
void delayms(uint ms)
{
uint i;
do{
i=MAIN_Fosc/9600;
while(--i); //96T per loop
}while(--ms); //--ms
}
main()
{
while(1)
{
P20 = 0;
delayms(1000);
P20 = 1;
delayms(1000);
}
}
編譯,直接用USB2TTL燒錄,失敗,再燒錄,再失敗。按照道理,如果自行接線燒錄STC89系列能夠成功,那么STC8系列也應該能夠成功,但總是不成功。不知何故。后來想為什么不用老普中板子試試呢?取下普中開發(fā)板上原來自帶的STC89C52,換上STC8A8K64S4K12,使用STC-ISP燒錄工具。發(fā)現(xiàn)雖然不能自動燒錄,但是手動進行冷啟動,竟然正常燒錄成功了!(普中開發(fā)板當年也是打的自動燒錄這張牌的,這個自動燒錄對STC89C52仍然正??捎?
STC8A8K64S4K12芯片與STC89系列相比,要強太多太多。而且,STC8內部自帶24MHz振蕩,不用再使用外部晶振,燒錄的時候,還可以指定運行時頻率。我把針對24MHz頻率寫的delayms燒錄在11.0592MHz下,LED閃爍很慢,而重新指定頻率為24MHz,LED閃爍間隔時間正常。
換上了STC8單片機后的普中開發(fā)板。
只是一時興趣,實際意義似乎也不是太大;對高中物理里面的實驗,其實STC89系列就挺夠用的了,琢磨STC8,只是一時貪玩兒。