您的位置:首页 > 编程语言 > C语言/C++

山东大学电子设计与飞思卡尔协会培训1——51单片机

2016-11-06 22:32 162 查看
我理解的51单片机

电子设计与飞思卡尔协会培训1

作为功能强大的微型控制器,很多地方将之与CPU放在一起讨论可能比较容易理解。

比如我们现在手边恰好有一块STC89C52RC型号的单片机,我们该怎么使用它呢?看说明书。这里,我们一般叫——数据手册。记得要认清楚你手里那块单片机的具体型号,它会写在你的单片机表面(或许你需要用放大镜仔细看看),因为不同型号单片机的寄存器等内容是不一样的。就好比STC89C52RC和AT89S52,大家对照一下数据手册(群里有),主要看看寄存器那里,差别还是有的。

那么什么是寄存器呢?

寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。

而我们一般会用到特殊功能寄存器来进行某些特定程序的编写。这个会在后文提到。

强调一下:单片机程序与硬件电路紧密相连,同一个程序放在不同型号的单片机上效果可能完全不一样。这也就是说单片机程序的可移植性不好(值得一提的是,正是由于可移植性的问题,才有了后续的计算机行业的发展)。

如果大家写的单片机程序出了bug(语法没问题,但是就是不实现自己想要的功能),首先要检查是不是硬件电路哪里没连上,哪里烧坏了。其次,仔细查看单片机IO口(引脚)与外围电路(在51单片机外面的其他电路)的连接,再看看自己的程序是不是跟这个电路不搭配?这样一来基本就可以找出问题来了。

正是由于外围电路十分重要,很多时候我们有必要仔细研究,于是我们需要借助计算机进行辅助分析。这里我们用到两个软件:Altium designer、Multisim。Altium designer是画PCB(印刷电路板)的软件。当用Altium designer画好了PCB并且发到厂家印刷出来之后,我们就不用对焊锡进行超高难度的走锡等操作了,只需要进行直插与贴片的焊接即可。而且电路的可靠性大大提高。Multisim软件是电路仿真,指的是用计算机模拟硬件电路测试我们的想法。他会提供大部分我们需要用到的芯片(如果你用Multisim时发现他没有提供你要求的芯片,那么说明你已经研究到很新的电路功能了)。我们不断地使用Multisim进行仿真,一遍遍出错。最终,我们发现某一些原件按照特定的连接方式连接起来就可以实现我们心中的想法,那么Multisim的目的就达到了。这之后才是画PCB,进行硬件电路制作。当然,如果你做的是高频电路,画PCB的时候还需要小心,里面有许许多多要注意的地方,那就是另外的内容了。

假设我们做好了硬件电路的设计与制作,下面来完成软件部分的工作。

单片机的程序一般用C语言或者汇编来进行编写。汇编语言要求对微机原理与接口技术有一定的了解,不像C语言那样简单。我们重点还是说C语言。

一个单片机的工程项目主要包含以下几块内容:

版权信息

头文件

宏定义

子函数声明

main函数

子函数定义(可新建.c文件存放)

单片机的C程序跟PC的C程序有一定的不同之处,区别主要是单片机需要进行寄存器配置以及定义引脚。其中特殊功能寄存器定义方式为sfr,引脚的定义方式为sbit。这里大家最好看一下我发到群里的单片机例程(这个例程只是针对我所使用的单片机而言,大家一定要参照群里的单片机电路图进行查看)。

下面简单说明一下单片机程序。我将单片机程序分为六块内容:

1. 直接对IO口进行操作。其分为读、写两种。写IO的例子是点亮LED,使蜂鸣器响;读IO的例子的按键程序。

2. 在对IO操作的基础上配合寄存器进行编写。这个以数码管程序与液晶显示器程序为例。

3. 中断是控制器里非常重要的一个概念。他指的是:假设你正在写作业,突然手机响了。手机响就是一个外部中断。假设你正在写作业(作业怎么那么多),突然你饿了,这就是一个内部中断。咱们写单片机程序主要用外部中断。分为低电平触发和下降沿触发。低电平是读某个IO口,是0那么就触发中断。下降沿触发是判断某个IO口有从高电平变为低电平的过程,这个叫下降沿。例程里面这两种方式都有。

4. 定时器,就好像倒计时一样。其本质是依赖晶振进行计数。我们给一个寄存器配上一个数,其上限是256(8个1),我们给他赋初值假设是156。那么这个单片机会自己不断地加1 ,加1 ,一共加100次。当第101次,它再加就成了一个1后面八个0,超过了寄存器的八位数了。这个时候我们叫做“溢出”,此时单片机会有所反应。当然,具体的寄存器配置需要看数据手册的寄存器表。

5. 通讯方式有哪些呢?分为无线通讯和有线通讯。无线通讯应用较广,以红外通讯最为简单,此外还有蓝牙、ZigBee等。有线通讯有串口等。主要需要保证通讯过程出现意外状况(比如说有一次通讯的内容在传输过程中丢失,该怎么保证重新发一次等),这个推荐有兴趣的同学了解一下上面所说的通信协议的理论与源码。

6. 数据采集部分主要是AD和DA模块的使用。当然,大家可以自己买来芯片,并将之制作进自己的PCB中,也可以使用现成的模块。AD是模拟信号转变为数字信号,DA反之。理论部分大家以后会学,心急的同学可以自己百度。这里用法重点是学会用买来的AD模块,知道这个东西跟单片机怎么连接,知道怎么编写程序。另外,如果大家需要对高频信号进行分析处理,需要买特定的高速AD芯片哈。

51单片机内容不算多,会进行IO操作可以说会了60%了;再学会了配置寄存器,学会写中断,那就会了80%;最后学会使用买来的其他传感器模块,比如超声波、红外对管等等,这样就会了95%。但是学无止境,51在某种角度来看是非常了不起的,所以我不敢相信谁可以把51单片机学到100%,或许他的发明人可以做到。但是我们后辈学子也实在没必要100%,有95%足以尽可能应对遇到的一切问题也就够了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  单片机 c语言 电子