51单片机二十天的学习心得
单片机最小系统实验板学习总结
在过去的二十多天里,我通过自学的方式,在哈尔滨工程大学郭天祥老师的视频为辅导下。自己借了同学的一块单片机学习实验板,从单片机最基础的部分学起,感觉收获不少,现将我最近的学习心得分享给大家,也希望那些在单片机外面迷茫的同学们能够快速入门。以获得更高的知识储备。
以前的我对单片机不知迷茫,甚至恐惧。但是现在我发现喜欢上了单片机。单片机用途太广泛了,我才发现基本上没有哪个领域能离开单片机了。单片机非常好玩,真的能让人上瘾。本着不想虚度大学生活的想法,我试着开始接触单片机,现在感觉已不能自拔。郭天翔老师的单片机教学视频非常的棒,真的很感谢郭老师能把这么好的学习方法和大家分享。在这个视频的辅助下,我基本上已经对单片机入门了。从点亮第一个LED灯开始,到现在对液晶的熟练使用。一点一点剖析单片机的内部结构。就像郭老师说的一样,实践真的很重要,有理论没实践的摸索,很困难,而且很枯燥,很难有毅力坚持下去。经济能力许可的话最好买一个单片机快速开发板或者自己做一个都行。把每一个理论从单片机上显示出来。你就会越学越想学,越来越感觉自己会的东西太少了,你就会像饿狼一样不停的去咀嚼每一个知识点。越学越有意思。
单片机外围电路的实验,可以通过proteus或Altium-design去仿真实现,这些软件非常好用,也非常好学。更进一步的话,如果学校实验室条件许可的话,也可以去实验室学习,在这里回收的更多,里面的牛人很多的。因为之前汇编学的不是太好,我现在直接用的C语言去编写程序。紧凑程度,方便阅读,可移植性都是其他语言不能比拟的,而且对帮助快速入门单片机很有帮助。编译器是KEIL51.可编程,也可软件仿真。
单片机真的不是太难,但是要学的东西真是太多了。也希望你能掌握正确的学习方法,学习顺利,获得更高的知识储备。
扩展阅读:MCS51单片机入门学习心得
MSC51单片机入门学习心得
1、Keil&C51基本知识和技巧:
(1)调试时间之前记得调整晶振频率
(2)程序改过之后要点击“rebuildalltargetfile”才能更新hex文件(3)新建text文件后要保存为“文件名.c”,然后放进工程(4)引用各串口时记得用大写(如“P0”)
(5)用STC-ISP烧程序时,当hex文件进行了更新,需要重新“打开程序文件”(6)用sbit可以给单片机上某个指定I/O口进行定义,如“sbitD1=P0^0”(7)对程序进行调试之前需要进行保存和编译
(8)宏定义#define的格式:#define字符串字符串代表的内容(不需要加分号)(9)如要调用子函数,需在主函数之前进行声明,(声明格式:“函数类型函数名(形
参类型);”,如“voiddelay(unsignedint);”。记得其后要加分号)
(10)主函数里面记得先添加一个大循环while(1){}(11)每当需要放{}的时候记得要成对地放
(12)延时函数一般用嵌套的for()语句来设计,无限循环则一般用while()来实现(13)求反码的技巧:以用8位二进制表示的数00000001为例,求反码只需用1111
1111减去00000001,用十六进制表示即为0xff0x01,相减的结果即为00000001(0x01)的反码
(14)向左循环移位函数“_crol_(变量名,移位的位数)”能够实现二进制数的循环左
移,使用该函数须添加头文件“”
(15)向右循环移位函数“_cror_(变量名,移位的位数)”能够实现二进制数的循环右
移,使用该函数须添加头文件“”
(16)char型变量一个字节(8位二进制),int型变量2个字节(16位二进制),longint
型4个字节(32位二进制)
(17)用C51编程的时候出现“warning”的主要原因:定义出来的变量或者函数在程
序执行过程中无法用到,一般出现了warning也要重新修正程序
(18)用keil编程时,不能在变量声明语句之前加其它语句(C51看作是严格的C语
言)
(19)return语句的作用是退出函数和返回函数值,一个函数内部允许有多个return
函数。如果函数有返回值,则函数的类型不能为Void型
(20)在函数A中被调用的函数B中的break不能对函数A产生作用(21)特殊延时函数:voiddelay(){;;},延时时间大约为5us(22)在keil环境下,需要按两下backspace才能删掉一个中文字
2、单片机硬件知识:
(1)单片机复位管脚RST:复位信号输入端,高电平有效,当输入不少于2个机器
周期的高电平时,单片机复位,内部的程序指针指向0;单片机正常工作时RST加0.5V的低电平电压;RST管脚同时还是单片机的备用电源接入端VPD,当Vdd过低时,单片机接上连接在VPD端的备用电源,用来保证单片机RAM内的数据不丢失
(2)单片机只在上电之后检测计算机是否有传来下载指令,如果有则上电后先从计算机上下载hex文件,然后再运行;单片机上电后则无法对其发送下载指令(单片机只能在上电之后运行之前进行下载)
(3)关于P3总线:P3总线的每一个管脚除了能作为I/O接口,还有另外一个功能。
8个管脚默认为I/O接口,要改变管脚的功能需要对内部寄存器进行设置
P3总线的第二功能介绍:
P3.0串行输入口RXDP3.1串行输出口TXDP3.2外部中断0INT0P3.3外部中断1INT1
P3.4定时器0/外部计数输入T0&P3.5定时器1/外部计数输入T1:能够对管脚输入的方波数(高低电平转换次数)进行计数
(4)30管脚ALE/PROG:单片机正常工作时向外输出周期为六分之一个时钟周期
的方波,用于检测单片机是否正常工作
(5)31管脚EA/Vpp:低电平时单片机只访问外部存储器,高电平时当单片机内部
存储器不够用就访问外部存储器
3、数码管的显示:
(1)数码管的动态显示:利用了人类的视觉停留效应,即一个人正在看某个物体,
如果这个物体消失了,但能够在1mS(0.001S)内重新出现,则人眼会觉得物体没有消失过。则在设计数码管动态显示时,只要保证每位数码管都能在消失后0.01s内重新出现。(每位数码管的发光时间应该尽量长,保证有足够的发光亮度)
(2)在数码管的动态显示中,先改变段选再改变位选能够有效提高各段数码管的清
晰度
3、定时器:
工作模式寄存器TMOD
控制寄存器TCON
(1)
定时器/计数器计数一次的时间约为0.0000011S(2)定时器的工作特征:每12个时钟周期计数一次;计数完成后执行一次定时器
中断,定时器中断其执行的一般是对计时器的重新赋值;
(3)打开定时/计数器中断的语句是“ET0/ET1=1;”,打开总中断的语句是“EA=1;”(4)定时器无法启动的原因:
1、没有打开总中断(EA没有置1)2、没有打开定时器中断(IE没有置1)
3、没有设定定时器的工作方式(以上原因属于定时器初始化失败);4、没有给计数变量count赋初值;5、没有打开定时器(TR没有置1)
(5)需要定时器/计数器计数N次,则给定时器/计数器赋的初值应该是65536-N(6)使用定时器定时比较麻烦,而且定时器的数量有限,通常在需要精确定时的情
况下才用
(7)定时器中不能处理进行太多的数据处理,否则会影响定时的准确性(8)工作模式寄存器(TMOD):
1、GATE:当GATE=0时,TR置1即可启动定时器;当GATE=1时,则需要在外部引脚信号INT=1的条件下把TR置1才能启动定时器2、C/T:定时器/计数器选择位,C/T=1时为计数方式,C/T=0时为定时方式
3、M0M1:工作方式选择位,一般选择M1=0,M0=1,此时定时器工作在16位定时器方式
(9)控制寄存器(TCON):
1、TR:定时器运行控制位,当GATE=0时,TR=1启动定时器,TR=0关闭定时器
2、TF:定时器溢出标志位(与外部中断有关)3、IE:外部中断请求标志位
5、中断:
(1)中断的两种触发方式1、电平触发,中断发生在低电平,除非重新回到高
电平,否则单片机无法返回中断;2、CP脉冲上升/下降沿触发,中断在CP脉冲的上升/下降沿触发,中断响应完之后程序自动返回中断继续执行主程序
(2)外部中断的使用方法(以外部中断0为例):首先必须打开CPU中断和外部中
断,具体在主程序中写入“EA=1;EX0=1;”;然后编写中断后要执行的程序,格式为“void函数名()interrupt0”;设置外部中断触发方式,“IT0=1;”代表脉冲边沿触发,“IT0=0”代表电平触发;IT0,EX0,EA的默认值都为0
(3)8051支持的5个中断源分别为外部中断0、定时器0溢出中断、外部中断1、
定时器1溢出中断和串口中断。对应的中断号为0、1、2、3、4;
(4)中断函数不需要在主函数之前声明6、独立键盘:
(1)使用独立键盘的技巧:如果需要系统按一下按键执行一次指令,则应设定为按
下按键后进入死循环,松开按键后才执行指令,则按键按下的时间不会影响到执行指令的次数,避免了系统的错误工作;同样是针对按一下按键执行一次指令的系统,按下按键后和松开按键后设定约10毫秒的延时能够消除由于振荡而造成的错误执行
(2)消抖一般是延时10ms,是否要进行消抖需要结合具体情况进行分析7、IIC总线:(1)
I^2C总线由两条线组成:SCL(时间线)和SDA(数据线),当SCL为低电平时,SDA的高低电平才能发生变化,SCL为高电平时SDA上的数据被读取,此时SDA上的数据应该保持稳定
(2)
(3)(4)(5)(6)(7)(8)
(起始信号与终止信号)
在起始信号后必须传送一个从机的地址(7位),第8位是数据的传送方向位(发送T/接收R),0代表主机发送数据,1代表主机接收数据
当接收器要处理内部中断,无法继续接收数据时,可以先把SCL拉低使发送器暂停工作,等到可以继续接收数据时再释放SCL
用IIC总线传送数据时,stop信号和start信号之间应该有一定的时间间隔。时间间隔太短机器有可能反应不过来
IIC总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定
养成良好习惯,数据总线不用的时候要将其释放
IIC总线空闲时,SCL和SDA两根线均为高电平;各器件与SCL、SDA的关系都是线“与”的关系
IIC主机进行读操作时,步骤是:起始信号从机地址+0(主机发送数据)应答从机内部存储单元地址应答再次发送起始信号从机地址+1(主机读取数据)应答读取指定存储单元中的数据非应答终止信号(使用IIC总线的关键是严格按照操作步骤进行操作!)IIC主机发出终止信号之后要隔一段时间才能重新发送起始信号传送数据时从数据的最高位开始传送
数据传送进行到应答位时,要保证应答位时钟脉冲出现后和消失前SDA保持稳定低电平
当主机接收数据时,它收到最后一个数据字节后,必须向从机发出一个结束传送的信号。这个信号是由对从机的“非应答”来实现的。然后,从机释放SDA线,以允许主机产生终止信号。
无论是读数据还是写数据,读/写完一个字节之后必须添加应答信号
(9)(10)(11)(12)
(13)
8、继电器:
继电器的作用是利用小电流控制大电流,相当于一个电控开关。常用的继电器有五个引脚,其中两个通电后继电器进入“常闭”状态。不通电时继电器处于“常开”状态。
9、时钟芯片DS1302:
用BCD码来存储数据,BCD码的高4位对应一个十进制数的十位,低4位对应十进制数的个位
友情提示:本文中关于《51单片机二十天的学习心得》给出的范例仅供您参考拓展思维使用,51单片机二十天的学习心得:该篇文章建议您自主创作。
来源:网络整理 免责声明:本文仅限学习分享,如产生版权问题,请联系我们及时删除。