我们即将进入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 792 自定义字符串排序(暴力)

    792. 匹配子序列的单词数 给定字符串 S 和单词字典 words, 求 words[i] 中是 S 的子序列的单词个数. 示例: 输入: S = "abcde" words = ...

  2. Java实现 LeetCode 343 整数拆分(动态规划入门经典)

    343. 整数拆分 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化. 返回你可以获得的最大乘积. 示例 1: 输入: 2 输出: 1 解释: 2 = 1 + 1, 1 × ...

  3. Java实现 蓝桥杯VIP 算法提高 打水问题

    算法提高 打水问题 时间限制:1.0s 内存限制:512.0MB 问题描述 N个人要打水,有M个水龙头,第i个人打水所需时间为Ti,请安排一个合理的方案使得所有人的等待时间之和尽量小. 输入格式 第一 ...

  4. Java实现 LeetCode 104 二叉树的最大深度

    104. 二叉树的最大深度 给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. 说明: 叶子节点是指没有子节点的节点. 示例: 给定二叉树 [3,9,20,nu ...

  5. java实现第四届蓝桥杯埃及分数

    埃及分数 古埃及曾经创造出灿烂的人类文明,他们的分数表示却很令人不解.古埃及喜欢把一个分数分解为类似: 1/a + 1/b 的格式. 这里,a 和 b 必须是不同的两个整数,分子必须为 1 比如,2/ ...

  6. CDN HTTPS安全加速基本概念、解决方案及优化实践

    大家都知道,HTTP 本身是明文传输的,没有经过任何安全处理,网站HTTPS解决方案通过在HTTP协议之上引入证书服务,完美解决网站的安全问题.本文将为大家介绍阿里云CDN HTTPS安全加速传输的基 ...

  7. MyISAM 和 InnoDB 索引结构及其实现原理

    数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询.更新数据库表中数据. 索引的实现通常使用B_TREE. B_TREE索引加速了数据访问,因为存储引擎不会再去扫描整张表得到需要的数据; ...

  8. 2019-02-02 Python学习之多线程

    1.主线程和次线程 若主线程结束则次线程也会结束 如何避免主线程先结束: 结尾处加上 while True: pass e.g. import win32api #引用系统函数 import _thr ...

  9. Jenkins登录无效

    解决办法: 进入Jenkins安装目录: 1:进入D:\jenkins\users\admin 这个目录下找到config.xml  可以看到里面的用户名是admin 2:进入D:\jenkins\s ...

  10. LeetCode 77,组合挑战,你能想出不用递归的解法吗?

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode第46篇文章,我们一起来LeetCode中的77题,Combinations(组合). 这个题目可以说是很精辟了,仅仅 ...