單片機(jī)如何運(yùn)行 BASIC-52 系統(tǒng)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
CH558T 采用 BASIC-52 系統(tǒng),并具備藍(lán)牙連接功能。CH558T 的運(yùn)行頻率為 48 MHz,擁有 4KB 的 xRAM,足以滿足常規(guī)應(yīng)用需求。
單片機(jī)運(yùn)行 BASIC-52 系統(tǒng)
我們已經(jīng)見識(shí)到了使用 CH552 運(yùn)行單芯片計(jì)算機(jī)的強(qiáng)大能力和廣闊前景。不過,CH552 的主要局限性在于其計(jì)算機(jī)的運(yùn)行速度以及可供用戶使用的內(nèi)部存儲(chǔ)空間的大小。
CH552 的最大時(shí)鐘頻率為 24 MHz。用戶可用的內(nèi)部 xRAM 為 1 KB。在這 1 KB 的 xRAM 中,BASIC-52 將為棧分配約 512 字節(jié)的 xRAM,并將許多其他狀態(tài)位存儲(chǔ)在 RAM 中。更多詳細(xì)信息請(qǐng)參考 BASIC-52 手冊(cè)。
增強(qiáng)型基于 E8051 內(nèi)核的 CH558T 微控制器:
CH55x 系列包括 CH551、CH552、CH554、CH558 和 CH559。
CH558 和 CH559 采用 T & L 封裝,其引腳數(shù)量更多(分別為 20 和 48),能夠運(yùn)行在 48 MHz 的頻率下,并且分別具有 4kb 和 6kb 的更大內(nèi)部 xRAM。
無線藍(lán)牙連接:
對(duì)于串行通信和鍵盤而言,我們需要將單片機(jī)計(jì)算機(jī)與電腦或手機(jī)進(jìn)行連接。但一旦將其連接到手機(jī)或電腦上,就很難再輕易改變這種連接方式了。
相反,如果我們通過藍(lán)牙無線連接方式將個(gè)人電腦或手機(jī)與單片計(jì)算機(jī)連接起來,就能實(shí)現(xiàn)無縫連接。由于沒有物理連接,所以我們可以將單片計(jì)算機(jī)放置在任何想要的位置。甚至可以把計(jì)算機(jī)放在隔壁房間。唯一的要求是藍(lán)牙的傳輸范圍。我們還可以將計(jì)算機(jī)安裝在機(jī)器人上或任何封閉裝置中,而無需任何可見的連接。
CH558T:
如果我們仔細(xì)觀察上述接線圖,就會(huì)發(fā)現(xiàn)有 PORT3、PORT4 和 PORT5 這些引腳被使用。使用 BASIC-52 軟件,我們無法直接訪問除了 PORT1 之外的任何 PORT。因此,選擇 20 引腳的 SSOP20 封裝要比 48 引腳的 QFP48 封裝更為合適。
無論是在任何包裝中,只要我們有 CH558 或 CH559 這兩種產(chǎn)品,就能正常使用。
固件:
該源代碼在 Windows 10/11 系統(tǒng)中使用微芯公司的 C51ASM 編譯器進(jìn)行編譯時(shí)沒有出現(xiàn)任何錯(cuò)誤。該源代碼可從微芯公司網(wǎng)站獲取。
對(duì)原始文件進(jìn)行了兩項(xiàng)修改。由于我們將使用 48 MHz 的 IC,所以 BASIC-52 源代碼的默認(rèn)頻率已更改以支持 48 MHz。這在我們執(zhí)行任何與定時(shí)器相關(guān)的代碼時(shí)會(huì)有所幫助。
11.059200 MHz 的原始代碼是
當(dāng)前 48.000000 MHz 的代碼是
另一個(gè)變化是,CH558 使用 4KB 內(nèi)部 xRAM,而 CH559 則使用 6KB 的 xRAM。CH558 和 CH559 的內(nèi)部 xRAM 范圍不同。CH558 的 xRAM 范圍從 0000H 到 0FFFH。因此,ERAMEND 的值為 0FFFH。這一數(shù)值也已修正,以報(bào)告正確的可用內(nèi)存。
連接:
我們只需要兩條線連接到單片機(jī)上,即 VCC(+5V)和 GND。為此,我們使用了一個(gè)小型的微型 USB 分離板以便于連接。我們可以使用現(xiàn)有的任何連接器,或者直接用兩根具有正確極性的線進(jìn)行連接。
CH558 只需要 4 根連接線。分別是電源(VCC)、地(GND)、發(fā)送(Tx)和接收(Rx)。
藍(lán)牙模塊需要 4 根連接線。分別是電源(VCC)、地線(GND)、發(fā)送(Tx)和接收(Rx)線。
某些藍(lán)牙模塊可能僅支持 3.3 伏的邏輯電平信號(hào)。在這種情況下,我們需要將 CH558 的發(fā)送信號(hào)降低至 3.3 伏,以確保安全和可靠的運(yùn)行。
I2C、SPI 等傳統(tǒng)功能可能會(huì)共用同一根引腳。請(qǐng)檢查該引腳是否與其他功能存在沖突。我們可以重新分配引腳,并重新編譯源代碼以避免任何沖突。
I2C 接口:
I2CSTART 向 I2C 總線發(fā)送起始信號(hào)。
I2CSTOP 向 I2C 總線發(fā)送停止信號(hào)。
I2CPUT [字節(jié)] 向 I2C 總線發(fā)送一個(gè)字節(jié)。
通話結(jié)束后,接收方傳來的確認(rèn)信息(0 或 1)會(huì)被記錄在狀態(tài)字段(18H)中。
I2CGET([確認(rèn)])[變量]
從 I2C 接口讀取一個(gè)字節(jié)并將其存儲(chǔ)到一個(gè) BASIC 變量中
確認(rèn)(0/1)已返回給發(fā)送方,確認(rèn)碼(ACK)為 0,否定碼(NACK)為 1
使用 BASIC-52 編寫 I2C EEPROM 寫入程序
使用 BASIC-52 編寫的 I2C EEPROM 讀取程序
SPI 接口:
SPISTART [速度] 設(shè)置 SPI 接口 - “速度”是指系統(tǒng)時(shí)鐘的分頻系數(shù),必須為 32 或更高值
SPIPUT [字節(jié)] 將“字節(jié)”數(shù)據(jù)寫入 SPI
從 SPI 接收的字節(jié)被存儲(chǔ)在 i-ram 的地址 18h 處,其功能與 SPIROT 相同。
SPIGET [變量] 從 SPI 中獲取“變量”值
SPIROT([字節(jié)])[變量] 數(shù)據(jù)旋轉(zhuǎn),將“字節(jié)”和“變量”分別用于與 SPI 進(jìn)行數(shù)據(jù)的讀取和寫入操作。
SPICS [0/1] CS(串行)端口 低/高控制
MCP3002 - 使用 BASIC-52 編寫的 10 位模擬到數(shù)字轉(zhuǎn)換器程序
SPI-EEPROM 25LC040A 測(cè)試程序
ADC:
;ADCSTART [通道] 設(shè)置 ADC 功能 - “通道”為模擬輸入端口編號(hào)(0 - 7)
ADCGET [變量] 從 ADC 中獲取“變量”的值 [0 - 2047]
ADCSTOP 關(guān)閉 ADC 功能及模擬端口
ADC 測(cè)試程序
藍(lán)牙模組:
我們可以將模塊的默認(rèn)名稱更改為藍(lán)牙制造商的 AT 命令手冊(cè)中所提及的任何其他有效名稱。在這種情況下,名稱被更改為“BASIC-52”。大多數(shù)藍(lán)牙模塊默認(rèn)的波特率為 9600。在這種情況下,波特率被更改為 19200。
注意:
在 SSOP20 適配板中并未使用電容,也無需在外部設(shè)置去耦電容或大容量電容用于測(cè)試。建議根據(jù)需求添加去耦電容或大容量電容。
要對(duì) CH558T 的內(nèi)部閃存進(jìn)行編程,該芯片需要進(jìn)入引導(dǎo)加載程序模式。在這種情況下,我們需要確保 VDD33 引腳 #20 上有至少一個(gè)微小的電容。同樣,VIN5 引腳 #19 也需要有少量微法拉的電容,以便在對(duì)內(nèi)部閃存進(jìn)行編程時(shí)實(shí)現(xiàn)可靠運(yùn)行。之后,由于我們不使用 USB 而僅使用 Tx 和 Rx,所以這些電容就不再必要了。
本文編譯自hackster.io





