00_51入门知识累计_C51简介
导语
下面是点亮51单片机使用C语言闪烁LED灯的的一段代码,也是我们迈入C51的第一步。我们将从头开始,一步步讲解下面的程序。
#include <reg52.h>#define uchar unsigned char
#define uint unsigned intsbit LED = P1^0;void main()
{LED = 0;while(1){LED = 0;delay(1000);LED = 1;delay(1000);}
}void delay(uchar ms)
{uint x = 0, y = 0;for(x=xms;x>=0;x--)for(y=110;y>=0;y--);
}
.C to .Hex
在从编写的上述文本程序到实际烧录到单片机的Hex二进制机器语言,keil 这个大家伙帮我们做了很多的东西。
单片机可以看作是一个功能完全的计算机,同计算机一样,单片机只能识别机器语言。也就是用二进制代码表达指令,但更确切一点来说,机器语言是由高低电位构成的,指定高电位为1,低电位为0,而我们对电路进行一定的设计后,电路中高低电位的输入输出正好与2进制状态相符,所以我们也就看到了 1、0的那种表现形式。
同时,为了简化二进制的表现形式,我们使用16进制来表示,即Hex文件。
但编写机器语言太过繁琐,人们开始用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。这就是汇编语言,但低级,不具有移植性,能直接访问计算机硬件,效率高,占用资源少,学习入门较为困难,切移植性差。
C语言是一种高级编程语言,与低级语言相对。它是以人类的日常语言为基础的一种编程语言,使用一般人易于接受的文字来表示,有较高的可读性,以方便对电脑认知较浅的人亦可以大概明白其内容。
所编写的C语言通过Keil进行预处理,编译,链接等就生成了Hex文件,我们将Hex文件烧录到单片机中,复位就运行起来了。
预处理
预处理以# 开头,在从.C 到 .hex 之前,扩展C语言程序设计的环境。
#include <reg52.h>的作用将 reg52.h文件复制到编译的源文件中,使用<>或" "包含文件名。
#define uchar unsigned char 的作用是将unsigned char替换为uchar 。
也常用#define 定义一些函数宏、常量等。如#define PI 3.14、#define ABS(x) (x)<0?-(x):(x)
还有更多的预处理方式,暂无必要,勿增新知。
变量
变量格式
[存储种类] 数据类型 [存储器类型] 变量名表 赋值;
其中存储种类和存储器类型在初学时不必了解,编译器会自动的赋予默认值。
变量名是C51区分不同变量,为不同变量取的名称。在C51中规定变量名可以由字母、数字和下划线三种字符组成,且第一个字母必须为字母或下划线。
数据类型用于向单片机申请内存大小,也决定了变量的数值范围。在单片机的内部是以字节为操作,一个字节八个位,即一个字节所表示的数据范围在 0000 0000 到 1111 1111;在此,二进制没有符号位,于是人为的使用最高位表示符号位,1为负,0为1;即表示范围为 1111 1111 到 0111 1111,即十进制的-128到127。但大多数时候,单片机很少用到赋值,因此我们在数据类型前加上修饰符unsigned 来去掉符号位。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传!在这里插入图片描述
在C语言中,无法直接去操作变量中的单独的某一位,但C51中添加了bit 位,是 c51 编译器的一种扩充数据类型,利用它可定义一个位标量,它的值是一个二进制位,不是 0 就是 1,sbit 同样是 单片机c语言 中的一种扩充数据类型,利用它能访问芯片内部的 RAM 中的可寻址位或特殊功能寄存器中的可寻址位。
函数
void main() 和 void delay(uchar ms) 都是函数;
返回类型 函数名(数据类型 形参名称...){功能代码;
}
函数是指一段可以直接被另一段程序或代码引用的程序或代码。也叫做子程序、方法。
void 表示没有返回值,大多数的情况下,我们将使用void修饰的函数,也可以使用有返回值的方式返回uint等;
其中main()是每一个函数中最重要的,单片机开机复位后将运行main()函数,当他执行完后,程序将会从头开始,我们不希望这样,因此我们添加了
while(1){}
这时一行循环语句,并且是一个死循环,即会一直循环{ }内的程序。
delay()是一个延时函数,我们向括号中填写ms,程序便会赞同多少ms,他用于实现的延时的子功能;
运算符
LED = 0;
给led赋值0,即将右边的值填入左边,填入的值不应超过数据类型的表示范围。
y--
运行过后,y将减少1;
y>=0
布尔运算,只有两个值,0 或 1,大于0为真1,反之为0。
的值填入左边,填入的值不应超过数据类型的表示范围。
y--
运行过后,y将减少1;
y>=0
布尔运算,只有两个值,0 或 1,大于0为真1,反之为0。
选择高品质的元器件是电路良好运行的基本保证,找元器件现货上唯样商城,原厂授权 正品保障,品类齐全 一站采购。
00_51入门知识累计_C51简介相关推荐
- C# 基础知识 (四).C#简介及托管代码
暑假转瞬即逝,从10天的支教生活到1周的江浙沪旅游,在这个漫长的暑假中我经历了很多东西,也学到了很多东西,也认识到了很多不足之处!闲暇之余我准备重新进一步巩固C#相关知识,包括C#入门 ...
- 第4讲:C# 入门教程 入门知识(黄菊华NET网站开发、C#网站开发、Razor网站开发教程)
入门知识 .NET.C#和ASP.NET三者之间的区别如下: 一.什么是.NET? .NET是微软公司下的一个开发平台,.NET核心就是.NET Framwork(.NET框架)是.NET程序开发和运 ...
- 手把手教你快速入门知识图谱 - Neo4J教程
手把手教你快速入门知识图谱 - Neo4J教程 前言 1. Neo4J简介 2. Neo4J安装 3. Neo4J使用 4. Cypher查询语言 5. Neo4J实战教程 1. 首先,我们删除数据库 ...
- Python 入门知识(转)
初学python,发现此编程语言与之前学习的C语言有较大不同.基础的语法方面个人认为更为简单,逻辑方面更易理解,入门阶段暂时觉得难度不高. 原 Python 入门知识1 2019年03月12日 17: ...
- 微信小程序开发学习1(小程序的入门知识)
微信小程序开发学习1(小程序的入门知识) 1.制定学习目标: 能够知道如何创建小程序项目 能够清楚小程序项目的基本组成结构 能够知道小程序页面的几个组成部分 能够知道小程序中常见的组件如何使用 能够知 ...
- 知识图谱专栏简介:数据增强,智能标注,文本信息抽取(实体关系事件抽取)、知识融合算法方案、知识推理、模型优化、模型压缩技术等
知识图谱专栏简介:数据增强,智能标注,文本信息抽取(实体关系事件抽取).知识融合算法方案.知识推理.模型优化.模型压缩技术等 专栏链接:NLP知识图谱相关技术业务落地方案和码源 NLP知识图谱相关技术 ...
- java圆周率流程图,流程图、PI图入门知识 课件.doc
流程图.PI图入门知识 课件 流程图.PI图入门知识 基本定义 工艺流程图﹙又叫PI图﹚,通过图解的形式,表示出在化工生产过程中,由原料制得产品过程的物料和能量发生的变化及其流向:表示出生产中采用的化 ...
- 和与余数的和同余理解_5 同余 ——数论入门知识讲解系列
数学竞赛 数论是纯粹数学的分支之一,主要研究整数的性质,按研究方法分为初等数论和高等数论.中学生(甚至小学生)课外数学兴趣小组的许多内容是属于初等数论的,各级别数学竞赛也会把初等数论作为重点内容进行考 ...
- python 快速排序_小白入门知识详解:Python实现快速排序的方法(含实例代码)...
前言: 今天为大家带来的内容是:小白入门知识详解:Python实现快速排序的方法(含实例代码)希望通过本文的内容能够对各位有所帮助,喜欢的话记得点赞转发收藏不迷路哦!!! 提示: 这篇文章主要介绍了P ...
最新文章
- Javascript 移动的海绵宝宝
- 进阶指令——wc指令【作用:统计文件内容信息(包含行数、单词数、字节数)】、date指令【作用:表示操作时间日期(读取、设置)】、cal指令【作用:用来操作日历的】、clear/ctrl + L指令
- 神经网络贷款风险评估(base on keras and python )
- Django 权限管理
- ubuntu 16.04 python3.4 升级为 python3.6
- ShardingSphere RAW JDBC 分布式事务XA 代码示例
- 抢占计算机与通信设备未来产业制高点 ——《信息产业发展指南》解读
- igllib 203 Curvature directions
- Atitit 常见信息化系统类别erp mes crm cms oa 目录 1. 企业资源规划(ERP)、客户关系管理(CRM)、协同管理系统(CMS)是企业信息化的三大代表之作	1 2. 概
- 数据挖掘导论完整版pdf中文
- ubuntu查看eps软件
- Windows系统常用快捷键
- 遗补:“预防‘磁碟机’病毒”
- kubuntu 20.04 终端输入中文时乱码
- 刘寅:TiDB 工具链和生态
- Android Studio 部分查找快捷键
- 网络安全攻防在线学习平台总结
- 开关灯问题两种解决方法
- Android9.0 http网络请求失败问题分析与解决方案
- Java实现二维码,验证码详细总结
热门文章
- 智能优化算法之蚁群算法(ACO)
- java math pi_如何在java中使用math.pi
- html5绘制圣诞树,【Html5】JavaScript和html5实现3D圣诞树的代码
- 小程序广告主和流量主相关
- SAP FICO 应收应付重分类的坑 SAP S4 HANA
- C/C++编译器gcc的windows版本MinGW-w64安装教程
- 把当前web页面上的所有图片复制到特定目录
- 考研操作系统题目整理
- 小米杀不死的消息推送-- Android、java后端同时接入小米推送
- 手机PUK码和PIN码知识及其查询方式