C51单片机入门知识

2019-04-15 18:16发布

接触单片机也快两年了,虽然期间偶然玩一玩,但是还是没有形成一个完整的单片机系统。借着这次同学想学习的机会,再次回到头来系统的学一遍。其实真正入手单片机挺容易的,稍微会那么一点C语言知识,会定义引脚,会置成高低电平就算入门了吧,个人观点,非喜勿喷。 把单片机总的来分为几大块,剩下的就是算法或者说是C语言搭边的事了:引脚(io)、中断(interrupt)、定时器/计数器(T0、T1)、串行口(usart),这是学习单片机最基本的内容,剩下的就是需要自我提升的内容,可在学习完以上内容的同时完成以下的学习:A/D(模数转换)、LCD1602(液晶屏)、EEPROM(存储器)、18B20(温度传感器)、PWM(脉冲调制)、红外线等。 把所有的模块划分好了后就是系统的学习了。接下来就说一下学习单片机所需要的基础知识。首先说一下为什么这个CPU为什么会完成那些引脚变换高低电平这些工作,CPU内部是怎么工作的呢,或者说大致流程是怎么样的呢?首先是上电,然后等待单片机初始化完成,初始化完成后按自己编写的代码依次执行,要说的具体点就是从特定的存储空间取出要执行的数据,然后去执行,最后把执行后得到的数据输出。而这个执行的过程是比较复杂的,涉及到了各种各样的对寄存器进行读写的操作。 既然是学习单片机所需要的基本知识,就从两大方面说起:硬件和软件。首先就说一下硬件吧,从外观看上去必然看到的就是单片机的封装。单片机本质上就是一个芯片,封装形式有很多种,例如 DIP (Dual In-line Package双列直插式封装)、 SOP (Small Out-Line Package小外形封装)、 PLCC (Plastic Leaded Chip Carrier带引线的塑料芯片封装)、QFP(Quad Flat Package塑料方型扁平式封装)、PGA(Pin Grid Array package插针网格阵列封装)、BGA(Ball Grid Array Package球栅阵列封装)等。其中,DIP封装的单片机可以在万能板上焊接,其它封装形式的单片机须制作印制电路板(Printed Circuit Board,PCB),PGA和BGA一般用于超大规模芯片封装,单片机用得较少。 了解完封装后就可以接着下一步了,了解单片机的家族。这个就不多说了,网上很多都有介绍,但是呢,为了支持国产,说一下stc的单片机,我自己也是学的这款单片机,然后往stm32及arm11转型的,贴出来stc的官网:(http://www.STCMCU.com)。类似的还有美国、日本的,但是都没学过,就不说了。 可能硬件说的比较简陋,接下来就说软件方面需要注意的事项吧。 一:一般代码里面只有一个死循环,也就是只有一个while(1),不过也有特殊情况。 二:必须包含51的头文件。即#include ,因为此文件中定义了51的一些特殊功能寄存器。 三:主函数只有一个。即int main(),为什么呢?因为在C99标准未发布前,一般把main函数定义为void,即无返回值类型,c99标准发布后,里面明确规定定义main时要定义成int型,原因是因为main函数是系统调用的,在main函数运行结束后,要返回一个值给操作系统,以此main函数是否执行正常,如果main返回值为0说明正常结束,否则说明程序运行出错,需要调用一些错误处理。如内存分配失败,资源申请失败等。 四:剩下的就是C语言的事了,建议好好学学谭浩强的那本C语言入门神书,推荐自己买一本慢慢细啄。 单片机工作的基本时序: 振荡周期:也称时钟周期,是指为单片机提供时钟脉冲信号的振荡源的周期。 状态周期:每个状态周期是时钟周期的二倍,是振荡周期二分频得到的。 机器周期:一个机器周期包括6个状态周期也就是12个时钟周期。 指令周期:他指CPU完成一个操作所需要的全部时间。 当8051通电,时钟信号开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位,初始化后,程序计数器PC指向0000H,P0-P3输出口全部为高电平,堆栈指针写入07H,其他专用寄存器被清“0”。RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。然而,初始复位不改变RAM(包括工作寄存R0~R7)的状态。 复位的过程:刚开始电容内无电荷,VCC有电后,电流给电容充电,电流流向RESET,产生复位,当电容充满后,产生阻隔作用,阻隔了VCC,RESET与一个下拉电阻相连,变为低电平。如果想复位,可以按下按键,使短接,RESET引脚再次产生高电平。 C-51包含的头文件通常有: reg51.h reg52.h math.h ctype.h stdio.h stdlib.h absacc.h 常用的有: reg51.h reg52.h math.h 中断服务程序: 函数名()interrupt n { } 定义单片机电平为TTL电平: 高+5v 低0v RS232电平: 高-12v 低+12v 所以单片机与计算机通信时需要加电平转换芯片max232 下一次跟单片机的io口.最后,感谢那位同学,让我重新拾起了好久都没写博客的坏习惯!谢谢你!