微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 凔海笔记之单片机(二):初识单片机

凔海笔记之单片机(二):初识单片机

时间:10-02 整理:3721RD 点击:
       何为单片机?网上有云:“单片机是在一片硅片上集成了CPU、存储器(RAM、ROM、EPROM)和各种I/O接口(定时器、计数器、并行I/O口等)具有一台计算机功能的设备,又称单板机、单片微型计算机、微控制器、嵌入式控制器”。我觉得这句话说得很好,不过在这里我更想说


不懂/(ㄒoㄒ)/~~

        所以,先说一下单片机并记住一句话,单片机的引脚可以接收或发出高低电平。人家的原则貌似是“不求规模大,力求小而全”。n(*≧▽≦*)n

  

        上图是51单片机实物图,右图是引脚图,引脚什么鬼?引脚,又叫管脚,英文叫Pin。就是从集成电路(芯片)内部电路引出与外围电路的接线。即左图白色的短小矩形,我们先要用意念控制住自己,不要想这黑块内部是什么,只需要知道这些引脚可以接收或发出高低电平,接收的电平或可影响着输出,输出的也可左右着输入,如要里二者的相互影响的奥秘,就是知道这个黑块的原理。对于刚接触单片机的在下来说,还是简单的认识一下能看得见的东西吧。
       引脚。20接负极,40接正极,这家伙是供电, 5V电压最好。P1、P2口共16个,它们是一样的,都是输出或接收所谓的高低电平。P3脚比较勤劳,不仅有与P1、P2相同的功能,而且还兼职,也就是第二功能,这个先不说。P0口则有些先天不足,需要给它提供驱动力,才能与P1口一样,这个驱动力叫做上拉电阻。当然,这样的设计,是有人家的目的的,具体为什么,也先不说了吧。我们现在主要用的就是这些P口。
学习C语言Java什么的,第一件事是说“hello world”,那么,学习单片机首先要亮一个灯,我们初中就知道怎么亮了,拿一两块电池,把灯的一头接在负极,一头接在正极,他就亮了。就像这样



       现在我们要用单片机来点亮一个灯,先说这个灯,我们管它叫led,即是发光二极管(我记得当初并不知道led就是发光二极管(⊙﹏⊙))。
       二极管想必都知道,具有单项导通性,如下图


        A接正极,B接负极,它是导通的,如果反过来就不管用了,当然,你可以暴力的击穿它,让它与世长辞。那么发光二极管呢?顾名思义,当A接正极,B接负极时,导通灯亮,反之不会亮。而在这里,我们又有了新的词汇来形容正极和负极。这就是高电平和低电平。物理解释中,正极指电源中电位(电势)较高的一端,负极与之相对。高电平对应正极,负极与低电平相对应。我们说的“水平”,词典中解释与水平面平行、或在某方面达到一定高度,引申指事物在同等条件下的比较结论。


       看这幅图,水从高的地势下泄,水从高水平面向低水平面溜达。现在再想想高电平和低电平也就了然了,电荷从高电平溜达到低电平,就是从正极流窜到负极。就是这个道理。在数字系统中,我们用1来表示表示高电平,用0来表示低电平,为什么呢?用0表示高电平当然也可以,不过,0比1大有没有觉得很别扭,接下来就说说发光二极管,看下图


        A高电平,B低电平就亮了。那么这和单片机有什么关系呢?还记得开头怎么说没?单片机的引脚可以接收或发出高低电平。所以,当把A接的高电平用单片机来提供,B接到负极,灯就亮了,若将A外接高电平,B接单片机发出的低电平,灯也亮了。其实这俩种接法又称共阳、共阴,这以后再谈。那么如何让单片机发出高低电平呢?这就需要软件来实现。我用的是在keil3,软件如何应用,就不赘述了~( ̄0 ̄)/。
       我觉得不得不说一句,任何不看电路图所写的程序都是瞎扯淡,所以这里假设led连接在P1.1角上。
#include<reg52.h>
要想知道这个头文件干什么很简单,选中头文件,右键,选中open  document #include<reg52.h>就可以看到一些内容。


        document 是文件的意思。include是包含,reg52.h是针对51/52单片机定义的头文件,主要包括寄存器定义。所以也就大概理解了这个头文件的意思了。SFR = special funtion register //特殊功能寄存器。举例来说,如果你写P0=0x01烧写软件会给0x80这个地址赋0x01,就是这样,打起来了C语言与单片机的桥梁。如果学了汇编,相信会对这些内容很熟悉的。如果不太清楚我想也不必要纠结,写程序的时候写上这些也就可以了,以后会懂得。要知道,程序的本质是寄存器之间的数据传递。
#include<reg52.h>
sbit led = P1^1;// 定义特殊功能寄存器的位变量。在函数中不允许对P0~P3                                                                        //口进行为位操作的,故使用前要先进行位定义。
main()
{
        while(1)
        {
                led=1;                              
        }
}

       

    那为什么写while(1)嘞?main是主程序, while(1)是无线循环的意思。学过C语言的知道,让led=1;一直保持下去。为什么非要加while(1)来保持下去呢?引脚输出1他不就亮了么?确实是这样,可是我们先要清楚一点,单片机是顺序执行,led=1;不是它的最后一句,如果不加while(1),led=1确实是最后一句啊,是的,对于C语言是这样,但汇编不是这样,对于单片机。并不是传递了led=1就停止工作了,这需要我们探索内部结构才能知晓,现在知道这样一个概念吧。再补充一句,忘了加限流电阻了 。/(ㄒoㄒ)/~~
一节流水犹未尽,下节接着说废话,学识浅薄出拙文,如察错误望赐教,小弟在此感涕零。



写的不错啊  支持



小白表示能稍微看的懂

写的真好,谢谢小编,幸苦了

谢谢小编,幸苦了 51自学网-专业培训老师录制的视频教程,让学习变得很轻松

谢谢,过奖啦

谢谢您支持

赞,这帖子都可以申精啦

真是经典啊!

!!

这本书真的好、、、

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top