单片机如何运行 BASIC-52 系统
扫描二维码
随时随地手机看文章
CH558T 采用 BASIC-52 系统,并具备蓝牙连接功能。CH558T 的运行频率为 48 MHz,拥有 4KB 的 xRAM,足以满足常规应用需求。
单片机运行 BASIC-52 系统
我们已经见识到了使用 CH552 运行单芯片计算机的强大能力和广阔前景。不过,CH552 的主要局限性在于其计算机的运行速度以及可供用户使用的内部存储空间的大小。
CH552 的最大时钟频率为 24 MHz。用户可用的内部 xRAM 为 1 KB。在这 1 KB 的 xRAM 中,BASIC-52 将为栈分配约 512 字节的 xRAM,并将许多其他状态位存储在 RAM 中。更多详细信息请参考 BASIC-52 手册。
增强型基于 E8051 内核的 CH558T 微控制器:
CH55x 系列包括 CH551、CH552、CH554、CH558 和 CH559。
CH558 和 CH559 采用 T & L 封装,其引脚数量更多(分别为 20 和 48),能够运行在 48 MHz 的频率下,并且分别具有 4kb 和 6kb 的更大内部 xRAM。
无线蓝牙连接:
对于串行通信和键盘而言,我们需要将单片机计算机与电脑或手机进行连接。但一旦将其连接到手机或电脑上,就很难再轻易改变这种连接方式了。
相反,如果我们通过蓝牙无线连接方式将个人电脑或手机与单片计算机连接起来,就能实现无缝连接。由于没有物理连接,所以我们可以将单片计算机放置在任何想要的位置。甚至可以把计算机放在隔壁房间。唯一的要求是蓝牙的传输范围。我们还可以将计算机安装在机器人上或任何封闭装置中,而无需任何可见的连接。
CH558T:
如果我们仔细观察上述接线图,就会发现有 PORT3、PORT4 和 PORT5 这些引脚被使用。使用 BASIC-52 软件,我们无法直接访问除了 PORT1 之外的任何 PORT。因此,选择 20 引脚的 SSOP20 封装要比 48 引脚的 QFP48 封装更为合适。
无论是在任何包装中,只要我们有 CH558 或 CH559 这两种产品,就能正常使用。
固件:
该源代码在 Windows 10/11 系统中使用微芯公司的 C51ASM 编译器进行编译时没有出现任何错误。该源代码可从微芯公司网站获取。
对原始文件进行了两项修改。由于我们将使用 48 MHz 的 IC,所以 BASIC-52 源代码的默认频率已更改以支持 48 MHz。这在我们执行任何与定时器相关的代码时会有所帮助。
11.059200 MHz 的原始代码是
当前 48.000000 MHz 的代码是
另一个变化是,CH558 使用 4KB 内部 xRAM,而 CH559 则使用 6KB 的 xRAM。CH558 和 CH559 的内部 xRAM 范围不同。CH558 的 xRAM 范围从 0000H 到 0FFFH。因此,ERAMEND 的值为 0FFFH。这一数值也已修正,以报告正确的可用内存。
连接:
我们只需要两条线连接到单片机上,即 VCC(+5V)和 GND。为此,我们使用了一个小型的微型 USB 分离板以便于连接。我们可以使用现有的任何连接器,或者直接用两根具有正确极性的线进行连接。
CH558 只需要 4 根连接线。分别是电源(VCC)、地(GND)、发送(Tx)和接收(Rx)。
蓝牙模块需要 4 根连接线。分别是电源(VCC)、地线(GND)、发送(Tx)和接收(Rx)线。
某些蓝牙模块可能仅支持 3.3 伏的逻辑电平信号。在这种情况下,我们需要将 CH558 的发送信号降低至 3.3 伏,以确保安全和可靠的运行。
I2C、SPI 等传统功能可能会共用同一根引脚。请检查该引脚是否与其他功能存在冲突。我们可以重新分配引脚,并重新编译源代码以避免任何冲突。
I2C 接口:
I2CSTART 向 I2C 总线发送起始信号。
I2CSTOP 向 I2C 总线发送停止信号。
I2CPUT [字节] 向 I2C 总线发送一个字节。
通话结束后,接收方传来的确认信息(0 或 1)会被记录在状态字段(18H)中。
I2CGET([确认])[变量]
从 I2C 接口读取一个字节并将其存储到一个 BASIC 变量中
确认(0/1)已返回给发送方,确认码(ACK)为 0,否定码(NACK)为 1
使用 BASIC-52 编写 I2C EEPROM 写入程序
使用 BASIC-52 编写的 I2C EEPROM 读取程序
SPI 接口:
SPISTART [速度] 设置 SPI 接口 - “速度”是指系统时钟的分频系数,必须为 32 或更高值
SPIPUT [字节] 将“字节”数据写入 SPI
从 SPI 接收的字节被存储在 i-ram 的地址 18h 处,其功能与 SPIROT 相同。
SPIGET [变量] 从 SPI 中获取“变量”值
SPIROT([字节])[变量] 数据旋转,将“字节”和“变量”分别用于与 SPI 进行数据的读取和写入操作。
SPICS [0/1] CS(串行)端口 低/高控制
MCP3002 - 使用 BASIC-52 编写的 10 位模拟到数字转换器程序
SPI-EEPROM 25LC040A 测试程序
ADC:
;ADCSTART [通道] 设置 ADC 功能 - “通道”为模拟输入端口编号(0 - 7)
ADCGET [变量] 从 ADC 中获取“变量”的值 [0 - 2047]
ADCSTOP 关闭 ADC 功能及模拟端口
ADC 测试程序
藍牙模組:
我们可以将模块的默认名称更改为蓝牙制造商的 AT 命令手册中所提及的任何其他有效名称。在这种情况下,名称被更改为“BASIC-52”。大多数蓝牙模块默认的波特率为 9600。在这种情况下,波特率被更改为 19200。
注意:
在 SSOP20 适配板中并未使用电容,也无需在外部设置去耦电容或大容量电容用于测试。建议根据需求添加去耦电容或大容量电容。
要对 CH558T 的内部闪存进行编程,该芯片需要进入引导加载程序模式。在这种情况下,我们需要确保 VDD33 引脚 #20 上有至少一个微小的电容。同样,VIN5 引脚 #19 也需要有少量微法拉的电容,以便在对内部闪存进行编程时实现可靠运行。之后,由于我们不使用 USB 而仅使用 Tx 和 Rx,所以这些电容就不再必要了。
本文编译自hackster.io





