51单片机

在进行应用系统的总体设计时,软件设计和硬件设计应统一考虑,相结合进行。当系统的电路设计定型后,软件的任务也就明确了 ,系统中的软件是根据系统功能要求设计的。

一般地讲,软件的功能可分为两大类。

- 一类是执行软件,它能完成各种实质性的功能,如测量,计算,显示,打印,输出控制等;

- 另一类是监控软件,它是专门用来协调各执行模块和操作者的关系,在系统软件中充当组织调度角色。

由于应用系统种类繁多,程序编制者风格不一,因此应用软件因系统而异。尽管如此,作为优秀的系统软件还是有其共同特点和其规律的。

设计人员在进行程序设计时应从以下几个方面加以考虑:

根据软件功能要求,将系统软件分成若干个相对独立的部分,根据它们之间的联系和时间上的关系,设计出合理的软件总体结构,使其清晰,简洁,流程合理。培养结构化程序设计风格,各功能程序实行模块化,子程序化。既便于调试,连接,又便于移植,修改。

建立正确的数学模型。即根据功能要求,描述出各个输入和输出变量之间的数学关系,它是关系到系统性功能好坏的重要因素。

为提高软件设计的总体效率,以简明,直观的方法对任务进行描述,在编写应用软件之前,应绘制出程序流程图。这不仅是程序设计的一个重要组成部分,而且是决定成败的关键部分。从某种意义上讲,多花一份时间来设计程序流程图,就可节约几倍源程序编译调试时间。

要合理分配系统资源,包括ROM,RAM,定时器/计数器,中断源等。其中最关键的是片内RAM分配。对8031来讲,片内RAM指00H-7FH单元,这128个字节的功能不完全相同,分配时应充分发挥其特长,做到物尽其用。

例如:在工作寄存器的8个单元中,R0和R1具有指针功能,是编程的重要角色,避免作为它用,20H—2FH这16个具有寻址功能,用来存放各种标志位。逻辑变量,状态变量等。

设置堆栈区时应事先估算出子程序和中断嵌套的级数及程序中堆栈操作指令使用情况,其大小应留有余量。若系统扩展了RAM存储器,应把使用频率最高的数据缓冲器安排在片内RAM中,以提高处理速度,当RAM资源规划好后,应列出一张RAM资源详细分配表,以备编程查用方便。注意在程序的有关位置处写上功能注 释,提高程序的可读性。

加强软件抗干扰设计,它是提高计算机应用系统可靠性的有力措施。

通过编辑软件编辑出的原程序,必须用编译程序汇编后生成目标代码。如果原程序有语法错误则返回编译过程,修改原文件再继续编译,直到无语法错误为止。这之后就是利用目标码进行程序调试了,在运行中发现设计上的错误再重新修改源程序,如此反复直到成功。

一个单片机应用系统经过总体设计,硬件设计,软件设计,制板,元器件安装后,在系统的程序存储器中放入编制好的应用程序,系统即可运行。但一次性成功几乎是不可能的,多少会出现一些硬件,软件上的错误。这就需要通过调试来发现错误并加以改正。由于单片机在执行程序时是无法控制的,为了能调试程序,检查硬件,软件运行状态,就必须借助某种开发工具模拟用户实际的单片机,并且能随时观察运行的中间过程而不改变运行中原有的数据性能和结果,从而进行模仿现场的真实调试。完成这一模仿工作的开发工具就是单片机仿真器。

来源:广电电器

围观 429

用C语言进行MCS51系列单片机程序设计是单片机开发和应用的必然趋势。Keil公司的C51编译器支持经典8051和8051派生产品的版本,通称为Cx51。应该说,Cx51是C语言在MCS51单片机上的扩展,既有C语言的共性,又有它自己的特点。本文介绍的是Cx51程序设计时堆栈的计算方法。   

1.堆栈的溢出问题。MCS51系列单片机将堆栈设置在片内RAM中,由于片内RAM资源有限,堆栈区的范围也是有限的。堆栈区留得太大,会减少其他数据的存放空间,留得太少则很容易溢出。所谓堆栈溢出,是指在堆栈区已经满了的时候还要进行新的压栈操作,这时只好将压栈的内容存放到非堆栈区的特殊功能寄存器(SFR)中或者堆栈外的数据区中。特殊功能寄存器的内容影响系统的状态,数据区的内容又很容易被程序修改,这样一来,之后进行出栈操作(如子程序返回)时内容已变样,程序也就乱套了。因此,堆栈区必须留够,宁可大一些。要在Cx51程序设计中防止堆栈的溢出,要解决两个问题:第一,精确计算系统分配给用户的堆栈大小,假设是M;第二,精确计算用户需要堆栈的大小,假设是N。要求M≥N,下面分别分析这两个问题。

2.计算系统分配给用户的堆栈大小Cx51程序设计中,因为动态局部变量是长驻内存中的,实际上相当于局部静态变量,即使在函数调用结束时也不释放空间(这一点不同于标准C语言)。Cx51编译器按照用户的设置,将所有的变量存放在片内和片外的RAM中。片内变量分配好空间后,将剩下的空间全部作为堆栈空间,这个空间是最大可能的堆栈空间。当然,因为Cx51是一种可以访问寄存器的C语言(特殊功能寄存器),因此可在程序中访问SP,将堆栈空间设置得小一点。不过,一般没有人这么做。

本文只是讨论放在片内RAM的变量。我们把变量分为两种情况:

① 用作函数的参数和函数返回值的局部变量。这种变量尽量在寄存器组中存放。为了讨论方便,假设统一用寄存器组0,具体的地址为0x00~0x07。最多可以传递3个参数,如果参数的个数比较多,就将多余的参数放到内存(0x08以后的地址)中存放。这里,假设每个函数的参数都不大于3个。

② 我们在程序中定义的全局变量,以及不是用作函数的参数和函数返回值的局部变量。以上两种变量在内存中0x08地址以后存放,存放完毕后将堆栈指针SP指向分配了变量的片内RAM的最后一个字节。因为MCS51单片机的堆栈是一种满递增堆栈且堆栈的宽度为8位,所以在需要压栈操作时将堆栈指针先加1,后入栈有效内容。有了以上规则,就可以精确地计算出系统分配给用户的堆栈空间。以求两个数的最大公约数和最小公倍数的函数为例,代码如下:

#include <REG52.H>  

unsigned char max(unsigned char a, unsigned char b);   

unsigned char min(unsigned char a, unsigned char b);   

unsigned char M;  

void main (void)

{   

unsigned char  n;   

M = max(12, 9);  

     n = min(12, 9);   

}  

unsigned char max(unsigned char a, unsigned char b)

{   

while(a != b)

{   

if(a > b)   

a = a - b;   

else

  b = b - a;  

}

  return a;  

 }   

unsigned char min(unsigned char a, unsigned char b)

{  

 unsigned char k;   

k = ab/M;  

 return k;   

}  

这段程序中资源的分配情况如下:一个全变量M(无符号字符型)存放最大公约数;主函数中定义一个局部变量n(无符号字符型)存放最小公倍数;求最大公约数的函数unsigned char max(unsigned char a, unsigned char b),有两个参数a和b;求最小公倍数的函数unsigned char min(unsigned char a, unsigned char b),有两个参数a和b,并且定义了一个变量k存放函数的返回值。可以由此计算出系统分配给变量的空间。函数的参数和返回值在工作寄存器组中存放,所以不占用0x08地址以后的空间。系统只给变量M和变量n分配存储空间,这两个变量占两个字节(地址为0x08和0x09),则堆栈指针SP应该指向0x09。Cx51系统编译后生成代码的系统资源占用情况如下:全局变量M的地址为0x08,n的地址为0x09,SP的值为0x09。这与我们的计算结果相符。   

3.计算用户需要堆栈的大小。堆栈区到底留多大才算足够呢? Cx51程序设计中,用户需要堆栈的大小可以从普通子函数和中断子程序的嵌套层数来计算。普通子函数的调用比较简单,每次调用时就是将函数的返回地址保存在堆栈中,这个地址占两个字节。函数嵌套调用时,从最内层的子函数算起,总的堆栈需求字节数为嵌套的层数乘以2。中断子程序的堆栈需求分为两种情况:

① 中断子程序使用中断发生前的寄存器组。在中断发生时,保存中断子程序的返回地址需要2个字节。中断发生后,在中断子程序中系统会自动进行如下操作:将ACC、B、DPH、DPL、PSW、R0~R7共13个寄存器压栈。加上中断返回地址,中断的堆栈需求为15个字节。

② 中断子程序使用自己专用的寄存器组。这种情况下不需要保存R0~R7的内容,可以减少堆栈需求,其他的内容仍需要压栈保护。中断发生时,保存中断子程序的返回地址需要2个字节。中断发生后,在中断子程序中系统会自动进行如下操作:将ACC、B、DPH、DPL、PSW共5个寄存器压栈。加上、中断返回地址,这种堆栈的需求为7个字节。但是这种情况应该注意:如果中断子程序中调用子函数,且函数需要参数和返回值,则被调用的子函数和中断子程序要使用相同的寄存器组,否则会出现不可预料的后果。

以一个温度测试系统为例。系统采用8051作为处理器,温度信号在A/D转换结束后通过外部中断0提醒单片机接收处理。定时中断0作为监控程序,中断周期为20 ms。温度信号可以自动测量(每秒一次)或者手动测量(按测量键后测量),这两种测量方法可以通过控制键切换。中断子程序和普通子函数的嵌套情况为:在定时中断程序中调用显示子程序,外部中断0内部没有函数调用。

部分程序如下:

void int0(void) interrupt 0 using 1

{

   读取转换数据;

   数据处理;  

}

void time0 (void) interrupt 1

{

   计数值重装;   

读键;

按键处理;

leddisp(adat);//显示

}

void main (void)

{

 相关数据初始化和数码显示自检;   

外部中断和定时器初始化设置;

单片机休眠;

}

void leddisp(unsigned char pt)

{

  用串口工作方式0发送显示数据,并经过74LS164转换后静态显示;   

}

接下来分析这段程序的最大堆栈需求。假设定时器0中断时,调用了显示函数void leddisp(unsigned char pt),在调用显示函数时A/D转换结束发生了外部中断0的中断。这时应该是程序对堆栈的最大需求,堆栈的大小是:定时器0(15字节)+显示函数(2字节)+外部中断0(7字节)=24字节。  

结语:通过精确的计算编译系统分配给用户的堆栈空间和用户自己最大的堆栈需求,不仅能从根本上解决堆栈溢出的问题,还可以很好地安排单片机比较紧张的资源。此外,通过在片内存储器存放适量局部变量,还可以有效地提高软件的执行速度。

转自:Bingoo&Echo - 博客园

围观 782

如何确定晶振正常起振?

1、判断方法很多,用示波器看波形是最直接的,用数字万用表的电压档测电压也行,因晶振波形的占空比为50%,所以测得的平均电压为1/2Vcc左右,对于51单片机,在使用外置程序存储器的时候还可以测PSEN引脚或P0口引脚的电压或波形,只有晶振电路正常工作,那些引脚才会有信号输出,但现在很少采用片外扩展存储器,所以测晶体两端的电压或波形即可,只是晶振电路设计不良时,测试设备的引入有可能导致停振。

2、晶体两端的电压差不是平均电压差,虽然事实上因外电路的影响,晶体两端的电压可能会有差别,但这不是判断晶振是否起振的依据,也不是晶振电路正常工作的条件。至于一高一低没有工作是指一端为Vcc或接近Vcc,另一端为0或接近0,这时晶振电路当然没有起振,否则50%的占空比势将平均电压拉到1/2Vcc左右,但这么表达是不确切的,搞技术应该尽量定量精确描述。

3、听声音判断晶振是否起振不可靠,晶体的振荡频率远超人耳能够听见的频率上限,有时能够听到反而是有问题的,说明晶体质量不佳,更多的时候,正常工作的晶体是不会发出任何人耳能听到的声音的,有时声音来自外电路元件

4、单片机的两个信号输入脚一个是19脚(XTAL1)一个是18脚(XTAL2)对应单片机内部的电路是高增益放大器,当外面接晶振的时候,19脚对应高增益放大器的输入端,18脚对应高增益放大器的输出端,所以你测量的时候应该是高增益输出端有信号也就是18脚

51单片机振荡电路?

在MCS-51单片机片内有一个高增益的反相放大器,反相放大器的输入端为XTAL1,输出端为XTAL2,由该放大器构成的振荡电路和时钟电路一起构成了单片机的时钟方式。根据硬件电路的不同,单片机的时钟连接方式可分为内部时钟方式和外部时钟方式,如图所示

51单片机不能正常起振的原因
(a)内部方式时钟电路 (b)外接时钟电路

51单片机不能正常起振的原因
内部时钟原理图 (就是一个自激振荡电路)

在内部方式时钟电路中,必须在XTAL1和XTAL2引脚两端跨接石英晶体振荡器和两个微调电容构成振荡电路,通常C1和C2一般取30pF,晶振的频率取值在1.2MHz~12MHz之间。对于外接时钟电路,要求XTAL1接地,XTAL2脚接外部时钟,对于外部时钟信号并无特殊要求,只要保证一定的脉冲宽度,时钟频率低于12MHz即可。

晶体振荡器的振荡信号从XTAL2端送入内部时钟电路,它将该振荡信号二分频,产生一个两相时钟信号P1和P2供单片机使用。时钟信号的周期称为状态时间S,它是振荡周期的2倍,P1信号在每个状态的前半周期有效,在每个状态的后半周期P2信号有效。CPU就是以两相时钟P1和P2为基本节拍协调单片机各部分有效工作的。

转自:单片机精讲吴鉴鹰

围观 435

51单片机的外部中断有两种触发方式可选:电平触发和边沿触发。选择电平触发时,单片机在每个机器周期检查中断源口线,检测到低电平,即置位中断请求标志,向CPU请求中断。选择边沿触发方式时,单片机在上一个机器周期检测到中断源口线为高电平,下一个机器周期检测到低电平,即置位中断标志,请求中断。

这个原理很好理解。但应用时需要特别注意的几点:

1)电平触发方式时,中断标志寄存器不锁存中断请求信号。也就是说,单片机把每个机器周期的S5P2采样到的外部中断源口线的电平逻辑直接赋值到中断标志寄存器。标志寄存器对于请求信号来说是透明的。这样当中断请求被阻塞而没有得到及时响应时,将被丢失。换句话说,要使电平触发的中断被CPU响应并执行,必须保证外部中断源口线的低电平维持到中断被执行为止。因此当CPU正在执行同级中断或更高级中断期间,产生的外部中断源(产生低电平)如果在该中断执行完毕之前撤销(变为高电平)了,那么将得不到响应,就如同没发生一样。同样,当CPU在执行不可被中断的指令(如RETI)时,产生的电平触发中断如果时间太短,也得不到执行。

2)边沿触发方式时,中断标志寄存器锁存了中断请求。中断口线上一个从高到低的跳变将记录在标志寄存器中,直到CPU响应并转向该中断服务程序时,由硬件自动清除。因此当CPU正在执行同级中断(甚至是外部中断本身)或高级中断时,产生的外部中断(负跳变)同样将被记录在中断标志寄存器中。在该中断退出后,将被响应执行。如果你不希望这样,必须在中断退出之前,手工清除外部中断标志。

3)中断标志可以手工清除。一个中断如果在没有得到响应之前就已经被手工清除,则该中断将被CPU忽略。就如同没有发生一样。

4)选择电平触发还是边沿触发方式应从系统使用外部中断的目的上去考虑,而不是如许多资料上说的根据中断源信号的特性来取舍。

来源:网络

围观 356

定时/计数器结构(T0和T1)
51单片机 | 定时/计数器原理及结构
16位寄存器T0、T1分别由TH0、TL0和TH1、TL1四个8位计数器组成

  • 定时器的区别:

    • T0可分成2个独立的8位定时器,而定时器1则不能;
    • T1可作为串口的波特率发生器,而定时器0则不能。
  • 工作原理

    • 用途:定时器和计数器
    • 核心:加1计数器
    • 原理:每来一个脉冲则加1计数器加1,当加到全1时再来一个脉冲使加1计数器归零,同时加1计数器的溢出使TCON寄存器中的TF0(或TF1)置1,向CPU发出中断请求
    • 脉冲来源:

      • 定时器:脉冲来源是由系统的时钟晶振器输出脉冲源提供
      • 计数器:脉冲来源是由T0或T1引脚(P3.4或P3.5)输入的外部脉冲源提供

注:T0或T1都不能同时既做定时器也做计数器

补充:

  • 计数器工作原理:

    用作计数器时,对T0或T1引脚的外部脉冲计数,如果前一个机器周期采样值为1,后一个机器周期采样值为0 ,则说明有一个脉冲,计数器加1。

    在每个机器周期的S5P2期间采样引脚输入电平。新的计数初值于下一个机器周期的S3P1期间装入计数器。

    此种方式需要两个机器周期来检测一个1->0负跳变信号,因此最高的计数频率为时钟频率的1/24。

  • S5P2:

    S5P2指的是第5个时钟周期的相位2。

    晶体振荡器的振荡信号从XTAL2端输入到片内的时钟发生器上,时钟发生器是一个二分频触发器电路,它将振荡器的信号频率除以2,向CPU提供了两相时钟信号P1和P2。时钟信号的周期称为机器状态时间S,它是振荡周期的2倍。在每个时钟周期(即机器状态时间S)的前半周期,相位1(即P1信号)有效,在每个时钟周期的后半周期,相位2(即P2信号)有效。

使用的寄存器

  • TCON控制寄存器:启动和停止定时/计数器的计数,并控制定时器的工作状态,不能按位寻址
  • 51单片机 | 定时/计数器原理及结构
  • TMOD方式寄存器:设置定时器的工作方式,选择定时或计数的功能,可以按位寻址。(和中断共用寄存器,高四位为定时计数器使用,低四位为中断使用)
  • 51单片机 | 定时/计数器原理及结构51单片机 | 定时/计数器原理及结构

    注:GATE逻辑结构此处略过

工作方式:

  • 方式0
    • 计算公式:
      51单片机 | 定时/计数器原理及结构
    • 最大计数:8192个机器周期
    • 工作原理:
      13位计数器,使用TL0的低5位和TH0的高8位组成,TL0的低5位溢出时向TH0进位。TH0溢出时发出中断请求。
      51单片机 | 定时/计数器原理及结构
  • 方式1
    • 计算公式:
      51单片机 | 定时/计数器原理及结构
    • 最大计数:65536个机器周期
    • 工作原理:
      16位计数器,TL0作为低8位,TH0作为高8位
      51单片机 | 定时/计数器原理及结构
  • 方式2:自动重装初值的8位计数方式
    • 计算公式:
      p.s.晶振频率必须选择12的整数倍,因为定时器的频率是晶振频率的1/12。
      51单片机 | 定时/计数器原理及结构
    • 最大计数:256个机器周期
    • 优点:
      适合做比较精准的脉冲信号发生器
    • 缺点:
      51单片机 | 定时/计数器原理及结构
    • 工作原理:
      计数器溢出后,计数器自动将上次设置的初值重装。
      51单片机 | 定时/计数器原理及结构
  • 方式3:p.s.只能用于定时/计数器T0,T0工作在方式3时,T1不要使用在有中断的场合。通常该种情况下T1用作串口波特率发生器
    • 工作原理:
      将T0分成两个独立的8位定时/计数器TL0和TH0。

      TL0为正常的8位定时/计数器,计数器溢出后置位TF0,申请中断,之后重装初值。

      TH0也是8位定时/计数器,但由于TL0占用了TF0和TR0,因此TH0占用定时器TF1和TR1(所以T1不能用)
      51单片机 | 定时/计数器原理及结构

时钟周期/机器周期计算:
51单片机 | 定时/计数器原理及结构

定时/计数器初始化

  • 对TMOD赋值,确定T0和T1的工作方式
  • 计算初值,并将其写入TH.x和TL.x
  • 使用中断方式时对IE寄存器赋值开发中断
  • 使TR0或TR1置位,启动定时/计数器

转自: hugh.dong

围观 276

近年来,电子门禁系统发展非常迅速,按照其开门方式可以分为3类:密码识别、卡片识别和生物识别。
  
无线射频识别技术(RFID)在门禁系统中得到广泛的应用,本例中以使用工作频率为125KHz的射频ID卡和密码识别相结合的门禁系统为例,说明单片机控制门禁系统的原理及应用。
  
本门禁系统主要应用于居民小区的居民楼,其工作原理如下:当有人要进入时,可以通过以下两种方式实现:

一是通过在门禁处主机上刷卡,当该卡为门禁系统中存在的ID卡时,门可以打开,否则,语音提示该卡不存在;

二是输入房间号码+密码的方式开门,若有访客要进入时,访客可以提前和住户联系,获得住户的房间号和密码,当访客输入正确的房间号和密码后,楼宇门可以打开,否则提示密码错误。

系统的结构图如下图所示。

基于51单片机控制门禁系统的设计

系统包括门禁管理机、门禁处主机以及上位管理机。
  
门禁管理机主要完成门禁系统发卡、挂失卡以及与PC机通信等操作,硬件电路包括:
  
CPU、射频卡读卡器电路、RS-485通信电路、电源电路等。
  
门禁处主机完成对进入楼宇门的控制及判断操作,另外需要与PC机通信,获得系统中存在的ID卡编号及其他信息。硬件电路包括:CPU、电源电路、键盘显示电路、射频卡读卡器电路、存储器电路、语音电路、电磁锁控制电路等。
    
1.门禁主机硬件设计
  
门禁主机由CPU、键盘显示电路、存储器、射频卡读卡器、通信电路、语音电路和电源电路等组成。原理框图如下图所示。
基于51单片机控制门禁系统的设计

(1)增强型51单片机。
  
单片机选用体积小、功能强、存储器容量大的C8051F340。该单片机是一款完全集成的混合信号片上系统型MCU,片上有4352字节的RAM(256B片内RAM和4KB片外RAM),多达64KB的片内Flash存储器,具有一个内部可编程高速振荡器,可以作为系统时钟使用,片内集成了看门狗定时器功能,只需要极少的外围电路就可以构成单片机最小应用系统,电路设计简单,可以提供较多的I/O口,可以灵活配置中断引脚及I/O口的输入/输出方式。
  
(2)存储器电路。
  
由于在系统中要存储一定数量的射频ID卡号、开门记录以及其他的信息,所需要的存储器空间比较大,存储器选用Flash型的AT45DB041D存储器,这是单一2.7V~3.6V电源供电串行接口Flash存储卡,适用于系统内重复编程,它共有4325376bit内存,分为2048页,每页为264字节;在主内存之外AT45DB041D还有两个SRAM数据缓存,每个264字节,缓存使得主内存的一页正在编程的同时可以接收数据。与用多条地址线和一个并行接口随机访问的传统Flash存储器不同,其数据闪存DataFlash采用串行接口顺序访问数据,这种简单的串行接口方便了硬件布局,增强了系统灵活性。存储器电路原理如下图所示。
  
AT45D041D为SPI总线的器件,在系统中使用单片机管脚模拟SPI总线的方式实现了对存储器芯片的读写操作。
基于51单片机控制门禁系统的设计

(3)键盘显示电路。
  
键盘显示电路采用专用的控制芯片HD7279A来驱动,该芯片最多能驱动8位共阴极数码管及64个键盘,单片即可完成LED显示、键盘接口的全部功能,使设计的电路更加简洁。
  
HD7279A同样也是SPI总线的器件,在键盘显示电路中也是通过单片机管脚模拟SPI总线的方式实现对HD7279A的操作。键盘显示电路原理如下图所示。键盘显示由8个数码管以及13个按键组成,其中的12个键为10个数字键、“*”建和“#”键,另外1个按键作为楼道内开门的按键使用。
基于51单片机控制门禁系统的设计

(4)语音电路。
  
在本系统中对语音质量要求不高,而且语音提示信息不是很长,我们选用了价格低廉的APLUS公司生产的语音芯片AP89170,这是一款OTP的语音芯片,声音的最大存储长度可以达到170s,芯片可以最多存储254个语音片段。功率放大电路采用专用的语音放大器LM386,该放大器的增益可以调整,在使用过程中比较灵活。语音电路原理如下图所示。
基于51单片机控制门禁系统的设计

(5)射频卡读卡器电路。
  
本例中门禁系统使用工作频率为125kHz的EM4100卡作为系统使用的射频卡。125kHz的射频卡读卡器电路可以由模拟电路和集成电路芯片电路两种方式实现。由于模拟电路设计复杂、调试难度大,所以系统的射频卡读卡器电路选用专用的低成本读卡器芯片U2270B实现,这是由美国TEMIC公司生产的、发射频率为125kHz的射频卡基站芯片,其载波振荡器能产生l00kHz~150kHz的振荡频率,其典型应用频率为125kHz,此时,典型数据传输速率为Skbit/s,典型读写距离为15cm。适用于曼彻斯特编码和双相位编码,并带有微处理器接口,可与单片机直接连接。另外,供电方式灵活,可以采用+5V直流供电,也可以采用汽车用+12V供电,同时具有电压输出功能,可以给微处理器或其他外围电路供电。具有低功耗待机模式,可以极大地降低基站的耗电量。其典型的应用电路原理如下图所示。
基于51单片机控制门禁系统的设计

图中Fl为射频卡读卡器天线线圈,线圈的电感值为680μH,使用漆包线缠绕制成,单片机通过P0.0读出U2270B送出的ID卡号。

作者:宏源祥147
转自:
广电电器网

围观 829

位数指CPU处理的数据的宽度,参与运算的寄存器的数据长度。

如果总线宽度与CPU一次处理的数据宽度相同,则这个宽度就是所说的单片机位数。

如果总线宽度与CPU一次处理的数据宽度不同:

(1)总线宽度小于CPU一次处理的数据宽度,则以CPU的数据宽度定义单片机的位数,但称为准多少位。比如著名的Intel 8088,CPU是16位但总线是8位,所以它是准16位。

(2)总线宽度小于CPU一次处理的数据宽度,则以CPU的数据宽度定义单片机的位数。

少位宽不是指总线宽度,也不是存储器的宽度,像51单片机的地址总线是16位的,但是它是8位机。像ARM的存储器也有八位的,但是它是32位机。而是指CPU处理的数据的宽度,也就是CPU一次数据的吞吐量。比如同一条指令:MOV R0 R2

在51单片机里面,R0和R2都是8位的,所以51的CPU一次只能处理8位数据。

在ARM里面,R0和R2是32位的,所以ARM的CPU一次能处理32位数据。这就是区别。

有啥复杂的, 一句话:参与运算的寄存器的数据长度。

8位单片机的数据总线宽度为8位,通常直接只能处理8位数据;

16位单片机的数据总线宽度为16位,通常可直接处理8位或16位数据。

最本质的区别是内部CPU的字长不同,即CPU处理数据的最大位数不同,有8位和16位CPU的区别,你可以认为是ALU、寄存器的字长等。有的32位DSP芯片其外部接口数据总线是16位的,根据这个来判断是不行的

速度上有区别,取决于CPU、寄存器的字长。8位单片机不能直接处理16位数据,要按照8位数据来处理,要分几个过程来完成。而16位单片机,可直接处理16们数据,因为其ALU,寄存器等都是16位的,可一次完成8位单片机要多步完成的动作,特别是对于数据处理,16位单片机有它的优势。而且16位单片机大多数据接口都为16位。

说简单了就是16位的比8位快,8位的单片机发展时间长,且价格偏低。最重要的是在许多的应用场合能够胜任开发的任务。16位的单片机在功能上要比8位的强大很多,只在需要的场合使用。

你知道2进制吧,你是否知道单片机在进行计算的时候统统是2进制数的运算。所以8位单片机和16位单片机的最根本区别就是,8位单片机可以同时进行2个8位的2进制数相加,而16位单片机则大一倍,可以同时让2个16位的2进制数相加。

CPU能同时处理二进制数的位数是多少位,就称其是多少位的计算机。也有数据总线的位数是CPU位数的一半的情况,就称其是准多少位的计算机。比如CPU是16位,数据总线也是16位,则是16位计算机;CPU是16位,数据总线也是8位,则是准16位计算机。

原来是16位单片机想改用8位的替代是可以的,但电路及程序都要做相应改变,并且改为8位机后,在功能和速度上要能够满足你工作的需要才行。

来源: 嵌入式资讯精选

围观 392

在51单片机的学习过程中,我们经常会发现中断、计数器/定时器、串口是学习单片机的难点,对于初学者来说,这几部分的内容很难理解。但是我个人觉得这几部分内容是单片机学习的重点,如果在一个学期的课堂学习或者自学中没有理解这几部分内容,那就等于还没有掌握51单片机,那更谈不上单片机的开发了,我们都知道在成品的单片机项目中,有很多是以这几部分为理论基础的,万年历是以定时器为主的,报警器是以中断为主的,联机通讯是以串口为主的。

计数器和定时器的本质是相同的,他们都是对单片机中产生的脉冲进行计数,只不过计数器是单片机外部触发的脉冲,定时器是单片机内部在晶振的触发下产生的脉冲。当他们的脉冲间隔相同的时候,计数器和定时器就是一个概念。

在定时器和计数器中都有一个溢出的概念,那什么是溢出了。呵呵,我们可以从一个生活小常识得到答案,当一个碗放在水龙头下接水的时候,过了一会儿,碗的水满了,就发生溢出。同样的道理,假设水龙头的水是一滴滴的往碗里滴,那么总有一滴水是导致碗中的水溢出的。在碗中溢出的水就浪费了,但是在单片机的定时计数器中溢出将导致一次中断,至于什么是中断我们下次再讲,这里只是初步的提下概念,中断就是能够打断系统正常运行,而去运行中断服务程序的过程,当服务程序运行完以后又自动回到被打断的地方继续运行。

在定时器计数器中,我们有个概念叫容量,就是最大计数量。方式0是2的13次方,方式1是2的13次方,方式2是2的8次方,方式3是2的8次方。把水滴比喻成脉冲,那么导致碗中水溢出的最后一滴水的就是定时计数器的溢出的最后一个脉冲。

在各种单片机书本中,在介绍定时计数器时都讲到一个计数初值,那什么是计数初值呢?在这里我们还是假设水滴碗。假设第一百滴水能够使碗中的水溢出,我们就知道这个碗的容量是100。问题1,我如何才能使碗接到10滴水就溢出呢?呵呵,我可以想象,如果拿一个空碗去接水,那么还是得要100滴水才能溢出,但是如果我们拿一个已经装有水的碗拿去接,那就不用100滴了。到此我们可以算出,要使10滴水让碗中的水溢出,那么碗中就先要装90滴水。

在定时计数器中,这90滴水就是我们所谓的初始值。问题2,在一个车间我们如何利用单片机对100件产品进行计件,并进行自动包装呢?

我们可以利用计数器计数100,在中断中执行一个自动包装的动作就可以了。

在这里计数初值有3个,假设有方式0:计数初值=8912(2的13次方)—100=8812。方式1:计数初值=65536(2的16次方)—100=65436。方式0:计数初值=256(2的8次方)—100=156。

根据所得的初始值,再将其转换为16进制或者2进制,就可以进行计数或者定时了。当然要让程序完全的运行起来还需要相应的寄存器进行设置。

来源:网络

围观 363

这里不说步进电机的 "细分" 实验,只说一下有关步进电机的基础概念以及步进电机的三种工作方式——单拍、双拍、单双拍,现在步进电机的编程一般都要用到专门的步进电机驱动芯片(如:L6219芯片),所以具体的编程下次再讲。先说一下相、线和极性。

一:线、相、极性

"相" 就是说明步进电机有几个线圈(也叫做绕组)。

"线" 就是说明步进电机有几个接线口。

"极性" 分为 单极性 和 双极性。如果步进电机的线圈是可以双向导电的,那么这个步进电机就是双极性的,相反,如果步进电机的线圈是只允许单向导电的,那么这个步进电机就是单极性的。

上面的三个只要知道其中两个,就可以推断出第三个。

如:

五线四相步进电机 就是有5个接线口,4个线圈。

由于有五个接线头,即接线头的个数是奇数个,也就是说有一个接线头是公共接头,所以它的线圈的导电方式就只允许是 单向的 ,即这个步进电机是单极性的。如下图:

51单片机--巧记步进电机相关知识

四线双极性步进电机就是有4个接线口,导电方式是允许双向的。

由于有四个接线口,且导电方式是双向的,所以这个步进电机是两相的。

51单片机--巧记步进电机相关知识

二、步进电机的步进方式:单拍、双拍、单双拍

1、单拍:(单四拍工作方式)

单拍工作方式就是说每次只给一个线圈通电,通过改变每次通电的线圈从而使步进电机转动。

先说五线四相步进电机,假设它的四个线圈叫做 A、B、C、D,那么在单拍工作方式下,线圈的通电方式依次是:A、B、C、D;

然后是四线双极性步进电机,假设它的两个线圈叫做 A、B,那么在单拍工作模式下,线圈依次是:A、B、-A、-B;

【注】A、B指的是A、B线圈通正向电流,-A、-B指的是A、B线圈通反向电流。由于五线四相步进电机无法通反向电流,所以只有A、B、C、D。

当然上面说的都仅仅只是理论,我们记忆的话自然有简便方法:

下面是五线四相步进电机:

51单片机--巧记步进电机相关知识

下面是四线双极性步进电机:
51单片机--巧记步进电机相关知识

2、双拍:(双四拍工作方式)

双拍工作方式就是:每次给两个线圈通电,通过改变通电的线圈从而使步进电机转动。
五线四相步进电机:在双拍工作方式下,线圈的通电方式依次是:AB、BC、CD、DA;
四线双极性步进电机,在双拍工作模式下,线圈的通电方式依次是:AB、B-A、-A-B、-BA;
大家很容易找出规律吧。

3、单双拍(八拍工作方式)

单双拍工作方式就是单拍工作方式和双拍工作方式交替进行。

五线四相步进电机:A、AB、B、BC、C、CD、D、DA;

四线双极性步进电机:A、AB、B、B-A、-A、-A-B、-B、-BA;

大家只要对照上面我画的那张图,就可以会很容易的记住了。

最后再说一下步距角:

51单片机--巧记步进电机相关知识

步距角一般用在步进电机的高级应用中,我们初学者(我也是初学者)一般还不用考虑,我只是为了讲解全面一些加上了步距角,大家有兴趣的可以看看上面的图片。

好了,有关步进电机的相关基础就说到这里了。

转自: :C博客:飞鸟丶岚

围观 462

页面

订阅 RSS - 51单片机