萌新的51之旅

本人是单片机学习的萌新一枚,学习单片机等知识目的就是提升自己专业方面的综合的素质修养,我将会把自己的每次的学习的内容和心理历程记录下来,分享给大家的同时也加深自己的理解。
众所周知,单片机的入门51是再好不过的选择,对于我这种刚刚接触单片机的人来说,我觉得51单片机还是十分容易接受的,首先相对于其他单片机来说,它的结构相对简单,相对而言更容易让我们理解,而且上手实验性强,比起简单地只去了解相关的理论知识来说,自己买一块51的实验板,自己动手去实验更加的有趣和有成就感,并且在不断地动手操作后还能更加清晰的了解和掌握51的相关理论知识。同时51对于硬件的要求低,且开发板的价格相对便宜,是一个不错的选择。
初学者选择51的理由:
1:简单易懂并且方便了解原理。
2:动手实践性强,门槛要求低。
3:硬件要求低,经济实惠。
现在来谈谈单片机的第一步所需要的掌握的知识,C语言想必大家都学过,只需要简单地C语言就可以熟练的应用到51单片机之中。其他的知识包括进制转换啦,一些逻辑语句与,或,非啦等等…再有就是你需要通过学习了解到单片机到底是一个什么东西,了解了这些,你就已经具备了学习好单片机的基本要求了。
首先,对于我来说,单片机就是一个控制器,它可以根据你设定的需求去控制其引脚和端口的电平来起到信号的传递的效果,所以说对于我们来说,我们就是需要掌握单片机的语言和行事规则,从而能够更好地与其沟通,从而使它更好地解决我们所需要达到的控制效果。具体来说,单片机就像是一台电脑,能够完成人类不能短时间完成的准确的计算和计数操作的一个强大的机器,只不过他现在被集成为一个很小的芯片,便于保存和携带。
就像我刚刚入门,我按照我的方式了解了大概之后就先动手实验,我只简单地了解了单片机上的LED灯和数字屏的简单控制语句和原理,又了解了一些关于中断的概念和定时/计数器的操作要求,就开始了实验。
在这里插入图片描述

LED灯
LED灯其实就是一个个小部件集成在电路中,只不过是由单片机的芯片来简单控制电路的通断从而控制其亮灭,大多数单片机接通了高电平,低电平由单片机的芯片控制,从而当对应的低电平接通时,LED灯就构成了一个通路,从而他就被对应点亮。
定时器
定时器其实就是一块表,只不过能够和单片机的内部进行信息的交流,它其实就是根据石英的具体震动来确定时间的基础,通过单片机二进制的进位来积累时间,渐渐从量变达到质变,形成准确的单位时间,而且他还具有中断的功能,到达预定时间之后可以进行中断来终止这项操作,或者跳跃到另一优先级更高的的工作。

从这两个简单的器件开始我们就可以开始做一个简单的实验,大家可能会疑惑,我只是单单理解了这两个器件,其他的几乎都不懂,甚至连中断是什么都不了解,就能做实验吗?
我的回答是没错,已经可以做实验了,当然还需要掌握定时器的操作所需要的程序代码和LED的代码。我们先来分享一个实验然后我再对具体的代码进行分析:

实验要求是这样的,控制一个LED灯,使它每3s点亮一次,点亮时间为1s。并且如此循环下去。

这个实验听起来相当的简单,但操作起来也是如此,我们先上代码:

include<reg52.h> /*模块一,定义阶段
#define uchar unsigned char
#define uint unsigned int
uint t0=0,t1=0;
sbit D1=P2^0; */
void main()/模块二主函数内定时器初始化阶段
{
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
/
while(1)/*模块三主函数内LED循环点亮阶段
{
if(t0==100)
{D1=0;

TR1=1;
TR0=0;
t0=0;
}
if(t1==20)
{D1=1;
TR0=1;
TR1=0;
t1=0;
}
}
}*/
void timer0() interrupt 1/模块四两个定时器的时间单位校准和循环阶段
{TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t0++;
}
void timer1() interrupt 3
{TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
t1++;
}
/
下面我们来谈谈代码和一些主要的内容,从而达到掌握定时器中断和LED的目的:
模块一首先两个define定义了两个关键字,便于下面对程序的定义。
然后又使用Sbit定义,sbit是特殊位的定义说明,也就是对单片机的某个端口的电平状况进行操作时进行的相关定义
题中的定义是根据单片机LED1的原理图进行的。
在下面就是定义了两个变量,是为了控制时间。

模块二
这是一系列的对于定时器的相关操作,首先TMOD=0x11是打开了两个定时器的门锁,
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
这四个代码是给定时器0,1的高四位和低四位确定时间基础,因为机器的时间不可能是都是整数,而这些二进制的定时器开启的16位模式,总的是65536,而我们要想更加准确的控制时间,我们就需要给它凑个整,这样我们把不是整数的初值给定时器填进去,那么定时器的一个周期就是整数了,也就是50ms。
EA=1;打开定时器总开关
ET0=1
ET1=1;
TR0=1;
这些语句就是分别打开定时器0的所有开关,但是定时器1还有TR1没有打开,这就跟我们所要编写的程序的逻辑紧密的相关联了。因为控制开关的TR1要在下面的玄幻语句中控制着定时器1的工作与关闭。
while(1)/*模块三主函数内LED循环点亮阶段
{
if(t0==60)
{D1=0;

TR1=1;
TR0=0;
t0=0;
}
if(t120)
{D1=1;
TR0=1;
TR1=0;
t1=0;
}
}
}*/
这个模块三便是整个程序能够控制单片机运行的灵魂
t0
60表示单片机运行了整整60个周期,也就是5s
然后点亮了LED1并且关闭了当前定时器0,打开了控制LED1工作时间的定时器1
从而程序开始运行定时器1
当t1==20也就是经过了1s后,关闭LED1,关闭定时器0,打开定时器1,又开始进入了新的循环之中。
模块4
便是对定时器调用的函数,由于该函数特殊,不需要进行声明
只需要简单地初始化和在循环之中放入变量即可。
程序实践的效果。

这便是这个程序的整体思路和解读,想必你会对定时器中断和单片机有了新的了解和认识。
本次的分享就到这里结束了,希望大家继续努力,在实践中寻找兴趣,不放弃,我会继续更新学习成果的!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值