如何入门51单片机

概述

如果我们对数字电路和模拟电路没有任何基础,但是我们还是很想学单片机怎么办?
密密麻麻的电路以及一些不知道什么的线和焊针,可能直接把你劝退。

本文是我的第一篇博客,以下是我对单片机的总结,我初学单片机的时候跟大家是一样的,什么都不懂,就会一点点C语言。我经过一个月的学习,把单片机(开发板)的硬件资源全部整了一遍,到现在差不多可以灵活运用上面的所有硬件资源了以及外接资源。

以下是我入门的经历,以及解决办法。

预备知识

  • 计算机只识别0和1
  • 1B=8bit;
  • 1bit 代表一个0或1
  • 会二进制十六进制转化

点亮第一个小灯

我入门开发板为普中51 A2开发板

点亮第一个小灯,是我们有单片机之后的一个任务。
首先请保证你已经会C语言到循环语句之前了。

第一个可能让你产生不适的概念 :高电平、低电平。
这里高电平代表的是1,低电平代表的是0。
这里我们将高电平和低电平可以当作正负极。
这里看以下原理图:

开发板LED原理图通过这个图我们可以看到所有的LED灯的一边都接在了vcc上面,(这里vcc指高电平,也就是正极),而右边则是分别对应接在了P20、P21等上面了。
现在我们需要知道第一个概念:寄存器
其实P2就是一个8bit的寄存器,这里我们可以这样理解:
简述图我们可以将P2寄存器看作一个可以存储8个bit的盒子,也就是说,从最低位到最高位分别是从P20到P27这八个可以存储0和1的小盒子组成了一个寄存器,这个寄存器的名字叫做P2.
我们可以通过C语言来控制每个小盒子让他变换0和1,注意0和1分别是低电平和高电平,也就是负极和正极。
比如我们让P20这个小盒子变成0也就是负极,这个 LED0就可以亮了,因为另一端都都连接着正极。
程序如下:

#include <reg52.h>
sbit LED0 = P2^0;	//此处sbit就是单片机中用于定义一个寄存器中一个bit用的变量
void main()
{
	LED0 = 0;	//这边我们让LED0也就是P20这个小盒子等于0,也就是负极
}

这样一个小灯就成功点亮了。
我们也可以不定义LED0,直接用P2=0xfe,代表的也是P20=0,而其他盒子都是1.

流水灯实验

据说流水灯困扰了一些人很长时间。

教程中的流水灯是如何实现的。
有些书上还有一些入门视频引入了一个库函数:
intrins.h这个头文件中的_crol_(unsigned char c,unsigned char b)这个函数。
这个函数有两个参数,第一个参数是要循环移动的变量。第二个参数是移动几位
例子:

#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
void delayms(uint z)
{
	uint i,j;
	for(i=z;i>0;i--)
		for(j=110;j>0;j--);//延时函数,大约为ms级
}
void main()
{
	uchar aa = 0xfe;	//这里指最低位的盒子为0,其他为1。
	while(1)
	{
		P2 = aa;
		delayms(500);   //延时500ms左右一次移位
		aa = _crol_(aa,1);  //这里指让最低位为0的盒子往左循环移动一位
	}
}

左移的情况大概是这个样子:
在这里插入图片描述(图画的有点丑不好意思)
总之就是这个循环的样子,让这8个盒子循环移动
这段代码中用到了一个延时函数,说一下延时函数的原理。

延时函数

其实上面用的延时函数就是拖单片机运行的时间,在51单片机中运行一条指令大概要用19微秒,

就是说运行一个i++,或者P2=0xfe 耗时19微秒

可以记住上面用的延时函数,经过测试大概令z=1,用时1毫秒左右。

大概先了解这么多应该就可以明白单片机的大概原理了,其实就是通过对寄存器的控制,从而控制单片机上面的硬件资源(先写这么多!)
下一篇中断介绍

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值