[其它产品/技术] 单片机编程,为什么要用C语言?

[复制链接]
 楼主| OKAKAKO 发表于 2023-12-22 15:53 | 显示全部楼层 |阅读模式
随着技术的发展,电子产品越来越多,方便了我们的日常生活,大多数电子产品上都有单片机,而单片机是通过执行软件逻辑来实现功能的。而单片机编程最合适的编程语言是汇编语言,但最常用、最普及的却是C语言。那么,单片机为什么要用C语言来编程呢?

1、什么是C语言?
C语言最早是在1972年的时候在DEC PDP-11计算机上首次跑起来的,它的设计者是美国人丹尼斯·麦卡利斯泰尔·里奇,他在贝尔实验室为UNIX操作系统设计的。后来他和同事共同编写了C语言编程标准--K&R,没想到日后C语言会成为广泛的编程语言并风靡全球。而之所以叫做C语言,是因为它是在B语言的基础上而设计出来的。
UNIX操作系统、Linux操作系统、MySQL等都是使用C语言编程实现的。

2、单片机有什么特点?
单片机是可编程器件,他的控制逻辑是通过软件来实现的。在单片机之前,控制逻辑是通过纯硬件来实现的,受硬件逻辑的约束无法实现太复杂的逻辑。而单片机是有指令集的,最开始通过使用汇编来编程,虽然汇编执行效率非常高,但是汇编的可读性和移植性非常差,而C语言正好能弥补汇编的不足。

  1. 举例:MOVC  A, @A+DPTR
  2. 功能:将 DPTR+A中的值 作为地址,寻找地址中的内容 送到累加器A中


(汇编语言举例)

单片机的寄存器配置。对单片机编程其实就是配置单片机的寄存器和端口配置,而这都是具有时许的,需要精准的控制。
单片机存储和执行程序需要Flash和RAM,而这些资源非常有限。所以,代码的占用空间情况非常重要。
单片机都是有指令集的。学习过单片机汇编的朋友可能会有印象,8051单片机具有111条指令集,并且有7种不同的寻址方式。
  1. #include <stdio.h>
  2. void bubble_sort(int arr[], int len) {
  3.         int i, j, temp;
  4.         for (i = 0; i < len - 1; i++)
  5.                 for (j = 0; j < len - 1 - i; j++)
  6.                         if (arr[j] > arr[j + 1]) {
  7.                                 temp = arr[j];
  8.                                 arr[j] = arr[j + 1];
  9.                                 arr[j + 1] = temp;
  10.                         }
  11. }
  12. int main() {
  13.         int arr[] = { 22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70 };
  14.         int len = sizeof(arr) / sizeof(arr[0]);
  15.         bubble_sort(arr, len);
  16.         int i;
  17.         for (i = 0; i < len; i++)
  18.                 printf("%d ", arr[i]);
  19.         return 0;
  20. }

(冒泡排序的C语言实现)

 楼主| OKAKAKO 发表于 2023-12-22 15:54 | 显示全部楼层
3、为什么要用C语言编程
前文所说,单片机的汇编指令比较难记,可能存在两种情况:一是更换硬件平台,这要重新适配指令集、更新寄存器访问地址,比较麻烦;二是换人维护程序,汇编的可读性比较差需要较长的时间才能理解别人的程序。
而C语言就比较灵活了,正好能弥补汇编的劣势。
不需要**单片机的指令集,只需要通过寄存器的配置就能让单片机正常工作;
C语言有指针、数组、结构体、联合体、枚举等各种类型,大大增强了编程的灵活性和程序处理能力;
C语言方便模块化编程,可以实现代码的规范化。


C语言编程

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
forgot 发表于 2023-12-25 20:05 来自手机 | 显示全部楼层
其实也可以不用c语言给单片机编程的,这不是跟自己过不去嘛
MessageRing 发表于 2023-12-26 10:06 来自手机 | 显示全部楼层
因为汇编太麻烦了
中国龙芯CDX 发表于 2024-1-25 11:23 | 显示全部楼层
总结的很到位
LOVEEVER 发表于 2024-1-25 12:20 | 显示全部楼层
C语言就比较灵活了,正好能弥补汇编的劣势。
星辰大海不退缩 发表于 2024-1-28 15:51 | 显示全部楼层
主要是汇编太不人性化了,正好C灵活,适用性强
小夏天的大西瓜 发表于 2024-1-28 16:32 | 显示全部楼层
单片机是有指令集的,最开始通过使用汇编来编程,虽然汇编执行效率非常高,但是汇编的可读性和移植性非常差,而C语言正好能弥补汇编的不足。
zwsam 发表于 2024-1-29 10:08 | 显示全部楼层
发呆爱好者 发表于 2024-1-29 18:04 | 显示全部楼层
相对于汇编语言而言,C语言更加的人性化
代码输出机 发表于 2024-1-29 18:17 | 显示全部楼层
汇编语言确实是晦涩难懂,还是C语言比较人性化
超能电子 发表于 2024-1-29 18:32 | 显示全部楼层
汇编语言不好理解,C语言的诞生,可以解决这个问题。
szt1993 发表于 2024-1-29 22:09 | 显示全部楼层
目前IDE基本都是C开发的,肯定兼容性上更好
jf101 发表于 2024-1-29 22:46 | 显示全部楼层
C语言就比较灵活了,正好能弥补汇编的劣势。
lix1yr 发表于 2024-2-6 17:35 | 显示全部楼层
C语言是一种高效的编程语言,可以直接访问硬件并进行底层编程,这使得它非常适合嵌入式系统和单片机编程
t1ngus4 发表于 2024-2-6 18:46 | 显示全部楼层
C语言的代码可以相对容易地移植到不同的单片机平台上,因为它具有较高的可移植性
w2nme1ai7 发表于 2024-2-6 19:57 | 显示全部楼层
其实,C有丰富的标准库和第三方库支持,可以简化单片机编程过程,提高开发效率
q1d0mnx 发表于 2024-2-6 21:28 | 显示全部楼层
正常来说,C语言允许直接访问内存和硬件,可以进行底层的控制和优化,满足对性能和资源利用率的要求
b5z1giu 发表于 2024-2-6 22:34 | 显示全部楼层
我觉得是这样,C语言在单片机编程中具有较高的效率、可移植性和灵活性,因此被广泛应用于嵌入式系统和单片机编程中
chenjun89 发表于 2024-2-7 10:54 来自手机 | 显示全部楼层
C语言入门快,开发效率高。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

258

主题

2008

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部