51单片机入门1--与C语言的交接
我们即将进入51单片机的编程学习,咱们今天就来讲解一下单片机中的C语言(你可以称作C51)
在说编程之前,要先说一些别的东西:
- 二进制,八进制,十六进制
- 二进制中只有数字0和1,在二进制中1+1为10,我们常说十进制逢十进一,那二进制就是逢二进一,那为什么我会在这里说二进制呢,因为我们的51单片机的io口是可以接受发送低电平和高电平的,意思就是输入输出的口只有0和1两个状态,所以如果我们理解了二进制,那么对于单片机的输入和输出就会十分明了了
- 八进制,学过C语言,咱们都知道,在C语言中其实是不能直接写二进制的数的,但是是可以直接写八进制的数和十六进制的数,所以,在这里,八进制和十六进制还是为二进制服务的,可以说是二进制的两种表达形式,我们先来说八进制,八进制和二进制的互转是非常快捷,我们可以用这个方法完成二进制和八进制的互相转换:把二进制从低位开始,每三位一组,然后把每组转成八进制的数,这样得到的新的数就是我们二进制所对应的的八进制,举个例子:有这样一个二进制数1101010101010101010,我们把它从低位开始分成每三个一组,就是001 101 010 101 010 101 010,然后我们将每一组都转成八进制的数1 5 2 5 2 5 2,合起来就是1525252,我们就这样得到了八进制的数(在这里先说方法,原因一会儿会说)
- 十六进制,同样的,十六进制也是为二进制服务的,那么十六进制和二进制怎么转换呢,是这样的:把二进制从低位开始,每四位一组,然后把每组转成十六进制的数,这样得到的新的数就是我们二进制所对应的的十六进制,还是举个例子,还是那个二进制数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语言的交接的更多相关文章
- 51单片机入门(补充)1--与C语言的交接
我写完上一个文章,发现我写的还是不够全面,所以,这篇文章将会延续上一个文章的内容,并且再次补充新的东西,如果还有什么地方需要补充,还请各位一一指出,如果你已经学过这些东西,大可以直接跳过,假如说之后有 ...
- 【零基础】入门51单片机图文教程(Proteus+Keil)
参考资料: https://www.jianshu.com/p/88dfc09e7403 https://blog.csdn.net/feit2417/article/details/80890218 ...
- [学习笔记]15个QA让你快速入门51单片机开发
一.C语言相关 Q1:sbit与sfr代表是什么?有什么作用? Q2:#define OSC_FREQ 22118400L这句宏命令里的“L”是什么意思? Q3:我粘贴了别人的代码,怎么发现没有un ...
- [新概念51单片机C语言教程·郭天祥] 1、 基础知识必备
目录: 单片机的大致介绍 1-1.通俗定义 1-2.51系列产品 1-3.标号意思 1-4.引脚介绍 1-5.用C语言开 ...
- 51单片机C语言学习笔记3: 存储器结构
MCS-51单片机在物理结构上有四个存储空间: 1.片内程序存储器2.片外程序存储器3.片内数据存储器4.片外数据存储器 但在逻辑上,即从用户的角度上,8051单片机有三个存储空间: 1.片内外统一编 ...
- 51单片机C语言学习笔记6:51单片机C语言头文件及其使用
很多初学单片机者往往对C51的头文件感到很神秘,而为什么要那样写,甚至有的初学者喜欢问,P1口的P为什么要大写,不大写行不行呢?其实这个是在头文件中用sfr定义的,现在定义好了的是这样的 sfr P1 ...
- c语言编写51单片机中断程序,执行过程是怎样的?
Q:c语言编写51单片机中断程序,执行过程是怎样的? 例如程序:#include<reg52.h> void main(void) { EA=1; //开放总中断 E ...
- 《例说51单片机(C语言版)(第3版)》——1-3 认识MCS-51的存储器结构
本节书摘来异步社区<例说51单片机(C语言版)(第3版)>一书中的第1章,第1.3节,作者:张义和,王敏男,许宏昌,余春长,更多章节内容可以访问云栖社区"异步社区"公众 ...
- 基于51单片机的CAN通讯协议C语言程序
//-----------------------函数声明,变量定义-------------------------------------------------------- #includ ...
随机推荐
- Java实现 LeetCode 668 乘法表中第k小的数(二分)
668. 乘法表中第k小的数 几乎每一个人都用 乘法表.但是你能在乘法表中快速找到第k小的数字吗? 给定高度m .宽度n 的一张 m * n的乘法表,以及正整数k,你需要返回表中第k 小的数字. 例 ...
- java实现第七届蓝桥杯冰雹数
题目8.冰雹数 题目描述 任意给定一个正整数N, 如果是偶数,执行: N / 2 如果是奇数,执行: N * 3 + 1 生成的新的数字再执行同样的动作,循环往复. 通过观察发现,这个数字会一会儿上升 ...
- java实现第六届蓝桥杯九数组分数
九数组分数 九数组分数 1,2,3...9 这九个数字组成一个分数,其值恰好为1/3,如何组法? 下面的程序实现了该功能,请填写划线部分缺失的代码. public class A { public s ...
- 从零搭建Window前端开发环境
前言 作为一个小前端,是否因为搭建环境烦恼过,是否因为npm等国外镜像踩坑过,不要怕,接下来跟着我一步步搭建适合自己的开发环境吧!!! node 这个不用说了吧,我们经常和他打交道,无论是 gulp. ...
- 重学 Java 设计模式:实战桥接模式(多支付渠道「微信、支付宝」与多支付模式「刷脸、指纹」场景)
作者:小傅哥 博客:https://bugstack.cn - 编写系列原创专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 为什么你的代码那么多ifelse 同类的业务.同样的功能, ...
- opencl(6)读写传输命令、内存映射命令
1:将缓存对象的内容读到缓存对象中(从设备到主机) cl_int clEnqueuReadBuffer( cl_command_queue command_queue, //命令队列 cl_mem b ...
- Centos网络配置文件详解
配置文件位置: 根目录下面的etc下面的sysconfig下面的network-scripts下面的网卡名称配置文件. /etc/sysconfig/network-scripts/网卡名称 如图:我 ...
- nginx下通过子路径配置多个vue单页应用的方法
千辛万苦在Stack Overflow上找来的,记下吧. https://stackoverflow.com/q/31519505/13651734 我的需求是 首页:/ 项目a:/aaa 项目 b: ...
- 01.vue-router的基本使用
Vue前端路由 1. npm install vue-router --save 2.脚手架安装 一.目录结构 二.index.js // 0.导入vue和路由插件 import Vue from ' ...
- 4k壁纸
4k