something_about_msc_51

0x00 | 历史 MCS-51架构是Intel搞的东西,就和今天的所谓”架构“一样,实际上是一组指令集和一些硬件标准,用在了自家的Intel 8051,Intel 8751等等芯片上。 不止MCS-51,Intel还搞出过MCS-48,MCS-96。 基于MCS-51架构的Intel 8051设计简单,使用方便,价格低廉,功耗(在当时)较低,受到一众吹捧,美国各高校也开始将其列入计算机课程。当然也少不了来自世界各地的效仿者。 0x01 | 现状 Intel 已经不再设计和生产单片机了,但是在这之前 Intel 疯狂售卖MCS-51架构的授权。一些拿到这一授权的公司就开始生产并修改自己的兼容MCS-51架构下程序的单片机,比如中国台湾的STC宏晶,ATMEL。 虽然社会上对MCS-51架构单片机的需求早已不复从前,MCS-51架构在各高校中还是有一些市场的。时至今日,STC和ATMEL等当年的一些MCS-51授权厂也依然在生产基于或兼容MCS-51架构的单片机。 目前全球最大,且可能是唯一在MCS-51架构上梭哈的就是STC宏晶,对于国内大学生而言其最广为人知的产品应该是STC89C52RC。 值得一提的是,STC公司不仅坚持传统的MCS-51单片机,还在此基础上研发出了32位的MCS-51指令集兼容内核。 0x02 | 硬件资源 由于各授权厂普遍存在修改MCS-51架构的情况,所以目前能买到的”51单片机“硬件资源只会比 Intel 的MCS-51架构下的更多。 而对于使用MCS-51架构的Intel 8051,其片上拥有: 8位总线 4KB内部储存,最大可扩充到64KB 128Bytes运行内存,最大可扩充到64KB 4组IO口(P0,P1,P2,P3) 2组16位计时器(T0,T1) 5个中断源(INT0,INT1,T0,T1,RXD,TXD) 1组全双工串口 对于使用MCS-51架构的Intel 8052,其片上拥有: 8位总线 8KB储存,最大可扩充到64KB 256Bytes运行内存,最大可扩充到64KB 4组IO口(P0,P1,P2,P3) 3组16位计时器(T0,T1,T2) 6个中断源(INT0,INT1,T0,T1,T2,RXD,TXD) 1组全双工串口 0x03 | 软件生态 由于MCS-51架构曾经的辉煌,以及其目前在各个高校中的地位,时至今日依然有不少MCS-51内核单片机的开发工具和其他软件依然在保持维护。 对于编译器,有: SDCC:一个开源的C语言编译器,可编译出运行在MCS-51架构单片机和其他一些小型设备上的程序。该编译器同时提供了相关的头文件和程序打包工具。 MDK Keil C51:一套闭源的商业软件,是MDK Keil集成开发环境的一部分,提供了对MCS-51架构单片机的C语言编译器和仿真软件。 有关MCS-51的各种外设代码在互联网上很容易找到,不过其中大部分是使用的是 MDK Keil C51。

February 29, 2024 · 1 min · 57 words · IAKSH

something_about_sdcc

0x00 | Keil C51和SDCC Keil C51: 闭源的商业软件 自带(绑定)IDE IDE提供了仿真环境 生成的程序体积较小,汇编质量较高 网络资料较多 只要能接受那个IDE,门槛较低 SDCC: 免费的开源软件 更接近标准C语言 生成的程序体积较大,汇编质量一般 不止能给8051写程序 网络资料较少 有一点点的门槛(需要自己配置环境和工作流 0x01 | 从Keil C51迁移到SDCC sdcc 更加接近标准C编译器,对于不属于标准C语言的特性,sdcc 在其标识符前加上两个下划线进行标识。 sdcc中没有sbit和bit这样的数据类型(但实际上有__sbit)。在Keil C51中常见的一些定义语句在SDCC中需要使用宏实现。 sbit SDA = P1 ^ 5; sbit CLK_ST = P1 ^ 6; 在 sdcc 中: #define SDA P1_5 #define CLK_ST P1_6 // 也可以使用__sbit,不过可能不是你想的那样 __sbit __at (0x90) P1_0 ; 另外,Keil C51中的interrupt关键字也被改为了__interrupt,在Keil C51中可以这样定义一个中断函数: void my_interrupt_func() interrupt 4 { // ... } 而在 sdcc 中需要这样:...

February 29, 2024 · 1 min · 103 words · IAKSH