初学者的态度

在我学习单片机的年代,只有单片机而且只有一种51单片机,没的选择。现在,有51内核的系列单片机、有MSP430单片机、有CC2530单片机、有ContexM0系列单片机、有STM8单片机、还有台湾的合泰、华邦、义隆...甚至国内的单片机......这还不包括ARM、ContexM3、STM32...这些32位的嵌入式产品。面对这么多的选择,你怎么入门?

在我的学生中,不少人觉得8位机太简单了,稍微入门就准备要学嵌入式,搞ARM,玩Linux。在他们看来,会单片机并不等于嵌入式。实际上这是两个概念,而且你会用单片机就等于你能用单片机了吗?不,还差很远。不管是8位机还是32位机,它只是你解决问题的一个工具而已。很多人都会用C语言,但是有几个人能用C语言写出Linux和uCOS来呢?

所以,初学者的态度很重要。哪一款单片机不重要,只要你精通擅长一款,日后再用其他公司的那都是小菜一碟,进而学习32位的处理器也是游刃有余,轻松自如,否则,每个单片机对你来说,都永远处于入门状态。

一页纸讲清单片机

也许有人问:有没有那么简单呀?

当然不会那么简单啦,首先你要把书读薄,然后再把书读后,最后把书放进自己脑子里,形成自己的一套思路。

理解任何一个事物,最好把握它的本质。对于各个各样的嵌入式微处理器产品,实际上用一页纸就可以把本质的脉络说清楚。有这么神奇,嗯...我也是自己总结的,大家可以看看,加以斧正。

8位和32位机都可以看成是“内核+外设”的结构,外设多,单片机就复杂些,总线位数高,运行就快一些。本质上还逃不出这个架构。对于设计人员编程来说,操作外设实际上就是读写各种特殊功能寄存器,传输数据就是读写总线,相应外设就是处理中断。除了这三大操作,好像没有其他了。当然对于不同的外设,其特殊功能寄存器的定义不同,中断向量不同,操作流程不同,但本质上还是在操作寄存器、总线和中断。

有人不服说,不会吧,一定还有别的。当然有了,但对于初学者来说,不要钻牛角尖,把常见的、大多数的东西把握了,慢慢再去研究小众技能吧。上面讲了这么多,实际上就想告诉初学者:嵌入式或者单片机的入门真的不难,但也不容易,需要你拿出态度来。我经常对我的学生说:“单片机或者嵌入式这东西是入门难,到经验积累到一定程度就比较容易了。”

一些不是建议的经验

1、从8位单片机入门比较好一点,选好一个型号,认真学习,直到精通。

2、多练习,多写代码,多上网看看博客,当然自己要有一块学习板了。

3、掌握简单常用的模拟电路和数字电路,比如:电阻限流、电容滤波、运放放大等等,将来你在设计电路和调试程序的时候都会用到。

4、精通C语言,特别是指针和数组,最好把预处理和编译过程了解一下。

5、掌握一个电路设计软件,对于单片机,其实会Protell99都可以了。

6、会使用万用表,最好有示波器啦,而且要掌握一些常用的测试手段。

7、在自己学习过程中,整理并形成自己的元器件库和常用程序库,这是你进阶下一阶段成为高手的关键。

8、多看看各种单片机案例,掌握各种常用芯片的使用,嵌入式就是一个逐渐积累的过程。你的嵌入式技术有多高,就看你心里的案例与资源有多少。现在各种功能都有模块或专用芯片,还都提供UR、SPI、IIC等接口。

表面上你用单片机在实现蓝牙,实际上你只是在使用单片机的串口读写数据。如果说元器件电路模块是硬件资源的积累,那么,常用接口模块驱动程序则是软件资源的积累。 将来在你的产品设计中,可能用到很多新的模块和元件,只要它的接口是SPI接口、IIC接口、UR串口等你熟悉的接口,那么对于你来说,它就是一个旧模块和元件。因为单片机实际上面对的不是模块和元件,而是你熟悉的常用接口。

9、最好有做笔记的习惯,你也可以写写博客,这个到后面会有意想不到的作用。

经典51内核资源全览浓缩图

你不要当51单片机是高科技产品,请把它看作一款玩具。你不是在学习开发,你是在玩“极品飞车”。学习会让懒人痛苦,而玩耍会给懒人快乐,没有愉悦的心情,还谈什么学好学精?

经典款51单片机都有什么东西?一张图就可以告诉你...

<1> 四组8位并行I/O端口:

P0端口:PC门,集电极开路输出,必须接上拉电阻才能输出高电平。

P1端口:无特殊之处。

P2端口:访问外部存储器时,作高8位地址用。

P3端口:功能复用端口,详情看表。

<2> 三大外设:外部中断、定时/计数、串行通信

<3> 五个中断源:2个外部中断、2个定时/计数中断、1个串行通信中断

注意:要记住中断号与中断源的对应关系...编程时会用到!

<4> 三大特殊功能寄存器:TCON、SCON、TMOD

经典型51单片机的重要外设归纳

不管简单还是复杂的微处理器,其基本架构都是“内核+外设”,而控制外设的重要途径就是特殊功能寄存器。作为一个嵌入式设计师,如果做底层的程序开发,绝大部分的工作都在跟各种特殊功能寄存器打交道。

51单片机的外设不多,可以分成三大块:中断系统、定时/计数器和串行接口。

要想把这些外设应用好,首先得把控制这些外设的特殊功能寄存器弄明白,其实也不多,就下面几个:

IE寄存器:中断控制寄存器。
IP寄存器:中断优先级寄存器。
TCON寄存器:中断状态标志寄存器。
TMOD寄存器:定时/技术模式控制寄存器。
THx和TLx寄存器:定时/计数器的技术初值寄存器。
SCON寄存器:串口控制寄存器。
SBUF寄存器:串行接口收据发送和接收缓冲器。
<1> IE寄存器与IP寄存器(IP用的不多)<2> TCON寄存器<3> TMOD寄存器

<4> SCON寄存器

程序设计要点

<1> 引入头文件

在单片机的程序设计中,很多时候需要操作特殊功能寄存器,而这些寄存器实际上就是芯片中的一个内存地址。我们要记住这些地址很难,而且代码编写也比较复杂。为了方便记忆和使用,我们给每一个特殊功能寄存器都起了一个名字。如果在程序设计中你想直接使用这些名字,那么你就需要引入对应当芯片头文件,例如51单片机,你需要引入“reg52.h”文件。

特殊功能寄存器P0的地址为80H,引入这个头文件之后,你就可以使用P0这个名字了

P0 = 0x02;

<2> 中断服务函数的格式

在51单片机中有5个中断源,每个中断源都有固定的入口地址(也就是中断向量)和中断号。我们在程序设计的过程中,不需要记住中断向量地址,但需要知道每个中断源对应的中断号(参考【经典51懒人5步速成法-01】)

一般情况下,中断的处理函数有两个,其一为中断初始化函数,其二为中断服务函数。初始化函数就是一个普通的函数,而中断服务函数却有特殊的格式要求:

A. 中断函数没有返回值,也不能带参数。
B. 函数名后面要跟一个关键字interrupt,说明这是一个中断服务函数。
C. 在关键字interrupt后面要跟上中断号,说明这个中断服务函数是为那个中断服务的。   
中断服务函数的格式为:

void 函数名() interrupt  中断号

{  ----函数体----  }

例如,定时器0的中断服务函数,我们C语言可以这样写:

三大外设的开发与可重用代码

在51内核的单片机中,主要有外部中断、定时计数和串行通信三大外设。在其他的嵌入式芯片中,这三个外设也是必不可少的。三大外设的程序设计实际上就成了51单片机最基础核心,掌握着三个部分的设计思路是学习单片机开发的必经之路。

编写三大外设的程序实际上有很多类似的地方。它们都需要进行初始的寄存器配置,也就是初始化,它们都和中断有关,都需要编写中断服务函数。因此,对于每一个外设,我们都需要编写一个初始化函数和中断服务函数。这些函数在不同的应用工程中实际上都差不多,也就是说代码的重用性很高。1、外部中断模块

在51单片机中有INT0和INT1两个中断模块,外部的触发信号可以是电平,也可以是边沿,由寄存器TCON的IT0和IT1位来决定。

2、定时/计数模块

在51单片机中有T0和T1两个定时器,对内部可以定时,对外部可以计数。在初始化的时候,需要确定该模块是定时功能还是技术功能,工作模式是什么,最大计数值是多少。

3、串行接口模块

在51单片机的串行接口中,产生波特率需要占用定时器T1,发送数据时,将内容放到SBUF中,数据发送完毕,TI会置1。当完整接收到一个数据后,RI会置1,这时从SBUF中将内容读出即可。不管是TI还是RI标志位,都需要人工清0。

一般情况下,发送数据采用查询方式,接收数据采用中断方式。

结束语

嵌入式应用开发涉及的知识点很多,初次接触往往感到无从下手。没错,与一些高级编程语言“易懂难精”的情况相比,嵌入式应用开发的入门是比较难的,但是,随着知识的积累和经验的丰富,后面的路会越走越宽,越走越顺。广大的嵌入式应用开发入门者应该充满信心。我一直都认为嵌入式应用开发就像一场马拉松,必须一步一个脚印,积蓄能量,逐步进阶,才能越走越远的。

作者 :欧浩源  选自21ic论坛

推荐阅读

  • 无所不能的555定时器到底是何方神圣,有哪些应用?

  • PCB板基本检测的9个小常识

  • LIN、CAN、FlexRay、MOST,三分钟搞明白四大汽车总线

  • Linux思维导图及命令速查表8张

  • 从需求到设计,嵌入式产品开发流程

cc2530单片机的内核是什么_一位15年经验的老司机教你学习单片机相关推荐

  1. springboot设置默认值_线上Bug无法复现?老司机教你一招,SpringBoot远程调试不用愁!...

    前言 在部署线上项目时,相信大家都会遇到一个问题,线上的 Bug 但是在本地不会复现,多么无奈. 此时最常用的就是取到前端传递的数据用接口测试工具测试,比如 POSTMAN,复杂不,难受不? 今天陈某 ...

  2. 如何判断笔记本蓝牙硬件坏了_还在担心被套路?老司机教你如何判断车用尿素溶液的好与坏...

    车用尿素液是指浓度为32.5±0.7%(国标尿素浓度)的高纯尿素且溶剂为去离子超纯水的液体,在SCR催化反应罐中通过氧化还原反应,将有毒物质氮氧化物生成无污染的氮气和水排出,从而达到节能.减排的目的. ...

  3. 可变车道怎么走不违章_可变车道不敢走?老司机教你正确的行驶方式,再也不怕违章了...

    原标题:可变车道不敢走?老司机教你正确的行驶方式,再也不怕违章了 我国现在的道路交通情况无需做过多的介绍,朋友们每天都在亲身感受,为了缓解这些糟糕的交通状况,交通部门出台了一系列措施,改善交通状况. ...

  4. 怎么判断前轮左右的位置_如何判断左右车轮位置?老司机教你一招,学会后再也不会压线!...

    "实线就是一堵墙,千万不能压!"当年在驾校的时候,你的教练有没有说过这句话?道理大家都懂,但还是偶尔有些粗心大意的司机因为"压线"行驶而被扣分罚款.下面小编就给 ...

  5. 蓝底换白底边缘不干净_雨刮器刮不干净别急着换,老司机教你一招,让雨刮器恢复如新!...

    现在开车的人越来越多了,下雨天我们使用汽车雨刮器的时候,发现雨刮器刮不干净,刮完之后不仅模糊,而且还有咯吱咯吱的响声.说明雨刮器的胶条已经凹凸不平了,长时间使用的过程中雨刮器磨损的很厉害了,出现这种情 ...

  6. 通信系统设计与python的书_腾讯十年Python开发老司机推荐的入门书籍,你确定不看吗?...

    原标题:腾讯十年Python开发老司机推荐的入门书籍,你确定不看吗? 稍微关心编程语言的使用趋势的人都知道,最近几年,国内最火的两种语言非 Python 与 Go 莫属,于是,隔三差五就会有人问:这两 ...

  7. jdk卸载不干净怎么办_雨刮器“刮不干净”怎么办?老司机:用这招,分分钟解决!...

    雨刮器是汽车上的一个小部件,虽然像平常也不怎么使用,不过其作用还是很大的,尤其是在下雨天,它可以有效刮去前挡风玻璃上的雨水.而很多时候有些车主都会遇到雨刮器经常"刮不干净"的情况, ...

  8. cad卸载_怎么把CAD卸载干净,老司机来教你

    CAD经常出现文件丢失啊.这样那样的提示,要是身边有个大神级朋友还好,没有的小盆友只能乖乖的卸载,重新安装了,那么又有个问题拦住我们了--怎么把CAD卸载干净呢? 由于卸载不干净,再次安装CAD时,很 ...

  9. 获取 子文件夹 后缀_后期制作老司机教你一键批量生成项目文件夹

    我猜你的项目工程是这样的,当你老板说去修改一下之前几个月的工程的时候,你都不知道哪个工程才是最终版呀. 乱糟糟的工程 而且当你打开工程的时候,wo艹,素材怎么丢失了~~ 不管是后期制作者还是平常我们日 ...

  10. 螺旋千斤顶设计大作业_如何正确使用汽车千斤顶,新手司机看过来,老司机教你正确用法...

    千斤顶的种类:常见的随车千斤顶主要有两种类型,一种是齿条千斤顶,一种是螺旋千斤顶.这两种的共同特点是体积小,占用空间小,适合放置在车尾箱中. 1.齿条由转动机.齿条和齿轮构成,通过转动齿条,托起支撑车 ...

最新文章

  1. Objective-C 内存管理retain和release
  2. 《全栈营销之如何制作个人博客》之二:php环境安装及个人博客后台搭建 让你的博客跑起来...
  3. python不能分配给操作员_Python:无法分配给li
  4. java stl分解_[STL训练]寻梦-题解(Java代码)极简思路
  5. servlet 调用oracle数据库存储过程
  6. JS 动态显示 获取下拉框的多个值
  7. JavaScript基础之'script'Tag的使用
  8. chromedriver放在哪个目录下_python | Linux各目录及每个目录的详细介绍 - MR_黄Python之路...
  9. C# 数组比较--取得两个集合的交集,差集,并集的方法
  10. linux早期内核的khttpd服务器--策略污染机制
  11. Android篮球计分器App
  12. 海康 设备 发现(SADPTool原理)
  13. 工作日节假日调休日休息日的判断API-holiday
  14. postman接口测试提交实体参数实践
  15. 趣味证书制作生成微信小程序源码
  16. 分享几个故事:让我想明白了不少事情
  17. vue 中的 attribute 和 property
  18. 年龄识别之AgeNet
  19. 通过azure学生认证拿到一年服务器使用权
  20. textRNN textCNN(及代码实现)

热门文章

  1. JavaDemo——java使用RXTX读写串口
  2. weblogic安装失败常见问题
  3. vue2-ts-template vue2后台管理系统模板
  4. R语言和Python的区别
  5. 【Urule源码解析1】开源可视化规则引擎
  6. 哈工大深圳计算机自动化专业,专业介绍———自动化专业知多少
  7. oracle扩容临时表空间,oracle临时表空间扩容
  8. int与byte互转
  9. m3u8格式视屏播放
  10. java超市运行程序源代码_Java课程设计超市库存管理系统附源代码可以直接运行...