c语言干不了 汇编能做的事_单片机入门-要从汇编开始

简介

单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器、显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等功能集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。单片机的发展先后经历了4位、8位、16位和32位等阶段。8位单片机由于功能强,被广泛用于工业控制、智能接口、仪器仪表等各个领域,8位单片机在中、小规模应用场合仍占主流地位,代表了单片机的发展方向,在单片机应用领域发挥着越来越大的作用。

6a514744898332b4aa7da9e1f51f998f.png

51单片机

单片机的开发主要包括CPU开发、程序开发、 存储器开发、计算机开发及C语言程序开发,同时得到开发能够保证单片机在十分复杂的计算机与控制环境中可以正常有序的进行。程序开发嵌入式系统的合理应用得到了大力推广,对程序进行开发时要求能够自动执行各种指令,这样可以快速准确地采集外部数据,提高单片机的应用效率。

为啥选汇编入门

很多电子爱好者都想学习单片机这门技术,初学者入门从底层硬件入手基于汇编和c两种语言,详细的介绍了单片机的原理,指令,寄存器,以及接口等,后面还为你准备了一些小的设计。都是从单片机最基本的东西讲起,相信你一定能看懂,并且学会单片机这门有意思的技术,有什么问题可在文章后面的评论留言。

初学单片机汇编有利于深入结构的了解,但是真正工作的时候,用的是C语言;汇编语言一般只在处理器启动的时候用一下,或C语言插入汇编的调用,之后就全是C语言,汇编移植性太差,但是它的效率高,时间精度能控制好。一般汇编都不需要你自己写,拿来用就行,主要还是C语言。可以肯定的告诉 你,99%用C语言。

0a614588dbb470f3c181b237e178b8d0.png

51单片机开发板

现在单片机的编程大多 是C语言完成

但有时代码中必须嵌入汇编语言解决某些特定的问题

对于程序调试 汇编语言更是不可或缺。

直接使用汇编指令编写单片机程序,对硬件的控制更加直接,可以直接操作物理地址,寄存器,端口等;其它更高级的语言(如:C语言)对硬件的控制是依赖于类库来实现的。并且,对于一些对程序大小和运行速度有非常严苛要求的项目而言,都必须使用汇编指令。C语言只是为了方便编写,与机器打交道的其实都是2进制得代码,汇编语言就是这些代码好记忆的名称和规则,只是比C语言难理解些。

06443dcd0e75bd26ab81b06093b33b32.png

单片机

单片机最小系统

包括电源电路时钟晶振电路复位电路

8d24a265bfd3e478a5788937f0fd0d1c.png

时钟晶振电路、复位电路

程序存储器中有七个特设的地址,其功能分别是用于:
0000H 复位时ROM的地址;
0003H 外部中断0入口地址;
000BH 定时器计数器0溢出中断入口地址;
0013H 外部中断1入口地址;
001BH 定时器计数器1溢出中断入口地址;
0023H串行口中断入口地址;
002BH 定时/计数器2溢出中断入口地址。

0000H地址是单片机复位时的PC地址,从0000H开始执行程序。

其他6个地址是单片机相应不同的中断时,所跳向对应的入口地址。

该表也叫中断向量表或称中断向量,在写程序时,这些地址不要占用。
使用时一般在这6个地址写跳转指令,如AJMP,LMJP等等。

单片机汇编指令

为解决某些特定的问题代码中必须嵌入汇编语言以代替C语言完成的单片机的编程,汇编语言对于程序调试是不可或缺的。它包括:算术操作类指令,布尔变量操作类指令,逻辑操作数指令,控制转移类指令。

常用单片机汇编指令:

1 .MOV A,Rn 寄存器内容送入累加器

2 .MOV A,direct 直接地址单元中的数据送入累加器

3 .MOV A,@Ri (i=0,1)间接RAM 中的数据送入累加器

4 .MOV A,#data 立即数送入累加器

5 .MOV Rn,A 累加器内容送入寄存器

6 .MOV Rn,direct 直接地址单元中的数据送入寄存器

7 .MOV Rn,#data 立即数送入寄存器

8 .MOV direct,A 累加器内容送入直接地址单元

9 .MOV direct,Rn 寄存器内容送入直接地址单元

布尔变量操作类指令:

1. CLR C 清进位位

2 .CLR bit 清直接地址位

3 .SETB C 置进位位

4 .SETB bit 置直接地址位

控制转移类指令

1. ACALL addr11 绝对(短)调用子程序

2 .LCALL addr16 长调用子程序

3 .RET 子程序返回

4 .RETI 中断返回

5 .AJMP addr11 绝对(短)转移

6 .LJMP addr16 长转移

7 .SJMP rel 相对转移

8 .JMP @A+DPTR 相对于DPTR 的间接转移

9. JZ rel 累加器为零转移

10. JNZ rel 累加器非零转移

11. CJNE A,direct,rel 累加器与直接地址单元比较,不相等则转移

12 .CJNE A,#data,rel 累加器与立即数比较,不相等则转移

13 .CJNE Rn,#data,rel 寄存器与立即数比较,不相等则转移

14 .CJNE @Ri,#data,rel 间接RAM 单元与立即数比较,不相等则转移

15 .DJNZ Rn,rel 寄存器减1,非零转移

16 .DJNZ direct,rel 直接地址单元减1,非零转移

17 .NOP 空操作

57ee7717b1c26347833a729cc1bd73f2.png

闪烁灯汇编代码

a945d03a0abb1361db130ce759f5fa6f.png

流程图

闪烁灯汇编代码:

ORG 0000H ;初始地址

LJMP A0A0 ;跳转至I/O初始化

ORG 002BH

A0A0:MOV P0,#0FFH ;P0口初始化

MOV P1,#0FFH ;P1口初始化

MOV P2,#0FFH ;P2口初始化

MOV P3,#0FFH ;P3口初始化

A0A1:SETB P1.5 ;P1.5置1(高电平)

LCALL DELA0 ;调用延时

CLR P1.5 ;P1.5清0(低电平)

LCALL DELA0 ;调用延时

LJMP A0A1 ;跳转至开头循环

DELA0:MOV 68H,#5 ;延时

DELA1:MOV 67H,#248

DELA2:MOV 66H,#250

DJNZ 66H,$

DJNZ 67H,DELA2

DJNZ 68H,DELA1

RET

END

8df67271f4df23bf7364dbb771cc619f.png

闪烁灯电路_亮

d0a358976de5e7460dcb05b3f21d4874.png

闪烁灯电路_灭

已标记关键词 清除标记
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
一、C语言自我YY<br /> 1)、C语言是许多高级计算机语言的基础,学好C语言能更好的学习其他高级语言,为以后的学习打基础;往深学C语言的话那就是学到C在Linux里的应用,Linux十分强大。<br /> 2)、C语言是一种计算机程序设计语言。具有高级语言的特点,又具有汇编语言的特点。C语言可作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。<br /> 3)、应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画。具体应用比如单片机以及嵌入式系统开发。<br /> 4)、C语言是面向过程语言,C语言通过windows/linux平台下编译的,是直接运行在windows/linux平台下的,而XX始终是运行在他的虚拟机之上的;所以理论上C语言一些相对于比较底层的工作,像XX就不能编写Windows病毒。<br /> 5)、如果要利用编程来一些windows优化工作的话,建议还是利用C语言C语言是目前世界上流行、使用最广泛的高级程序设计语言<br /> 6、很多编译器,几乎所有操作系统Windows,Linux,Unix的大部分代码都是C,C在背后了很多东西的,也许开发游戏用C++,安卓用XX更为合适,图形界面的用其他语言开发效率更高一些(因为他们封装了很多东西),但同样的原因导致略微接近底层的功能其他语言根本干不了!Windows的API都是按照C语言的格式给的,这也很能说明问题!嵌入式开发更是离不了C语言!纵观电脑发展几十年,C语无所不能呀!
《新概念51单片机C语言教程:入门、提高、开发、拓展全攻略》从实际应用入手,以实验过程和实验现象为主导,循序渐进地讲述51单片机C语言编程方法以及51单片机的硬件结构和功能应用。全书共分5篇,分别为入门篇、内外部资源操作篇、提高篇、实战篇和拓展篇。《新概念51单片机C语言教程:入门、提高、开发、拓展全攻略》内容丰富,实用性强,书中大部分内容均来自科研工作及教学实践,许多C语言代码可以直接应用到工程项目中。《新概念51单片机C语言教程:入门、提高、开发、拓展全攻略》可作为大学本、专科单片机课程教材,适合于51单片机的初学者和使用51单片机项目开发的技术人员,也可供从自动控制、智能仪器仪表、电力电子、机电一体化等专业的技术人员参考。 但是不完全满意!优点是理论联系实际结合实验板立即验证理论,实用;缺点是因为突出实用而被迫放弃了理论系统性。而且作者对汇编嗤之以鼻一点都不讲,对不了解单片机内部原理的初学者是不妥当的。其实就学习任何课程来说,总有很多知识点并不一定能在实践中立即用到,却是理解掌握那些所谓“最实用”知识的基础,地基不牢何以应用 内容很丰富 不过要配合视频看才行 光书里面的知识点有点简略 拓展方面很丰富,感觉是有别与其他的教参,都是以亲身经历来写的,所讲到得内容很实用。 第1篇 入门篇 1.1 单片机概述 1.1.1 什么是单片机 1.1.2 单片机标号信息及封装类型 1.1.3 单片机什么 1.1.4 如何开始学习单片机 1.2 51单片机外部引脚介绍 1.3 电平特性 1.4 二进制与十六进制 1.4.1 二进制 1.4.2 十六进制 1.5 二进制的逻辑运算 1.5.1 与 1.5.2 或 1.5.3 非 1.5.4 同或 1.5.5 异或 1.6 单片机的C51基础知识介绍 1.6.1 利用C语言开发单片机的优点 1.6.2 C51中的基本数据类型 1.6.3 C51数据类型扩充定义 1.6.4 C51中常用的头文件 1.6.5 C51中的运算符 1.6.6 C51中的基础语句 1.6.7 学习单片机应该掌握的主要内容 2.1 Keil工程建立及常用按钮介绍 2.1.1 Keil工程的建立 2.1.2 常用按钮介绍 2.2 点亮第一个发光二极管 2.3 while语句 2.4 for语句及简单延时语句 2.5 Keil仿真及延时语句的精确计算 2.6 不带参数函数的写法及调用 2.7 带参数函数的写法及调用 2.8 利用C51库函数实现流水灯 第2篇 内外部资源操作篇 3.1 数码管显示原理 3.2 数码管静态显示 3.3 数码管动态显示 3.4 中断概念 3.5 单片机的定时器中断 4.1 独立键盘检测 4.2 矩阵键盘检测 5.1 模拟量与数字量概述 5.2 A/D转换原理及参数指标 5.3 ADC0804工作原理及其实现方法 5.4 D/A转换原理及其参数指标 5.5 DAC0832工作原理及实现方法 5.6 DAC0832输出电流转换成电压的方法 第6章 串行口通信原理及操作流程 6.1 并行与串行基本通信方式 6.2 RS-232电平与TTL电平的转换 6.3 波特率与定时器初值的关系 6.4 51单片机串行口结构描述 6.5 串行口方式1编程与实现 6.6 串行口打印在调试程序中的应用 第7章 通用型1602,12232,12864液晶操作方法 7.1 液晶概述 7.2 常用1602液晶操作实例 7.3 常用12232液晶操作实例 7.4 常用12864液晶操作实例 第8章 I2C总线AT24C02芯片应用 8.1 I2C总线概述 8.2 单片机模拟I2C总线通信 8.3 E2PROM AT24C02与单片机的通信实例 第9章 基础运放电路专题 9.1 运放概述及参数介绍 9.2 反相放大器 9.3 同相放大器 9.4 电压跟随器 9.5 加法器 9.6 差分放大器 9.7 微分器 9.8 积分器 第3篇 提高篇 第10章 定时器/计数器应用提高 10.1 方式0应用 10.2 方式2应用 10.3 方式3 应用 10.4 52单片机定时器2介绍 10.5 计数器应用 第11章 串行口应用提高 11.1 方式0应用 11.2 方式2和方式3应用 11.3 单片机双机通信 11.4 单片机多机通信 第12章 指针 12.1 指针与指针变量 12.1.1 内存单元、地址和指针 12.1.2 指针变量的定义、赋值与引用 12.2 指针变量的运算 12.3 指针与数组 12.3.1 指针与一维数组 12.3.2 指针与多维数组 12.4 指针与函数 12.4.1 指针作为函数的参数 12.4.2 指向函数的指针 12.4.3 指针型函数 12.5 指针与字符串 12.
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页