单片机为什么要使用C语言?

发布者:SereneHarmony最新更新时间:2018-10-10 来源: eefocus关键字:单片机  C语言 手机看文章 扫描二维码
随时随地手机看文章

将C向MCU(俗称单片机)8051上的移植始于80年代的中后期。客观上讲,C向8051 MCU移植的难点不少。如:

·8051的非冯·诺依慢结构(程序与数据存储器空间分立),再加上片上又多了位寻址存储空间;

·片上的数据和程序存储器空间过小和同时存在着向片外扩展它们的可能;

·片上集成外围设备的被寄存器化(即SFR),而并不采用惯用的I/O地址空间;

·8051芯片的派生门类特别多(达到了上百种之多),而C语言对于它们的每一个硬件资源又无一例外地要能进行操作。

这些都是过去以MPU为基础的C语言所没有的。经过Keil/Franklin、Archmeades、IAR、BSO/Tasking等公司艰若不懈的努力,终于于90年代开始而趋成熟,成为专业化的MCU高级语言了。过去长期困扰人们的所谓“高级语言产生代码太长,运行速度太慢,因此不适合单片机使用”的致使缺点已被大幅度地克服。目前,8051上的C语言的代码长度,已经做到了汇编水平的1.2~1.5倍。4K字节以上的程度,C语言的优势更能得到发挥。至于执行速度的问题,只要有好的仿真器的帮助,找出关键代码,进一步用人工优化,就可很简单地达到十分美满的程度。如果谈到开发速度、软件质量、结构严谨、程序坚固等方面的话,则C语言的完美绝非汇编语言编程所可比拟的。今天,确实已经到MCU开发人员拿起C语言利器的时候了。

下面结合8051介绍单片机C语言的优越性:

·不懂得单片机的指令集,也能够编写完美的单片机程序;

·无须懂得单片机的具体硬件,也能够编出符合硬件实际的专业水平的程序;

·不同函数的数据实行覆盖,有效利用片上有限的RAM空间;

·程序具有坚固性:数据被破坏是导致程序运行异常的重要因素。C语言对数据进行了许多专业性的处理,避免了运行中间非异步的破坏;

·C语言提供复杂的数据类型(数组、结构、联合、枚举、指针等),极大地增强了程序处理能力和灵活性;

·提供auto、static、const等存储类型和专门针对8051单片机的data、idata、pdata、xdata、code等存储类型,自动为变量合理地分配地址;

·提供small、compact、large等编译模式,以适应片上存储器的大小;

·中断服务程序的现场保护和恢复,中断向量表的填写,是直接与单片机相关的,都由C编译器代办;

·提供常用的标准函数库,以供用户直接使用;

·头文件中定义宏、说明复杂数据类型和函数原型,有利于程序的移植和支持单片机的系列化产品的开发;

·有严格的句法检查,错误很少,可容易地在高级语言的水平上迅速地被排掉;

·可方便地接受多种实用程序的服务:如片上资源的初始化有专门的实用程序自动生成;再如,有实时多任务操作系统可调度多道任务,简化用户编程,提高运行的安全性等等。


关键字:单片机  C语言 引用地址:单片机为什么要使用C语言?

上一篇:破解单片机的常用方法及应对策略
下一篇:单片机程序是如何运行的,你有思考过吗?

推荐阅读最新更新时间:2024-03-16 16:15

基于C语言开发环境实现虚拟示波器测试系统的设计
引 言 随着虚拟仪器技术的发展,采用“虚拟仪器”来取代传统仪器的新的测控方法正在取代传统的测控系统,即利用数据采集卡、信号调理卡或其他计算机外围硬件进行信号的采集与检测,然后由计算机来实现对信号的处理、计算和分析以及测试结果的显示。 Labwindows/CⅥ是基于标准C语言的集成软件开发环境,其开发虚拟仪器的步骤主要是先确定程序的基本框架,创建用户界面,然后完成程序代码的编写,最后创建工程文件,将程序文件、头文件、用户界面文件加入工程中,编译调试生成可执行文件。 1 数据采集卡的设计 传统的数据采集卡包括多路开关、放大器、采样/保持器、A/D转换器、D/A转换器等器件组成。PCI(peripheral component
[测试测量]
基于<font color='red'>C语言</font>开发环境实现虚拟示波器测试系统的设计
【51单片机快速入门指南】4.4.1:python串口接收磁力计数据并进行最小二乘法椭球拟合
STC15F2K60S2 16.384MHz Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 Python 3.8.11 (default, Aug 6 2021, 09:57:55) :: Anaconda, Inc. on win32 参考资料: 笔记:python读取串口数据并保到本地txt文件 —— 大头工程师笔记 最小二乘法拟合—基本原理 —— 铁头娃-wefly 硬知识 Python代码 if not 1: # 0为串口收集数据,1为椭球拟合 import serial ser = serial.Seria
[单片机]
【51<font color='red'>单片机</font>快速入门指南】4.4.1:python串口接收磁力计数据并进行最小二乘法椭球拟合
单片机与嵌入式系统应用》历年文章目录
标题 刊号(年 / 月) 1 广义平台与平台模式 0101 2 按平台模式设计的虚拟I2C软件包 0102 3 以SoC为中心的多学科融合与渗透 0105 4 200201_嵌入式应用中的零功耗系统设计 0201 5 200205_从Cygnal C8051F看8位单片机发展之路 0205 6 200401_嵌入式系统的定义与发展历史
[嵌入式]
Keil C51单片机集成开发环境编程与调试教程
同 VC 之类的通用 C 语言集成开发环境(IDE)一样,Keil 也采用“工程” (Project)的方式管理源代码及相关文件,这种管理方式为由多个源代码文件组 成的大型程序开发提供了方便。不管是最简单的 C51程序,还是复杂的多文件 程序都需要以下步骤: 1)先建立新的工程文件; 2)在工程中新建源代码文件,或是将已经存在的源代码文件加入工程; 3)编译; 4)调试,修正错误再编译; 5)将生成的二进制文件*.hex 烧入单片机。 本教程重点介绍上述前 4 个步骤。 二、Keil中新建工程的步骤 1. 单击菜单“Project——New uVision Project……” 出现新建工程对话框: 在此对话框中选择存
[单片机]
Keil C51<font color='red'>单片机</font>集成开发环境编程与调试教程
单片机实现电缆测试仪的方案
  通信电缆是信息交换的主要媒质之一,在通信及计算机网络工程建设和维护中,传输电缆线路的断路、短路、混线等故障常常困扰着网络建设和网络维护人员。本文将介绍一种电缆测试仪,不仅可确定电缆线路中的断路、短路、混线故障的性质和故障点位置,而且能测试电缆的频率特性,可完成电缆自动对线,解决人们在信息系统建设和维护中常常遇到的一些问题。   1 电缆测试仪的功能   根据信息系统建设和日常维护中经常需要解决的问题,为该测试仪设计了以下几个功能:1) 可测试网络电缆的频率特性,以确定传输系统的带宽(传输速率) .2) 可实现网络电缆的自动对线,该功能在大多数电缆的施工和维护中能大大提高效率和准确率。3) 可判断线路的断路故障性质,并确定线
[测试测量]
<font color='red'>单片机</font>实现电缆测试仪的方案
单片机stm32F103单片机晶振不起振的原因分析
  这是我在做单片机最小系统板时候碰到的问题,之前虽然也做过相似的板子,可是未曾出现过无源晶振不起振的问题。下面是我在遇到问题后的一些检查,排除问题的过程。本人小菜鸟一个,文章中如有错误和不足,还望各位大佬指正和补充。   事情是这样的,本人做了一款32单片机最小系统板(先叫它老大),在老大出来之前的前五个月,我用相同的PCB板焊了一款用在毕设上面,那个是能正常工作的。板上有个小负载,LED灯。想让这个灯闪烁。代码是没有问题的,因为下载到从网上买的单片机是正常工作的。用JLink下载到自己做的板子上也是能下载进去的,但是不工作。怀疑晶振没起振。用示波器测量晶振引脚对地为一个高电平,而控制那个灯亮的管脚一直是高电平。买回来的板子
[单片机]
51单片机避坑指南
内存的使用 和stm32不同,51往往内存资源非常紧张,所以建立工程之时要列出资源使用统计表。 规则: 要给所有使用到的内存变量都指定好存放位置。 51单片机的存储器资源使用情况如下图所示: 各区域使用场合如下: 1、data区空间小,所以只有频繁用到或对运算速度要求很高的变量才放到data区内,比如for循环中的计数值。 2、data区内最好放局部变量。因为局部变量的空间是可以覆盖的(某个函数的局部变量空间在退出该函数是就释放,由别的函数的局部变量覆盖),可以提高内存利用率。当然静态局部变量除外,其内存使用方式与全局变量相同; 4、程序中遇到的逻辑标志变量可以定义到bdata中,可以大大降低内存占用空间
[单片机]
51<font color='red'>单片机</font>避坑指南
AVR单片机制被动式红外线报警器实验
该报警器由红外线发射、接收、蜂鸣器和LED指示灯组成。正常情况下,绿色的LED常烁,表示监控区域正常。一旦监控区域有人闯入,绿色LED熄灭,红色的LED快速闪烁,同时蜂鸣器立即报警。 实验器材 需要准备的器材:Atmega8、红色LED一只、绿色LED一只、万能实验板一块、5V电源、电阻、TTL0038或者其他类似38KHZ的红外接收头、5V长鸣型蜂鸣器。 线路图: 实验电路图及工作原理 该电路工作原理非常简单,Atmega8的PD0端口输出经过调制的38KHZ的方波信号,然后经Q2驱动红外线发射管LED0发出红外线信号。TL0038是集红外线信号接收放大为一体的接收器。其中心接收频率为38KZH,输出为TTL电平,平时输
[单片机]
AVR<font color='red'>单片机</font>制被动式红外线报警器实验
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved