我们即将进入51单片机的编程学习,咱们今天就来讲解一下单片机中的C语言(你可以称作C51)

在说编程之前,要先说一些别的东西:

  • 二进制,八进制,十六进制
  1. 二进制中只有数字0和1,在二进制中1+1为10,我们常说十进制逢十进一,那二进制就是逢二进一,那为什么我会在这里说二进制呢,因为我们的51单片机的io口是可以接受发送低电平和高电平的,意思就是输入输出的口只有0和1两个状态,所以如果我们理解了二进制,那么对于单片机的输入和输出就会十分明了了
  2. 八进制,学过C语言,咱们都知道,在C语言中其实是不能直接写二进制的数的,但是是可以直接写八进制的数和十六进制的数,所以,在这里,八进制和十六进制还是为二进制服务的,可以说是二进制的两种表达形式,我们先来说八进制,八进制和二进制的互转是非常快捷,我们可以用这个方法完成二进制和八进制的互相转换:把二进制从低位开始,每三位一组,然后把每组转成八进制的数,这样得到的新的数就是我们二进制所对应的的八进制,举个例子:有这样一个二进制数1101010101010101010,我们把它从低位开始分成每三个一组,就是001 101 010 101 010 101 010,然后我们将每一组都转成八进制的数1 5 2 5 2 5 2,合起来就是1525252,我们就这样得到了八进制的数(在这里先说方法,原因一会儿会说)
  3. 十六进制,同样的,十六进制也是为二进制服务的,那么十六进制和二进制怎么转换呢,是这样的:把二进制从低位开始,每四位一组,然后把每组转成十六进制的数,这样得到的新的数就是我们二进制所对应的的十六进制,还是举个例子,还是那个二进制数1101010101010101010,我们把它从低位开始分成每四个一组,就是0110 1010 1010 1010 1010,然后我们将每一组都转成十六进制的数6 a a a a,合起来就是6aaaa,我们呢也就得到了十六进制的数

略微的解释:对于上述方法,可能有人会比较懵逼,不知道为什么要这样做,我们就来看一下:

  • 二进制3位一组,我们可以有这么八个数:000,001,010,011,100,101,110,111,这八个数正好就是从0到7,正好可以完完整整的表示我们的八进制,一个不多一个不少
  • 二进制4位一组,我们可以有这么十六个数:0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111,而这十六个数正好就是从0到15,用十六进制表示就是从0到F,也是正正好好可以表示我们的十六进制,所以方法是这样的来的
  • 对于二进制数的计算,可能有些人不大理解,我们就以上面十六进制的例子来详细说一下:0110 1010 1010 1010 1010,我们算0110,0*8+1*4+1*2+0*1=6,然后我们再算1010,1*8+0*4+1*2+0*1=10,十六进制中10是a,所以结果是a,剩下的一样,所以我们就得到了6 a a a a
  • 在C语言中,八进制的数要在数字前面加一个0,比如017,但是是不能写018的,原因你自己斟酌一下,十六进制的数前面要加一个0x或者0X

位运算

为什么我要说位运算呢,因为位运算在我们的51中也有非常大的作用,然后另一个原因是有一些学校教学的进度可能会慢,一个学期没有学到这里,而我们却要用到位运算,怕出现这种尴尬的局面,我就把位运算也一同写了进来,在之后的学习生活当中,你会用到很多位运算的,特别是在单片机中,它不仅直观,而且还高效

  • &--按位与

首先要申明的一点,所有的位运算都是对二进制进行处理的,我们的按位与是一个双目运算符,是将两个数的二进制相对应的每一位进行逻辑与的操作,举个例子12&7,12的二进制为1100,7的二进制为111(也就是0111),我们就将每一位进行逻辑与的操作,得到了每个位上的结果0 1 0 0,就是二进制数100,而100转为十进制为4,所以我们得到了12&7的结果为4

  • |--按位或

有了之前计算按位与的操作,按位或就很好理解了,就是对每一位进行逻辑或的操作

同样的还有按位异或,左移,右移,按位取反等等,你可以点击这里获取相应的计算,在这里重复只会显得赘余,等之后需要用到的时候你就知道作用了

在说完这些之后,我们就可以进入单片机的学习了,我们下个文章见

程序烧录软件

51单片机入门1--与C语言的交接的更多相关文章

  1. 51单片机入门(补充)1--与C语言的交接

    我写完上一个文章,发现我写的还是不够全面,所以,这篇文章将会延续上一个文章的内容,并且再次补充新的东西,如果还有什么地方需要补充,还请各位一一指出,如果你已经学过这些东西,大可以直接跳过,假如说之后有 ...

  2. 【零基础】入门51单片机图文教程(Proteus+Keil)

    参考资料: https://www.jianshu.com/p/88dfc09e7403 https://blog.csdn.net/feit2417/article/details/80890218 ...

  3. [学习笔记]15个QA让你快速入门51单片机开发

    一.C语言相关 Q1:sbit与sfr代表是什么?有什么作用? Q2:#define OSC_FREQ  22118400L这句宏命令里的“L”是什么意思? Q3:我粘贴了别人的代码,怎么发现没有un ...

  4. [新概念51单片机C语言教程·郭天祥] 1、 基础知识必备

    目录: 单片机的大致介绍         1-1.通俗定义         1-2.51系列产品         1-3.标号意思         1-4.引脚介绍         1-5.用C语言开 ...

  5. 51单片机C语言学习笔记3: 存储器结构

    MCS-51单片机在物理结构上有四个存储空间: 1.片内程序存储器2.片外程序存储器3.片内数据存储器4.片外数据存储器 但在逻辑上,即从用户的角度上,8051单片机有三个存储空间: 1.片内外统一编 ...

  6. 51单片机C语言学习笔记6:51单片机C语言头文件及其使用

    很多初学单片机者往往对C51的头文件感到很神秘,而为什么要那样写,甚至有的初学者喜欢问,P1口的P为什么要大写,不大写行不行呢?其实这个是在头文件中用sfr定义的,现在定义好了的是这样的 sfr P1 ...

  7. c语言编写51单片机中断程序,执行过程是怎样的?

    Q:c语言编写51单片机中断程序,执行过程是怎样的? 例如程序:#include<reg52.h>  void main(void)  {   EA=1;      //开放总中断   E ...

  8. 《例说51单片机(C语言版)(第3版)》——1-3 认识MCS-51的存储器结构

    本节书摘来异步社区<例说51单片机(C语言版)(第3版)>一书中的第1章,第1.3节,作者:张义和,王敏男,许宏昌,余春长,更多章节内容可以访问云栖社区"异步社区"公众 ...

  9. 基于51单片机的CAN通讯协议C语言程序

      //-----------------------函数声明,变量定义-------------------------------------------------------- #includ ...

随机推荐

  1. Java实现 LeetCode 712 两个字符串的最小ASCII删除和(最长公共子串&&ASCII值最小)

    712. 两个字符串的最小ASCII删除和 给定两个字符串s1, s2,找到使两个字符串相等所需删除字符的ASCII值的最小和. 示例 1: 输入: s1 = "sea", s2 ...

  2. Java实现 LeetCode 336 回文对

    336. 回文对 给定一组唯一的单词, 找出所有不同 的索引对(i, j),使得列表中的两个单词, words[i] + words[j] ,可拼接成回文串. 示例 1: 输入: ["abc ...

  3. Java实现 洛谷 P1028 数的计算

    import java.util.Scanner; import java.util.Arrays; public class Main { private static Scanner cin; p ...

  4. java实现人员排日程

    某保密单位机要人员 A,B,C,D,E 每周需要工作5天,休息2天. 上级要求每个人每周的工作日和休息日安排必须是固定的,不能在周间变更. 此外,由于工作需要,还有如下要求: 所有人的连续工作日不能多 ...

  5. Java实现第九届蓝桥杯字母阵列

    字母阵列 题目描述 仔细寻找,会发现:在下面的8x8的方阵中,隐藏着字母序列:"LANQIAO". SLANQIAO ZOEXCCGB MOAYWKHI BCCIPLJQ SLAN ...

  6. HDU - 2639 Bone Collector II 题解

    题目大意 一个人收藏骨头,有 n 个骨头,每个骨头有体积和价值,问能够装在容量为 V 的背包中,能获得的第 k 大(去重后)价值是多少. 样例 样例输入 1 5 10 2 1 2 3 4 5 5 4 ...

  7. mui消息弹出确认框

    var btnArray = ['以后再说', '前往添加']; mui.confirm('你需要即时添加员工才可正常使用', '添加员工', btnArray, function(e) { if ( ...

  8. CSS中的百分比(%)如何使用???

    除了height以外垂直方向上的margin-top(bottom)或者padding-top(bottom)的百分比取值都是相对于父元素的宽度 在默认的content-box盒模型下元素的width ...

  9. CentOS 7设置静态IP并修改DNS

    1. 设置静态IP 首先需要确定网线插在服务器的哪一个网络接口上,接口旁边一般都有写.我这边是插在1号接口上的. 然后修改网络配置文件,文件位于 /etc/sysconfig/network-scri ...

  10. 手写网页扫雷之HTML部分

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...