1. 单片机重点是什么
单片机学习IIC总线是必须
学习单片机的时候,大家都会学到IIC读、写EEPROM,可以说是入门必配。
IIC是什么?
IIC是一种串行总线结构,IIC串行总线一般只需要SDA和SCL两根线,各种支持IIC总线的外围设备各处理器都可以通过这两根线连接在一起,互相通讯,非常简单、灵活。每个从机都有自己唯一的地址,IIC总线由主机进行控制。
EEPROM是什么?
EEPROM是一种可写可读的存储器,掉电也不会丢失数据。擦写次数可以高达数十万次。因为性能优异、廉价的成本,广受电子工程师欢迎。
我们设计的电子产品如果不把设置参数存储起来,断电后设置的参数就丢失了,每次来电都需要重新设置。对于用户来说体验是非常差的,所以我设计电子产品的时候,可以用EEPROM存储各种设置参数,上电后先读取EEPROM的参数。
EEPROM一般只有几K到几十K存储空间,只适合存储少量的数据。
怎么通过IIC读写EEPROM?
通读IIC读写EEPROM的数据,需要遵循IIC总线的协议
单片机作为主机,需要先发起起始信号
单片机作为主机,向IIC总线发送EEPROM的从机地址
EEPROM应答后,单片机发送要读或者写数据的地址
EEPROM应答后,单片机读取或者写入需要的数据
欢迎关注@电子产品设计方案,一起享受分享与学习的乐趣!关注我,成为朋友,一起交流一起学习
记得点赞和评论哦!非常感谢!
2. 单片机的重点
一、STC51单片机外部引脚介绍
1、电源和时钟引脚。如Vcc、GND、XTAL1、XTAL2
2、编程控制引脚。如RST(复位)。
3、I/O口引脚。
Vcc、GND——单片机电源引脚,不同的型号单片机接入对应电压电源,常压为+5V,低压为+3.3V
XTAL1、XTAL2——外接时钟引脚。XTAL1为片内震荡电路的输入端,XTAL2为片内震荡电路的输出端。8051的时钟有两种方式,一种是片内时钟震荡方式,需要在这两个脚外接石英晶体和震荡电容,震荡电容的值一般取10p~30p;另一种是外部时钟方式,将XTAL1接地,外部时钟信号从XTAL2脚输入。
P0口——双向8位I/O口,每个口可独立控制,没有上拉电阻,为高阻态,所以不能正常的输出高低电平,因此该组IO口在使用时务必要接上拉电阻,一般选10千欧。
P1口——准双向8位IO口,每个口可独立控制,内带上拉电阻,这种接口输出没有高阻状态,输入也不能锁存,故不是真正的双向IO口。之所以称它为准双向,是因为该口在作为输入使用前,要先向该口进行写1操作,然后单片机内部才可正确的读出外部信号,也就是要使其先有个“准”备的过程,所以说才是准双向接口。
P3口——与P1口类似,作为第二功能使用时,和引脚有着各种功能的定义,要查手册。
二、电平特性
单片机的输入输出电平为TTL电平,其中高电平为+5V,低电平为0V。计算机串口为RS-232电平,其中高电平为-12V,低电平为+12V。注意,RS-232为负逻辑电平。
三、单片机的几个周期介绍
1、时钟周期:也称为震荡周期,定义为时钟频率的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,如12Mhz的晶振,它的时钟周期就是1/12us),它是单片机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成这一个最基本的动作
2、状态周期:它是时钟周期的两倍
3、机器周期:单片机的基本操作周期,在一个操作周期内,单片机完成一项基本操作,如取指令、存储器读写等。它由12个时钟周期(6个状态周期)组成。
4、指令周期:他是指CPU执行一条指令所需要的时间。一般一个指令周期含有1~4个机器周期。
四、移位操作
1、左移。C51操作符为“<<”,最低位补零
2、右移。同上
3、循环左移,最高位移入最低位,其他依次向左移一位。
五、数码管显示原理
电路方面有共阴极和共阳极之分,让数码管显示不同的数字就是先定义一个保存16进制数的数组,然后在程序中把这个16进制数赋值给相应的引脚。
六、中断概念
1、51单片机一共有6个中断源
INT0——外部中断0
INT1——外部中断1
T0/1/2——计时器/定时器中断,由计数器满回零引起。
T1/R1——串行口中断,串行端完成一帧字符发送/接收后引起。
七、单片机的定时器中断
51单片机内部共有两个16位可编程的定时器/计数器,即定时器T0和定时器T1。它们既有定时功能又有计数功能。定时器/计数器的实质是加1计数器(16位),由高8位和底8位两个寄存器组成,TMOD寄存器是定时器/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0,T1的启动和停止以及设置溢出标志。
加一计数器的输入计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频后送来;另一个是T0或T1引脚输入的外部脉冲源。如果定时器/计数器工作在定时模式,则表示时间已到;如果工作在计数模式,则表示计数值已经满了。
定时器初始化过程如下:
①对TMOD赋值,以确定T0和T1的工作方式
②计算初值,并将初值写入TH0、TL0或TH1、TL1中。
③中断方式时,则对IE赋值,开放中断。
④使TR0或TR1置位,启动定时器/计数器定时或计数
八、并行与串行基本通信方式
1、并行通信方式:将数据字节的各位用多条数据线同时进行传输,每位数据都需要一条传输线。
2、串行通信方式:串行通信是将数据字节分成一位一位的形式在一条传输线上逐个的传输,此时只需要一条数据线
3、异步串行通信方式:指通信的接收与发送设备使用各自的时钟控制数据的发送和接收过程。其特点是:不要求发送双方时钟严格一致,容易实现,设备开销小,但每个字符要附加2~3位,用于起始位、校验位、停止位,各帧之间还有间隔,因此传输效率不高。在单片机与单片机之间,单片机与计算机之间通信时,通常采用异步串行通信方式。
4、同步串行通信方式:同步通信时要建立发送方时钟对接收方时钟的直接控制,使双方完全达到同步。
九、RS-232电平与TTL电平的转换
一般使用MAX232实现电平转换
十、波特率与定时器初值的关系
1、波特率:单片机或计算机在串口通信时的速率用波特率表示,它定义为每秒传输二进制代码的位数,即1波特 = 1位/秒,单位是bps。
2、波特率的计算:在串行通信中,收、发双方对发送或接受数据的速率有约定。通过编程可对单片机串行口设定四种工作方式,其中方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器T1的溢出率来决定。
3、为什么51系列单片机常用11.0592MHz的晶振设计?常用波特率通常按规范取1200,2400,4800,9600···,若采用晶振12Mhz或6Mhz,计算得出的T1定时初值将不是一个整数,这样通信时便会产生积累误差。
十一、串行口结构描述
1、串行口结构:51单片机的串行口是一个可编程全双工的通信接口,具有UART(通用异步收发器)的全部功能,能同时进行数据的发送和接收。串行口主要由两个独立的串行数据缓冲寄存器SBUF(一个发送缓冲寄存器,一个接收缓冲寄存器)和发送控制器、接收控制器、输入移位寄存器以及若干控制门电路组成。执行写指令时,访问串行发送寄存器;执行读指令时,访问串行接收寄存器。与串口紧密相关的一个特殊功能寄存器是串行口控制寄存器SCON,它用来设定串行口的工作方式,接收/发送控制以及设置状态标志位等。
2、串口方式简介:重点介绍方式1:。方式1是十位数据的异步通信口,其中1为起始位,8为数据位,1位停止位。TXD为数据发送引脚,RXD为数据接收引脚。其传输的波特率是可变的,对于51单片机,波特率由定时器1的溢出率决定。通常在做单片机与单片机串口通信、单片机与计算机串口通信、计算机与计算机串口通信时,基本都选择方式1。
3、在具体操作串行口之前,需要对单片机的一些与串口有关的特殊功能寄存器进行初始化设置,主要是设置产生波特率的定时器1、串行口控制和中断控制。①确定T1工作方式(编程TMOD寄存器)②计算T1的初值,装载TH1,TL1③启动T1(编程TCON寄存器的TR1位)④确定串行口工作方式(编程SCON寄存器)⑤串行口工作在中断方式时,要进行中断设置(编程IE、IP寄存器)
十二、I2C总线概述
1、I2C具有接线口少,控制简单,器件封装形式小,通信速率高等优点。I2C总线由数据线SDA和时钟线SCL两条线构成通信线路,即可发送数据,也可接受数据。
2、单片机模拟I2C总线通信,因为有许多单片机没有I2C总线接口,如51单片机,不过我们可以在单片机应用系统中通过软件模拟I2C总线的工作时序,在使用时,只需要正确调用各个函数就能方便地扩展I2C总线接口器件。
3、单片机在模拟I2C通信时,需要写出如下几个关键部分的程序:总线的初始化、启动信号、应答信号、停止信号、写一个字节、读一个字节。
十三、单片机空闲与掉电模式
1、空闲模式:除CPU处于休眠状态之外,其余硬件全部处于活动状态。
2、掉电模式:也成为休眠模式,外部晶振停振,CPU,定时器、串行口全部停止工作,只有外部中断继续工作。
十四、看门狗概念
在由单片机构成的系统中,由于单片机的工作有可能受到外界电磁场的干扰,造成程序的跑飞,从而陷入死循环,程序的正常运行被打断,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称看门狗。
其工作过程如下:看门狗芯片和单片机的一个IO引脚相连,该IO引脚通过单片机程序控制,使他定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散的放在单片机其他控制语句中间的,一旦单片机由于干扰造成的程序跑飞而陷入某一程序段进入死循环状态时,给看门狗引脚送电平的程序便不能被执行到,这时看门狗电路会由于得不到单片机送来的信号,便对它与单片机复位引脚相连接的引脚送一个复位信号,使单片机复位。
十五、SPI接口
1. 概述
SPI = Serial Peripheral Interface,是串行外围设备接口,是一种高速,全双工,同步的通信总线。常规只占用四根线,节约了芯片管脚,PCB的布局省空间。现在越来越多的芯片集成了这种通信协议,常见的有EEPROM、FLASH、AD转换器等。
优点:
支持全双工,push-pull的驱动性能相比open-drain信号完整性更好;
支持高速(100MHz以上);
协议支持字长不限于8bits,可根据应用特点灵活选择消息字长;
硬件连接简单;
缺点:
相比IIC多两根线;
没有寻址机制,只能靠片选选择不同设备;
没有从设备接受ACK,主设备对于发送成功与否不得而知;
典型应用只支持单主控;
相比RS232 RS485和CAN总线,SPI传输距离短;
2. 硬件结构
SPI总线定义两个及以上设备间的数据通信,提供时钟的设备为主设备Master,接收时钟的设备为从设备Slave;
信号定义如下:
SCK : Serial Clock 串行时钟
MOSI : Master Output, Slave Input 主发从收信号
MISO : Master Input, Slave Output 主收从发信号
SS/CS : Slave Select 片选信号
3. 单片机是面向什么的
两者基本没有直接关系,但前者可编写程序并在上位机上控制作为下位机的后者。
Python是一种开销颇大、但语法非常友好、学习门槛很低的面向对象的高级编程语言。它拥有非常丰富的库函数支持,被广泛应用在高性能终端上。所谓的高性能终端,就是家里的PC,或者你手里的手机。它可以用来给上位机编写程序,控制下位机。
而单片机,通常指的是51单片机,使用八位的8051芯片驱动一系列的模块,比如,电机驱动芯片,串行通信模块,等等。在单片机上运行的程序,基本不是汇编语言编写的,就是c语言编写的。单片机可以作为下位机,被上位机用python编写的程序来控制、指挥。
4. 单片机的三大基本部分
单片机应用系统是由硬件系统和软件系统组成西部分组成,它包括由运算器、控制器、存储器、输入输出设备。单片机应用系统是由时钟系统、复位系统、以及各种功能系统组成的,单片机应用系统就是将单片机技术应用在电子、工业控制领域的各种典型产品。
5. 单片机的主要内容
在单片机的开发应用中,已逐渐开始引入高级语言,
C语言就是其中的一种。对用惯了汇编的人来说,总觉得高级语言’可控性’不好,不如汇编那样随心所欲。
但是只要我们掌握了一定的C语言知识,有些东西还是容易做出来的,以下是笔者实际工作中遇到的几个问题,希望对初学C51者有所帮助。
一、C51热启动代码的编制
对于工业控制计算机,往往设有有看门狗电路,当看门狗动作,使计算机复位,这就是热启动。
热启动时,一般不允许从头开始,这将导致现有的已测量到或计算到的值复位,导致系统工作异常。
因而在程序必须判断是热启动还是冷启动,常用的方法是:确定某内存单位为标志位(如0x7f位和0x7e位),
启动时首先读该内存单元的内容,如果它等于一个特定的值(例如两个内存单元的都是0xaa),就认为是热启动,
否则就是冷启动,程序执行初始化部份,并将0xaa赋与这两个内存单元。
根据以上的设计思路,编程时,设置一个指针,让其指向特定的内存单元如0x7f,然后在程序中判断,程序如下:
void main()
{ char data *HotPoint=(char *)0x7f;
if((*HotPoint==0xaa)&&(*(--HotPoint)==0xaa))
{ /*热启动的处理 */
}
else
{ HotPoint=0x7e; /*冷启动的处进
*HotPoint=0xaa;
*(++HotPoint)=0xaa;
}
/*正常工作代码*/
}
然而实际调试中发现,无论是热启动还是冷启动,开机后所有内存单元的值都被复位为0,当然也实现不了热启动的要求。这是为什么呢?原来,用C语言编程时,开机时执行的代码并非是从main()函数的第一句语句开始的,在main()函数的第一句语句执行前要先执行一段’起始代码’。正是这段代码执行了清零的工作。C编译程序提供了这段起始代码的源程序,名为CSTARTUP.A51,打开这个文件,可以看到如下代码:
.
IDATALEN EQU 80H ; the length of IDATA memory in bytes.
.
STARTUP1:
IF IDATALEN <> 0
MOV R0,#IDATALEN - 1
CLR A
IDATALOOP: MOV @R0,A
DJNZ R0,IDATALOOP
ENDIF
.
可见,在执行到判断是否热启动的代码之前,起始代码已将所有内存单元清零。如何解决这个问题呢?好在启动代码是可以更改的,方法是:修改startup.a51源文件,然后用编译程序所附带的a51.exe程序对 startup.a51编译,得到startup.obj文件,然后用这段代码代替原来的起始代码。具体步骤是(设C源程序名为HOTSTART.C):
修改startup.a51源文件(这个文件在C51LIB目录下)。
执行如下命令:
A51 startup.a51 得到startup.obj文件。将此文件拷入HOTSTART.C所在目录。
将编好的C源程序用C51.EXE编译好,得到目标文件HOTS
TART.OBJ。
用 L51 HOTSTART, STARTUP.OBJ 命令连接,得到绝对目标文件HOTSTART。
用 OHS51 HOTSTART 得到HOTSTART.HEX文件,即可。
对于startup.a51的修改,根据自已的需要进行,如将IDATALEN EQU 80H中的80H改为70H,就可以使6F到7F的16字节内存不被清零。
二、直接调用EPROM中已固化的程序
笔者用的仿真机,由6位数码管显示,在内存DE00H处放显示子程序,只要将要显示的数放入显示缓冲区,然后调用这个子程序就可以使用了,汇编指令为:
LCALL 0DEOOH
在用C语言编程时,如何实现这一功能呢?C语言中有指向函数的指针这一概念,可以利用这种指针来实现用函数指针调用函数。指向函数的指针变量的定义格式为:
类型标识符 (*指针变量名)();
在定义好指针后就可以给指针变量赋值,使其指向某个函数的开始存地址,然后用
(*指针变量名)()即可调用这个函数。如下例:
void main(void)
{
void (*DispBuffer)(); /*定义指向函数指针*/
DispBuffer=0xde00; /*赋值*/
for(;;)
{ Key();
DispBuffer();
}
}
三、将浮点数转化为字符数组
笔者在编制应用程序时有这样的要求:将运算的结果(浮点数)存入EEPROM中。我们知道,浮点数在C语言中是以IEEE格式存储的,一个浮点数占用四个字节,例如浮点数34.526存为(160,26,10,66)这四个数。要将一个浮点数存入EEPROM,实际上就是要存这四个数。那么如何在程序中得到一个浮点数的组成数呢?
浮点数在存储时,是存储连续的字节中的,只要设法找到存储位置,就可以得到这些数了。可以定义一个void的指针,将此指针指向需要存储的浮点数,然后将此指针强制转化为char型,这样,利用指针就可以得到组成该浮点数的各个字节的值了。具体程序如下:
#define uchar unsigned char#define uint unsigned intvoid FtoC(void)
{ float a;
uchar i,*px
uchar x[4]; /*定义字符数组,准备存储浮点数的四个字节*、
void *pf;
px=x; /*px指针指向数组x*/
pf=&a; /*void 型指针指向浮点数首地址*/
a=34.526;
for(i=0;i<4;i++)
{ *(px+i)=*((char *)pf+i); /*强制void 型指针转成char型,因为*/
} /*void型指针不能运算*/
}
如果已将数存入EEPROM,要将其取出合并,方法也是一样,可参考下面的程序。
#define uchar unsigned char#define uint unsigned int
void CtoF(void)
{ float a;
uchar i,*px
uchar x[4]={56,180,150,73};
void *pf;
px=x;
pf=&a;
for(i=0;i<4;i++)
{ *((char *)pf+i)=*(px+i);
}
}
以上所用C语言为FRANKLIN C51 VER 3.2。
6. 单片机主要用在哪些方面
啥都干不了,也啥都能干,简单的就点个灯,还有呼吸灯,难一点,配和各种模块,做控制,比如DIY个写字机,CNC,厉害还能3d打印机,也可以玩四足飞行器,家里的电器很多都用到单片机,总之,单片机在很多方面都用广泛的用途。精通也不是那么容易的。
7. 单片机最重要的是什么
1、熟悉单片机的原理,结构;
2、学好数电,模电,为设计电路打好基础;
3、熟练使用C语言,多学习别人的程序;
4、对操作系统原理有一定的了解;
5、Protel至少要有点基础;
6、要实际动手调试电路的能力。
学习单片机的步骤
当前的单片机种类很多,但是 51 是最基础的,因此单片机的学习最好也是从 51 开始,不仅容易上手,而且相当实用。然而 51 单片机毕竟过于基础,后来的很多单片机在功能上都有很大的扩展,因此按照我们实验室多数人的路线接下来大多数人会学习 AVR 单片机, AVR 单片机在功能上较 51 有很大提升,集成了 A/D 、快速 PWM 等很多实用的功能,而且和很多大型的单片机在功能上有很多类似之处,因此如果以后还想掌握其他单片机 AVR 无疑是一个很好的跳板。
学习的过程
学习单片机最终要的是当然是练,我所说的学习跟课堂上的单片机学习不同,我以前也看过一些单片机教材,有些教材讲的是单片机的工作原理和内部结构,这些东西对于我们暂时并不需要,等以后开课的时候在学习好了。现在要学习的是暂时抛开内部结构原理不谈,如何能用单片机写一些简单的小程序,是从实用性的角度出发,网上有一种说法称之为先实践后理论的学习方法。
因此我的观点如下,单片机的硬件结构首先要有一个基本的了解,最起码要知道各引脚的功能、区别,能自己动手搭一个单片机的最小系统,然后就可以直接从程序入手,程序最好还是用 C 语言编程,从简单的跑马灯做起,逐渐深入,陆续可以做一些数码管、液晶、 DS1302 、 DS18B20 等电子元器件的应用,在深入就可以结合一些具体实例扩展一些中断、串口通讯等功能。还有一点要声明的是单片机里用到的 C 语言其实很有限,课堂上学习 C++ 的很大一部分内容在初期单片机编程中都用不到,因此没必要因为觉的自己的 C 语言基础不是很好而对单片机望而止步!
学习的工具
软件方面方面, 51 单片机用的是 KEIL 软件,这个软件在学校图书馆软件下载和其他网站上都有,具体用法自己查找相关资料, AVR 的软件就比较多了,我用的是 CVAVR ,另外还有 ICCAVR 等多款编译软件,这要看个人喜好了,建议有了一定的 51 基础再学。另外就是烧写软件,烧写软件的作用就是将编译器生成的 HEX 文件烧写至单片机里,这要配合下载线实用,如果有并口的话最好用并口下载线,软件最好用广州双龙的 SLISP 软件,如果是笔记本没有并口的话则要自己买一个下载器了,名称为 USBASP ,网上电子市场有卖 20 块钱左右,软件会随光盘自带。
硬件方面,首先是要有单片机,对于单片机有一点要注意, 51 单片机最好买 89S51 、 89S52 这两种型号,上面我所说的烧写程序是 ISP 方式,这两种单片机支持 ISP 下载,所以如果买其他型号的烧写程序可能会不太方便, AVR 单片机常用的就是 ATmega16L 其它型号的区别也不是很大,甚至有些兼容。至于单片机开发板,目前的价格都很贵,从一百到几百不等,不过像上次学校里广告的那个六十多块钱的最好还是免了,没什么作用。能买一块当然好,没有的话也不要紧,自己动手买个电路板搭一下也很方便,引出 ISP 接口,烧写程序十分容易,然后将 I/O 口引出扩展也很方便。
学习单片机的其它几个注意点:
1.理论与实践并重
对一个初学单片机的人来说,如果按教科书式的学法,上来就是一大堆指令、名词,学了半天还搞不清这些指令起什么作用,也许用不了几天就会觉得枯燥乏味以致半途而废。所以学习与实践结合是一个好方法,边学习、边演练,循序渐进,这样用不了几次就能将所用到的指令理解、吃透、扎根于脑海,甚至 “ 根深蒂固 ” 。也就是说,当你学习完几条指令后 ( 一次数量不求多,只求懂 ) ,接下去就该做实验了,通过实验,使你感受到刚才的指令产生的控制效果,眼睛看得见 ( 灯光 ) 、耳朵听得到 ( 声音 ) ,更能深刻理解指令是怎样转化成信号去实现控制的,通过实验看到自己所学的成果不仅有一种成就感也能提升你对单片机的兴趣。说句实在话,单片机与其说是学出来的,还不如说是做实验练出来的,何况做实验本身也是一种学习过程。因此边学边练的学习方法,效果特别好。
2.合理安排时间持之以恒
学习单片机不能 “ 三天打鱼、两天晒网 ” ,要有持之以恒的毅力与决 4 心。学习完几条指令后,就应及时做实验,融汇贯通,而不要等几天或几个星期之后再做实验,这样效果不好甚至前学后忘。另外要有打 “ 持久战 ” 的心理准备,不要兴趣来时学上几天,无兴趣时凉上几星期。学习单片机很重要的一点就是持之以恒。
3.遇到问题耐心检查
单片机有软硬件两方面的内容,有时一个程序怎么调都不出效果,然而从理论分析却又是对的,这是就要仔细找原因了,学习单片机经常碰到很多问题,有时一两天都不能解决,这是就要有耐心,从底层找起,相信每找出一个错误都会有一个新的收获。切不可轻言放弃!!!
4.对只短暂学过一遍的知识,充其量只比浮光掠影稍好。因此,较好的方法是过一段时间后 (1-2 个月 ) 再重新学一遍,学过的知识要经常运用,这样反复循环几次就能彻底弄懂消化,永不忘却。
5.要进行适当投资购买实验器材及书籍资料
单片机技术含金量高,一旦学会后,给你带来的效益当然也高,无论是应聘求职还是自起炉灶开厂办公司,其前景都光明无限。因此在学习时要舍得适当投资购买必要的学习、实验器材。另外还要经常去科技图书店看看,购买一些适合自己学习、提高的书籍。一本好的书籍真的很重要,可以随时翻阅,随时补充不懂或遗忘的知识。
8. 什么是单片机的核心
1、中央处理器CPU:它是单片机内部的核心部件,决定了单片机的主要功能特性,由运算器和控制器两大部分组成。
2、存储器:8051单片机在系统结构上采用了哈佛型,将程序和数据分别存放在两个存储器内,一个称为程序存储器,另一个为数据存储器在物理结构上分程序存储器和数据存储器,有四个物理上相互独立的存储空间,即片内ROM和片外ROM,片内RAM和片外RAM。
3、定时器/计数器(T/C):8051单片机内有两个16位的定时器/计数器,每个T/C既可以设置成计数方式,也可以设置成定时方式,并以其定时计数结果对计算机进行控制。
4、并行I/O口:8051有四个8位并行I/O接口(P0~P3),以实现数据的并行输入输出。
5、串行口:8051单片机有一个全双工的串行口,可实现单片机和单片机或其他设备间的串行通信。
6、中断控制系统:8051共有5个中断源,非为高级和低级两个级别它可以接收外部中断申请、定时器/计数器申请和串行口申请,常用于实时控制、故障自动处理、计算机与外设间传送数据及人机对话等。
9. 单片机的概念是什么
从大一的时候在大学图书馆看到关于AVR单片机的书籍,到参加竞赛、工作,我和单片机已经打了六七年的交道了吧。其间我都是在做产品的软件开发,与硬件工程师合作,根据需求选择合适的单片机型号和外围器件,完成代码编写。积累了一点对单片机选型、特点的认识。
所以这篇想谈谈关于单片机特点和选型。
单片机
MCU,微处理器,他有很多名字,但是我还是喜欢叫他单片机,因为他就是单单的一片,没什么其他的模块,一片里面就集成了CPU,RAM、ROM等,冯·诺依曼必有的结构单元。只要外部给他晶振,给他电源,他就能像计算机一样工作起来。高级一点的单片机内部RC就能起振,外部晶振都可以免去,只要外部给个稳定的3.3V,就可以工作。
单片机设备做的可以有多小?看到老外玩的蚊子飞机,就知道了,大学的时候非常的震惊,也是这样,让我对飞行器着迷不已。
听过一个趣闻,就是为什么一个字节是8个BIT,而不是12个?据说是最早的芯片,因为工艺限制了,只能有八个引脚,想要更多的引脚怎么办,多用几个八脚芯片就好了,于是1个字节对应一个芯片,一个芯片的八个脚对应八个比特就顺理成章了。
计算机的技术从来都是往两个方向发展的,一个是计算速度快,资源多,同时可处理的事件多,相对应的,功耗大,体积大。一个就是计算速度慢,资源少,但是价格低廉,体积小,功耗低。
前者所发展而来的就是咱们的计算机,WINDOWS\LINUX操作系统,后者就是单片机系统了,各种嵌入式操作系统。手机的范畴有点迷了,我还是愿意把手机放在单片机系统这个层面来看。
在从业人数规模来看,前者发展出来的计算机,软件编程带动了多少人的就业,我们把这从事这职业的人叫做“码农”,他们的工作就是在前人对计算机一层一层又一层的封装下,进行针对应用的开发。顶层软件层的开发需要,促成JAVA、C#、PYTHON这样的语言出现,这些语言本身不涉及底层,只是调用底层的接口函数。显而易见的,想通过JAVA让计算机主板发出一个方波信号出来,是何等困难,但对应的是用JAVA在通用电脑屏幕上显示一串数字是何等的简单。
后者单片机,开发的人数就不如通用计算机了,单片机资源少,可用的“轮子”少,啥玩意都需要自己自力更生。能快速的发出方波,如果有DDS芯片的话,可以调制出正弦波,等等通用主机模块做不到的功能。更加的自定义!缺陷的话,显而易见的,想通过单片机在屏幕上显示一串HELLO WORLD字符,那得是进阶的人才能做到的咯!
所以单片机软件开发不是“纯软件”开发,也需要对硬件有相当的学习,对数字电路、模拟电路也要了解才行。这一行门槛高,很难速成,一定是慢慢积累~
是否“裸奔”
裸奔,顾名思义就是单片机穿不穿衣服?衣服是啥,操作系统呗!
选单片机的时候,根据需求不同,首先要选此单片机是否需要跑操作系统,还是裸奔。
· 当需要用复杂协议栈的时候,操作系统变得非常有用。
例如,希望咱们的单片机可以连互联网,通过网线联网,或者通过WIFI信号联网,那么多半需要运行操作系统,如果不跑操作系统也行,但是工作量很大,不稳定。
工程师需要比方案,咱们比比方案。
1 、开源的RTOS几乎都提供TCP/IP协议栈,社区的开源代码经过很多人,很多年的稳定运行。
2、自己写TCP/IP协议栈,嵌入到裸奔工程中,稳定性未知,BUG数量未知。
两个方案肯定选择前者,笔者自己试过在ENC28J60网卡芯片上自己硬刚协议栈,其中艰难不言而喻,到最后还是妥协选择开源社区。
·当需要运行多个复杂任务的时候,操作系统很有用
操作系统提供TASK机制,消息管理机制,如果上位机编程经验的人,对线程会有很深刻的理解,不同的TASK就是不同的线程。有了TASK机制,对任务的管理就会方便的多。好像安卓系统运行起来了,咱们可以用JAVA为他随时增加新功能,下个APK包,安装就好了,对吧。
什么时候,我会选择裸奔单片机?
裸奔有裸奔的好处,笔者怕黑。认为“上位机”开发人员之所以天天加班,有干不完的事,改不完的BUG,最大的原因就是“黑”。黑盒子太多了。黑盒子指的是一个程序块,这个程序块你压根不知道他是怎么实现的,你只知道他提供什么功能,至于自己是不是正确的调用了黑盒子的接口,你只能通过文档去看,然后就不断不断的试错,效率极低。所以很多时候大神上位机开发人员,是对黑盒子(某语言提供的对象、方法)有深刻掌握的人!
裸奔的单片机不一样,如果你愿意,启动时的汇编代码都可以自己写,配置好时钟,配置好各样的寄存器,所有的代码都是你自己写的,出了问题自己找,自己的代码还找不出原因,那就废了。如果你觉得C语言也是黑盒子,为了躲避C语言开发者给你留的坑,你甚至可以用汇编写代码,当然这个我不推荐了,C语言很棒,bug很少。裸奔开发,你眼前唯一的黑盒子就是硬件是如何实现的,也只有硬件能坑你一把。
不言而喻,裸奔的单片机代码,虽然简单,但是所能做的功能也会有局限。
裸奔的话,联网什么的别想了。
所以如果需求比较简单,一定裸奔,需求困难,就跑操作系统。
什么单片机支持操作系统?
理论上,只要ROM/RAM资源足够,所有的单片机都可以执行嵌入式操作系统,但是,不是所有人都有移植操作系统的能力。
新手还是得靠厂家帮你移植操作系统,所以选单片机的时候,得问一下,上网查一下,它支持哪些操作系统?
以TI的 CC2640为例,这玩意支持TI自家的嵌入式操作系统 TI-RTOS,好用!
裸奔的话,所有单片机都能裸奔,毕竟不穿衣服谁不会啊~
温度特性
注意要看设计产品的工作温度区间,是民用级,还是军工级,有些单片机芯片高低温实验过不了的,会出现代码起飞,内部FLASH莫名丢几个等这些问题,不要等代码写好,送去拿证了,过不了高低温,被老板骂~
低功耗特性
芯片是否有较好的休眠模式,老牌的芯片厂家都非常注重硬件低功耗模式,提出了各种各样的睡眠方式,TI就是把低功耗做的很好的厂家。如果是设计电池供电的产品,一定要考虑低功耗。低功耗更多需要代码去优化,这看一个软件工程师的水平~
一个纽扣电池,产品用一年,那就太牛了!
开发环境
喜欢IAR还是MDK?笔者喜欢IAR多一点,感觉界面很硬朗,MDK的话显得像是在写上位机软件~CORTEX Mx系列的单片机多半都是用MDK开发的,STM32算是明星级产品了。TI的产品大多是用IAR。所以哪个开发环境你更熟悉,也可以作为考虑范畴。
芯片是否冷门?
STM32的技术支持是真的多,资料满天飞,所以如果对自己读DATASHEET的能力有所怀疑的话,一定要选类似STM32这样的popular芯片。
选冷门芯片是对自己的很大挑战,你会发现百度问题几乎没人答,你得写英文e-mail给原厂工程师,满心欢喜克服语言困难写完,他也不会理你。你得翻墙去国外论坛找资料。但是一旦你开发好,你会成就感爆棚,也会觉得,单片机不过如此~然后写一些关于这个芯片的CSDN文章,帮助建设社区!
学生的话可以推荐尝试尝试,工作的就算了,都996了别升级007咯~
最近的状态
大学的时候,对单片机,对飞行器的热情,我都在年复一年,日复一日的工作中慢慢淡去了。现在我唯一想的就是努力把产品做好,卖到世界的各个角落,这也算change world的一种方式吧~嘿嘿,自己给自己熬点鸡汤,愿明天会好~
分享的这些,若是有用的话,点个赞呗~