MCP定时器产生中心对称PWM输出:PWM波是一种脉宽可调的脉冲波,用于交、直流电机的电压控制。PWM一共有两种调整方法,一是定频调宽、另一种是定宽调频。其中定频调宽是种最常见的脉宽调制方式,它使脉冲波的频率保持不变,只调整脉冲宽度。同时定频调宽的PWM波形也分为两种,一种是单边的PWM,另一种是中心对称的双边PWM。中心对称的PWM主要应用在需要对称PWM波形的场合,如半桥、全桥的双极性驱动等。中心对称的PWM的生成原理如图1-2所示:定时计数器工作在连续增减计数方式,在计数初值设置为0且比较值小于周期值的条件下,当增计数过程中计数值和比较值匹配时置位输出,而在周期匹配时会改计数方向为减计数,当减计数过程中计数值和比较值匹配时复位输出,当减计数到零时会改计数方向为增计数,开始下一个循环。因此中心对称的PWM的周期为设定周期的二倍,占空比为:%100))((×−TPRNTPR(N为比较匹配数据,TPR为周期寄存器的值)。比较值的改变会影响PWM的两边的波形,并且两边相对高电平的中心对称,这便是中心对称双边PWM波形的特点。如果比较值为零,那么PWM将一直输出高电平;如比较值大于等于周期值,则PWM会一直输出低电平,占空比为0。
上传时间: 2013-11-13
上传用户:sammi
MCP定时器产生边沿PWM输出:PWM波是一种脉宽可调的脉冲波,用于交、直流电机的电压控制。PWM一共有两种调整方法,一是定频调宽、另一种是定宽调频。其中定频调宽是种最常见的脉宽调制方式,它使脉冲波的频率保持不变,只调整脉冲宽度。同时定频调宽的PWM波形也分为两种,一种是单边的PWM,另一种是中心对称的双边PWM。单边的PWM的生成原理如图1-2:定时计数器工作在增计数方式,在计数初值设置为0且比较值小于周期值的条件下,当计数值和比较值匹配时置位输出,而在周期匹配时复位输出,同时清零计数器,开始下一个循环。因此单边PWM的占空比为:%100))((×−TPRNTPR(N为比较匹配数据,TPR为周期寄存器的值)。比较值的改变只影响PWM的单边波形,这便是单边PWM波形的特点。如果比较值为零,那么PWM将一直输出高电平;如比较值同周期值相等,则PWM会输出一个时钟周期的低电平,占空比近似为0;当比较值大于周期值,那么PWM将一直输出低电平。
上传时间: 2013-11-07
上传用户:moerwang
51单片机设置软件工具:51单片机设置软件工具可以进行波特率,定时器,TO/T1方式控制,串口工作方式,T2控制,中断开关,中断优先级,电源模式,T2波特率,8252狗/EE,8252PL等功能。
上传时间: 2013-11-04
上传用户:thuyenvinh
单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为 CPU可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51 单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil 软件是目前最流行开发MCS-51 系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil 即可看出。Keil 提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。运行Keil 软件需要Pentium 或以上的CPU,16MB或更多RAM、20M 以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。掌握这一软件的使用对于使用51 系列单片机的爱好者来说是十分必要的,如果你使用C 语言编程,那么Keil 几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件),即使不使用C 语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。我们将通过一些实例来学习 Keil 软件的使用,在这一部份我们将学习如何输入源程序,建立工程、对工程进行详细的设置,以及如何将源程序变为目标代码。图1 所示电路图使用89C51 单片机作为主芯片,这种单片机性属于MCS-51 系列,其内部有4K 的FLASH ROM,可以反复擦写,非常适于做实验。89C51 的P1 引脚上接8 个发光二极管,P3.2~P3.4 引脚上接4 个按钮开关,我们的第一个任务是让接在P1 引脚上的发光二极管依次循环点亮。
上传时间: 2013-11-06
上传用户:aesuser
设置复位标志位便于区分不同原因引发的复位,作为一种新技术被越来越多的新型单片机所采纳。例如Philips公司的P87LPC700和 P89LPC900系列、Freescale公司(原Motorola半导体部)的MC68HC05系列和MC68HC08系列、Sunplus公司的 SPMC65系列、Microchip公司的PIC系列等,内部都设计了专门用于记录各种复位标志的状态寄存器。MC68HC08系列有一个复位状态寄存器,负责记录6种复位标志位:上电复位、引脚复位、看门狗复位、非法指令复位、非法地址复位和欠压复位。SPMC65系列有一个系统控制寄存器,负责记录5种复位标志位:上电复位、外部复位、看门狗复位、非法地址复位和欠压复位。51兼容的P89LPC900系列有一个复位源寄存器,负责记录6种复位标志位:欠压复位、上电复位、外部复位、看门狗复位、软件复位和UART收到间隔字符复位(主要作为进入ISP监控程序的途径之一)。就连初学者很常用的 AT89S51/52和P89C52X2,也在其电源控制寄存器PCON中增设了一个上电标志位POF。1、 复位标志位的设置方法传统的80C51单片机没有设计复位标志位的记录功能,这应该说是一种遗憾,那么能否通过一定的技术手段来弥补这个缺憾呢?这里给广大80C51单片机用户提供一种启示和引导。实现复位标志位的记录肯定需要一定的硬件电路支持,而这种电路的设计不存在固定模式。笔者利用一片MAX813L设计了一种支撑电路,如图1所示,仅供读者参考。
上传时间: 2013-10-21
上传用户:lhw888
15-1.实现定时的方法15-2.定时器/计数器的结构和工作原理 15-3.定时器/计数器的控制15-4.定时器/计数器的工作方式 15-5.定时器/计数器应用 软件定时软件延时不占用硬件资源,但占用了CPU时间,降低了CPU的利用率。例如延时程序。采用时基电路定时例如采用555电路,外接必要的元器件(电阻和电容),即可构成硬件定时电路。但在硬件连接好以后,定时值与定时范围不能由软件进行控制和修改,即不可编程,且定时时间容易漂移。可编程定时器定时最方便的办法是利用单片机内部的定时器/计数器。结合了软件定时精确和硬件定时电路独立的特点。定时器/计数器的结构 定时器/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。TMOD是定时器/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。
上传时间: 2014-12-28
上传用户:rnsfing
第一部分:硬件结构和安装方法 将组装好的编程器主板用串口电缆连接到计算机COM1口上,连接好电源线,电源使用的是15V交流电或12V直流电。具体连接方法可以参考装配说明书。加电后指示灯闪烁,表明电路工作正常。如果能联机成功,表明编程器已通过了自检,可以开始编程操作了。注意:指示灯持续亮的时候,表明正在读写,这时不能插拔芯片。编程器使用中途不能断电,如断电再次加电时,不能联机。需要重启动计算机。再次启动编程器软件。第二部分:软件的安装设置将光盘上51PROG子目录拷贝到计算机硬盘上,为使用方便,可以将PROFLASH.BAT命令建一个快捷方式在桌面上。然后需要设置计算机串口COM1通讯波特率,步骤如下:单击鼠标左键,选择“开始”---〉单击“设置”---〉单击“控制面板”---〉双击“系统”---〉单击“设备管理器”---〉双击“端口(COM&LPT)--->选择“通讯端口COM1”如下图一所示
标签: 51编程器
上传时间: 2013-11-12
上传用户:zzbbqq99n
串行编程器源程序(Keil C语言)//FID=01:AT89C2051系列编程器//实现编程的读,写,擦等细节//AT89C2051的特殊处:给XTAL一个脉冲,地址计数加1;P1的引脚排列与AT89C51相反,需要用函数转换#include <e51pro.h> #define C2051_P3_7 P1_0#define C2051_P1 P0//注意引脚排列相反#define C2051_P3_0 P1_1#define C2051_P3_1 P1_2#define C2051_XTAL P1_4#define C2051_P3_2 P1_5#define C2051_P3_3 P1_6#define C2051_P3_4 P1_7#define C2051_P3_5 P3_5 void InitPro01()//编程前的准备工作{ SetVpp0V(); P0=0xff; P1=0xff; C2051_P3_5=1; C2051_XTAL=0; Delay_ms(20); nAddress=0x0000; SetVpp5V();} void ProOver01()//编程结束后的工作,设置合适的引脚电平{ SetVpp5V(); P0=0xff; P1=0xff; C2051_P3_5=1; C2051_XTAL=1;} BYTE GetData()//从P0口获得数据{ B_0=P0_7; B_1=P0_6; B_2=P0_5; B_3=P0_4; B_4=P0_3; B_5=P0_2; B_6=P0_1; B_7=P0_0; return B;} void SetData(BYTE DataByte)//转换并设置P0口的数据{ B=DataByte; P0_0=B_7; P0_1=B_6; P0_2=B_5; P0_3=B_4; P0_4=B_3; P0_5=B_2; P0_6=B_1; P0_7=B_0;} void ReadSign01()//读特征字{ InitPro01(); Delay_ms(1);//----------------------------------------------------------------------------- //根据器件的DataSheet,设置相应的编程控制信号 C2051_P3_3=0; C2051_P3_4=0; C2051_P3_5=0; C2051_P3_7=0; Delay_ms(20); ComBuf[2]=GetData(); C2051_XTAL=1; C2051_XTAL=0; Delay_us(20); ComBuf[3]=GetData(); ComBuf[4]=0xff;//----------------------------------------------------------------------------- ProOver01();} void Erase01()//擦除器件{ InitPro01();//----------------------------------------------------------------------------- //根据器件的DataSheet,设置相应的编程控制信号 C2051_P3_3=1; C2051_P3_4=0; C2051_P3_5=0; C2051_P3_7=0; Delay_ms(1); SetVpp12V(); Delay_ms(1); C2051_P3_2=0; Delay_ms(10); C2051_P3_2=1; Delay_ms(1);//----------------------------------------------------------------------------- ProOver01();} BOOL Write01(BYTE Data)//写器件{//----------------------------------------------------------------------------- //根据器件的DataSheet,设置相应的编程控制信号 //写一个单元 C2051_P3_3=0; C2051_P3_4=1; C2051_P3_5=1; C2051_P3_7=1; SetData(Data); SetVpp12V(); Delay_us(20); C2051_P3_2=0; Delay_us(20); C2051_P3_2=1; Delay_us(20); SetVpp5V(); Delay_us(20); C2051_P3_4=0; Delay_ms(2); nTimeOut=0; P0=0xff; nTimeOut=0; while(!GetData()==Data)//效验:循环读,直到读出与写入的数相同 { nTimeOut++; if(nTimeOut>1000)//超时了 { return 0; } } C2051_XTAL=1; C2051_XTAL=0;//一个脉冲指向下一个单元//----------------------------------------------------------------------------- return 1;} BYTE Read01()//读器件{ BYTE Data;//----------------------------------------------------------------------------- //根据器件的DataSheet,设置相应的编程控制信号 //读一个单元 C2051_P3_3=0; C2051_P3_4=0; C2051_P3_5=1; C2051_P3_7=1; Data=GetData(); C2051_XTAL=1; C2051_XTAL=0;//一个脉冲指向下一个单元//----------------------------------------------------------------------------- return Data;} void Lock01()//写锁定位{ InitPro01();//先设置成编程状态//----------------------------------------------------------------------------- //根据器件的DataSheet,设置相应的编程控制信号 if(ComBuf[2]>=1)//ComBuf[2]为锁定位 { C2051_P3_3=1; C2051_P3_4=1; C2051_P3_5=1; C2051_P3_7=1; Delay_us(20); SetVpp12V(); Delay_us(20); C2051_P3_2=0; Delay_us(20); C2051_P3_2=1; Delay_us(20); SetVpp5V(); } if(ComBuf[2]>=2) { C2051_P3_3=1; C2051_P3_4=1; C2051_P3_5=0; C2051_P3_7=0; Delay_us(20); SetVpp12V(); Delay_us(20); C2051_P3_2=0; Delay_us(20); C2051_P3_2=1; Delay_us(20); SetVpp5V(); }//----------------------------------------------------------------------------- ProOver01();} void PreparePro01()//设置pw中的函数指针,让主程序可以调用上面的函数{ pw.fpInitPro=InitPro01; pw.fpReadSign=ReadSign01; pw.fpErase=Erase01; pw.fpWrite=Write01; pw.fpRead=Read01; pw.fpLock=Lock01; pw.fpProOver=ProOver01;}
上传时间: 2013-11-12
上传用户:gut1234567
可编程计数器/定时器的特点计算机及电子系统中需要定时信号,如系统的日历时钟,动态存储器的刷新,应用系统的定时中断、定时查询与检测等。可编程定时器芯片可以产生精确的时间间隔,形成各种脉冲序列,灵活性强。依所需时间间隔,设置计数器的时间常数,在一外部脉冲驱动下进行减1计数,计数值为0时,产生输出信号,供系统使用。
上传时间: 2013-11-17
上传用户:彭玖华
STC 定时器2 的操作定时器2 是一个16 位定时/ 计数器。通过设置特殊功能寄存器T2CON 中的C/T2 位,可将其作为定时器或计数器(特殊功能寄存器T2CON 的描述如表1 所列)。定时器2 有3 种操作模式:捕获、自动重新装载(递增或递减计数)和波特率发生器,这3 种模式由T2CON 中的位进行选择(如表2 所列)。表1 特殊功能寄存器T2CON 的描述 1.捕获模式2. 自动重装模式(递增/ 递减计数器)3.波特率发生器模式4.波特率公式汇总5.定时器/ 计数器2 的设置6.可编程时钟输出
上传时间: 2013-11-12
上传用户:zhangzhenyu