导语

下面是点亮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简介相关推荐

  1. C# 基础知识 (四).C#简介及托管代码

            暑假转瞬即逝,从10天的支教生活到1周的江浙沪旅游,在这个漫长的暑假中我经历了很多东西,也学到了很多东西,也认识到了很多不足之处!闲暇之余我准备重新进一步巩固C#相关知识,包括C#入门 ...

  2. 第4讲:C# 入门教程 入门知识(黄菊华NET网站开发、C#网站开发、Razor网站开发教程)

    入门知识 .NET.C#和ASP.NET三者之间的区别如下: 一.什么是.NET? .NET是微软公司下的一个开发平台,.NET核心就是.NET Framwork(.NET框架)是.NET程序开发和运 ...

  3. 手把手教你快速入门知识图谱 - Neo4J教程

    手把手教你快速入门知识图谱 - Neo4J教程 前言 1. Neo4J简介 2. Neo4J安装 3. Neo4J使用 4. Cypher查询语言 5. Neo4J实战教程 1. 首先,我们删除数据库 ...

  4. Python 入门知识(转)

    初学python,发现此编程语言与之前学习的C语言有较大不同.基础的语法方面个人认为更为简单,逻辑方面更易理解,入门阶段暂时觉得难度不高. 原 Python 入门知识1 2019年03月12日 17: ...

  5. 微信小程序开发学习1(小程序的入门知识)

    微信小程序开发学习1(小程序的入门知识) 1.制定学习目标: 能够知道如何创建小程序项目 能够清楚小程序项目的基本组成结构 能够知道小程序页面的几个组成部分 能够知道小程序中常见的组件如何使用 能够知 ...

  6. 知识图谱专栏简介:数据增强,智能标注,文本信息抽取(实体关系事件抽取)、知识融合算法方案、知识推理、模型优化、模型压缩技术等

    知识图谱专栏简介:数据增强,智能标注,文本信息抽取(实体关系事件抽取).知识融合算法方案.知识推理.模型优化.模型压缩技术等 专栏链接:NLP知识图谱相关技术业务落地方案和码源 NLP知识图谱相关技术 ...

  7. java圆周率流程图,流程图、PI图入门知识 课件.doc

    流程图.PI图入门知识 课件 流程图.PI图入门知识 基本定义 工艺流程图﹙又叫PI图﹚,通过图解的形式,表示出在化工生产过程中,由原料制得产品过程的物料和能量发生的变化及其流向:表示出生产中采用的化 ...

  8. 和与余数的和同余理解_5 同余 ——数论入门知识讲解系列

    数学竞赛 数论是纯粹数学的分支之一,主要研究整数的性质,按研究方法分为初等数论和高等数论.中学生(甚至小学生)课外数学兴趣小组的许多内容是属于初等数论的,各级别数学竞赛也会把初等数论作为重点内容进行考 ...

  9. python 快速排序_小白入门知识详解:Python实现快速排序的方法(含实例代码)...

    前言: 今天为大家带来的内容是:小白入门知识详解:Python实现快速排序的方法(含实例代码)希望通过本文的内容能够对各位有所帮助,喜欢的话记得点赞转发收藏不迷路哦!!! 提示: 这篇文章主要介绍了P ...

最新文章

  1. Javascript 移动的海绵宝宝
  2. 进阶指令——wc指令【作用:统计文件内容信息(包含行数、单词数、字节数)】、date指令【作用:表示操作时间日期(读取、设置)】、cal指令【作用:用来操作日历的】、clear/ctrl + L指令
  3. 神经网络贷款风险评估(base on keras and python )
  4. Django 权限管理
  5. ubuntu 16.04 python3.4 升级为 python3.6
  6. ShardingSphere RAW JDBC 分布式事务XA 代码示例
  7. 抢占计算机与通信设备未来产业制高点 ——《信息产业发展指南》解读
  8. igllib 203 Curvature directions
  9. Atitit 常见信息化系统类别erp mes crm cms oa 目录 1.  企业资源规划(ERP)、客户关系管理(CRM)、协同管理系统(CMS)是企业信息化的三大代表之作 1 2. 概
  10. 数据挖掘导论完整版pdf中文
  11. ubuntu查看eps软件
  12. Windows系统常用快捷键
  13. 遗补:“预防‘磁碟机’病毒”
  14. kubuntu 20.04 终端输入中文时乱码
  15. 刘寅:TiDB 工具链和生态
  16. Android Studio 部分查找快捷键
  17. 网络安全攻防在线学习平台总结
  18. 开关灯问题两种解决方法
  19. Android9.0 http网络请求失败问题分析与解决方案
  20. Java实现二维码,验证码详细总结

热门文章

  1. 智能优化算法之蚁群算法(ACO)
  2. java math pi_如何在java中使用math.pi
  3. html5绘制圣诞树,【Html5】JavaScript和html5实现3D圣诞树的代码
  4. 小程序广告主和流量主相关
  5. SAP FICO 应收应付重分类的坑 SAP S4 HANA
  6. C/C++编译器gcc的windows版本MinGW-w64安装教程
  7. 把当前web页面上的所有图片复制到特定目录
  8. 考研操作系统题目整理
  9. 小米杀不死的消息推送-- Android、java后端同时接入小米推送
  10. 手机PUK码和PIN码知识及其查询方式