单片机 占空比可调的PWM波形发生器
浅谈利用单片机设计PWM脉冲信号发生器

浅谈利用单片机设计PWM脉冲信号发生器摘要脉冲宽度调制(PWM)在电子技术领域中应用十分广泛,但是利用模拟电路实现脉宽调制功能十分复杂、不经济。
随着微处理器的发展,运用数字输出方式去控制实现PWM的功能就变得简单快捷,本文就如何利用89S52单片机软件编程设计出周期一定而占空比可调的脉冲波,也就是实现PWM功能进行设计,它可以代替模拟电路的PWM脉冲信号发生器。
关键词单片机 PWM 数字控制PWM是脉冲宽度调制(Pulse Width Modulation)的英文缩写,它是开关型稳压电源中按稳压的控制方式分类中的一种,而脉宽宽度调制式(PWM)开关型稳压电路是在控制电路输出频率不变的情况下,通过电压反馈调整其占空比,从而达到稳定输出电压的目的。
简单的说,PWM是一种对模拟信号电平进行数字编码的方法。
理论上讲就是电压或电流源以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的,通的时候就是电源被加到负载上,断的时候就是供电被断开的时候,所以PWM信号仍然是数字的。
要想达到这样一种脉宽调制效果,模拟电压和电流时可以直接控制。
例如音响的音量控制,在简单的模拟电路中,它的控制是由连接了一个可变电阻的旋钮来实现的,其过程是拧动旋钮,电阻值变小或变大,流过该电阻的电流也随之增加来减小,从而改变驱动扬声器的电流值,那么声音也就相应变大或变小。
从这个例子来看,模拟控制是直观而简单的,但是并不是所有的模拟电路都是可行并且经济的,其中很重要的一点就是模拟电路容易随时间漂移,它的调节过程就很困难,为了解决问题就要增加很多的电路,使得电路变得复杂并且昂贵。
除此之外,模拟电路中许多的元器件会发热,也就相对提高了电路的功耗,并且对噪声也敏感,任何干扰或噪声都会改变电流值的大小。
综上所述,通过数字方式来控制模拟电路可以大幅度降低系统的成本和功耗,而单片机I/O口的数字输出可以很简单地发出一个脉冲波,在配以外部元器件就可以调节脉冲波的占空比,完成PWM的功能。
GYJ-0024 单片机输出PWM信号数码管显示 频率及占空比可调输出 信号发生器

uint8 ci; uint8 ca = 0; uint8 ca1 = 0; uint16 cb = 0;
void key();
//按键函数声明
void ConfigPWM(unsigned int fr, unsigned char dc); //频率和占空比调节函数
void main() {
bit q1 = 1; bit q2 = 1; bit q3 = 1; ca = EEPROMReadByte(0); cb = EEPROMReadByte(1)*255+EEPROMReadByte(2);
ci++;
ssmg();
//数码管扫描
{
} }
if(ci>=2)
ci = 0; key();
【图片展示】
【配套 DIN 底托效果图片展示】
tmp = (11059200/12) / fr; //计算一个周期所需的计数值
high = (tmp*dc) / 100;
//计算高电平所需的计数值
low = tmp - high;
//计算低电平所需的计数值
high = 65536 - high + 12; //计算高电平的重载值并补偿中断延时
} }
void key() {
static uint8 saomiaozhi[] = {1,1,1,1}; saomiaozhi[0] = (saomiaozhi[0]<<1) | in1; saomiaozhi[1] = (saomiaozhi[1]<<1) | in2; saomiaozhi[2] = (saomiaozhi[2]<<1) | in3;
《单片机课程设计说明书》-占空比可调信号发生器

占空比可调信号发生器1 软件介绍1.1proteus软件Proteus ISIS是英国Labcenter公司开发的电路分析与实物仿真软件。
它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:(1)实现了单片机仿真和SPICE电路仿真相结合。
具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
(2)支持主流单片机系统的仿真。
目前支持的单片机类型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。
(3) 提供软件调试功能。
在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVision2等软件。
(4) 具有强大的原理图绘制功能。
总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。
本章介绍Proteus ISIS软件的工作环境和一些基本操作。
特点:支持ARM7,PIC ,AVR,HC11以及8051系列的微处理器CPU模型,更多模型正在开发中:交互外设模型有LCD显示、RS232终端、通用键盘、开关、按钮、LED等;强大的调试功能,如访问寄存器与内存,设置断点和单步运行模式;支持如IAR、Keil和Hitech等开发工具的源码C和汇编的调试;一键“make”特性:一个键完成编译与仿真操作;内置超过6000标准SPICE模型,完全兼容制造商提供的SPICE模型;DLL界面为应用提供特定的模式;基于工业标准的SPICE3F5混合模型电路仿真器14种虚拟仪器:示波器、逻辑分析仪、信号发生器、规程分析仪等;高级仿真包含强大的基于图形的分析功能:模拟、数字和混合瞬时图形;频率;转换;噪声;失真;付立叶;交流、直流和音频曲线;模拟信号发生器包括直流、正旋、脉冲、分段线性、音频、指数、单频FM;数字信号发生器包括尖脉冲、脉冲、时钟和码流;集成PROTEUS PCB设计形成完整的电子设计系统。
pwm波形的生成方法

pwm波形的生成方法
PWM波形的生成方法主要有以下几种:
1. 波形发生器产生PWM:最简单的方式是使用波形发生器,只需要在发生器上设置一下,就能轻易获取想要的PWM。
2. 单片机产生PWM:现在很多单片机都配置了能产生PWM的端口,或者通过单片机的端口进行模拟产生PWM,只需要通过编写一些程序,就能产生出想要的PWM。
3. 可编程逻辑器件产生PWM:以可编程的逻辑器件,如CPLD或FPGA为硬件基础,编写专用程序来产生PWM,这种方式产生的PWM频率、占空比比较准确。
4. 专用PWM芯片产生PWM信号:很多厂家都设计、生产了一些能产生PWM的芯片,使用这些芯片就能很方便产生PWM,也方便应用到产品设计中。
5. 比较式PWM:比较式PWM是最常见的PWM产生方法,它通过比较一个变量信号与一个固定的参考电平来生成PWM信号。
主要包括两个阶段:比较器输出与集成器输出。
比较器是比较式PWM的核心组成部分,由比较器和参考电压组成。
可以将模拟控制信号与一个固定的电压(参考电压)进行比较,从而生成PWM信号。
集成器是比较式PWM的后级,它将比较器输出的脉冲信号进行整形,生成PWM波形。
如果将比较式PWM与单片机
相结合,可以使用定时器/计数器来生成PWM波形。
通过定时器/计数器的控制,可以改变PWM的频率和占空比。
以上内容仅供参考,如需更多信息,建议查阅相关文献或咨询专业人士。
用单片机实现频率可调的PWM控制信号

用单片机实现频率可调的PWM控制信号摘要本文介绍了一种用51系列单片机的定时器来实现频率可调的PWM 信号,提供了一种可靠、有效、灵活的方法,信号准确、稳定,频率和占空比调节方便、直观,电路简单、集成度高,成本低,最高可实现几十KHz频率和占空比可调的PWM信号。
可作为各种需要PWM控制的信号源发生器。
关键词单片机;定时器;频率;PWM;占空比0 引言在嵌入式系统及控制系统中,经常需要产生特定频率和PWM的方波脉冲信号,以便实现精确的控制过程。
在实际应用中,为了达到最佳的控制,往往需要对驱动控制信号的频率和占空比都能够按要求进行调节,也就是需要实现可调频率的PWM控制。
在传统电路中,用555来实现的是比较经典的电路,但通过R、C来调节脉冲时,频率和占空比可调的范围不大,器件的误差带来的影响较大,调节时不直观,调节参数具有一定的离散性,不利于批量生产。
对于需要经常改变参数的情况更不方便。
随着数字技术的不断发展,单片机的性能越来越强,价格也越来越低,51系列作为非常成熟的8位单片机,在国内得到了广泛的应用。
采用51系列单片机除了能完成所需的控制功能外,完全能够实现对方波信号的频率和占空比的调节,不再需要额外的信号发生电路,采用软件控制这种方法,电路简单,调节方便,显示直观,误差小,一致性好,可靠性高。
1 实现原理脉冲宽度调制(PWM)是英文“Pulse Width Modulation”的缩写,它是通过调节方波的占空比来实现的,只要占空比的步进精度足够,就可以通过PWM来实现数字输出信号对模拟电路的有效控制,比如灯光的亮度、流量的控制、开关电源电压的控制等等。
脉冲宽度调制在工业控制、电源变换、测试测量、通信等领域都有广泛的应用。
在一些文献中,产生各种波形信号,采用的是软件延时的方式,但这种方式占用了单片机的处理时间,且精度不易控制,尤其是在调节时计算比较复杂,本文采用的是定时器中断方式,单片机通过中断来产生对应的脉冲信号,还可以同时进行其他输入、输出控制功能,定时器的精度较高,调节时也仅需通过软件调整对应的设置值即可。
51单片机实现PWM波占空比可调

51单片机实现PWM波占空比可调单片机实现PWM波占空比可调的方法有很多种,下面将详细介绍一种常见的实现方式。
PWM(脉冲宽度调制)是一种常用的数字信号调制技术,可以通过改变脉冲的高电平时间来控制电平的占空比,从而实现对信号的调节。
在单片机中,可以使用定时器/计数器模块来生成PWM波,并通过改变计数器的值来调整占空比。
以AT89C51单片机为例,以下是实现PWM功能的步骤:1.设置定时器模式:选择合适的定时器模式来生成所需的PWM信号。
AT89C51单片机有定时器/计数器模块,可以选择模式2,该模式下定时器有自动重装载功能,能够方便地实现周期性的PWM波。
3. 设置PWM参数:根据需要调节的占空比,计算出所需的高电平时间和低电平时间。
通常,PWM波的高电平时间与低电平时间之和等于一个周期的时间(定时器的重装载值)。
例如,如果需要一个占空比为60%的PWM波,周期为20ms,则高电平时间为「20ms * 60% = 12ms」,低电平时间为「20ms - 12ms = 8ms」。
4.设置PWM引脚:选择一个合适的IO口作为PWM波的输出引脚,并在程序中设置该引脚为输出模式。
5.编写中断服务程序(ISR):针对定时器溢出中断(TOF)编写中断服务程序。
每当定时器溢出时,PWM波应该翻转输出引脚的电平,以实现所需的占空比。
6.初始化定时器和中断:在程序初始化阶段,将定时器设为所需的模式,设置中断向量表中的对应中断服务函数,并开启定时器中断。
7.主循环中设置占空比:在主循环中,通过改变定时器的初值来实现不同占空比的调节。
将计算得到的高电平时间和低电平时间分别赋值给定时器初值,即可实现占空比的调整。
通过上述步骤,我们可以实现占空比可调的PWM波。
在实际应用中,可以根据需要进行适当的优化和改进,例如增加输入口的设置,使得用户可以通过外部按键或旋钮来实时调整占空比,从而更加灵活地控制PWM波的输出。
总结:通过合适的定时器模式、初值设置和中断服务程序编写,配合适当的IO口配置和占空比计算,我们可以在单片机中实现占空比可调的PWM波。
51单片机实现PWM波占空比可调

51单片机实现PWM波占空比可调平台:STC89C52名称:本程序为用单片机制作的占空比均匀间隔可调PWM发生器。
占空比可调间隔为0.1。
即可取得占空比为0%,10%,20%……90%到100%的PWM波。
该波的频率固定为1KH(周期1000微秒)。
SY-1学习板上的操作键:S2----占空比加S3----占空比减晶振:11.0592MHZ程序代码:#include<reg52.h>#define uint unsigned intuint pp;char num=2,dis;sbit pwm=P1^0;sbit s2=P3^4;sbit s3=P3^5;sbit dula=P2^6;sbit wela=P2^7;unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};void keyscan(){if(s2==0){while(!s2);num++;if(num==11)num=10;dis=num;}if(s3==0){while(!s3);num--;if(num==-1)num=0;dis=num;}}void display(a){dula=0;P0=table[a];dula=1;dula=0;wela=0;P0=0xfe;wela=1;wela=0;}void main(){TMOD=0x01;//模式设置,00000001,可见采用的是定时器0,工作与模式1(M1=0,M0=1)。
TR0=1;//打开定时器TH0=0Xff;//定时器设置,每隔100微秒发起一次中断。
TL0=0Xa4;ET0=1;//开定时器0中断EA=1;//开总中断while(1){keyscan();if((num!=0)&&(num!=10))//对于占空比为0和100%这两种极端情况,最好分离出,单独考虑{if(pp<=num)pwm=1;elsepwm=0;}else if(num==0)//当占空比为0pwm=0;elsepwm=1;if(pp==10)//当占空比为100%pp=0;display(num);//显示num当前值,占空比为num/10。
用单片机实现频率可调的PWM控制信号

用单片机实现频率可调的PWM控制信号作者:林广峰来源:《科技传播》2010年第12期摘要本文介绍了一种用51系列单片机的定时器来实现频率可调的PWM信号,提供了一种可靠、有效、灵活的方法,信号准确、稳定,频率和占空比调节方便、直观,电路简单、集成度高,成本低,最高可实现几十KHz频率和占空比可调的PWM信号。
可作为各种需要PWM控制的信号源发生器。
关键词单片机;定时器;频率;PWM;占空比中图分类号TP368.1文献标识码A 文章编号 1674-6708(2010)21-0220-020 引言在嵌入式系统及控制系统中,经常需要产生特定频率和PWM的方波脉冲信号,以便实现精确的控制过程。
在实际应用中,为了达到最佳的控制,往往需要对驱动控制信号的频率和占空比都能够按要求进行调节,也就是需要实现可调频率的PWM控制。
在传统电路中,用555来实现的是比较经典的电路,但通过R、C来调节脉冲时,频率和占空比可调的范围不大,器件的误差带来的影响较大,调节时不直观,调节参数具有一定的离散性,不利于批量生产。
对于需要经常改变参数的情况更不方便。
随着数字技术的不断发展,单片机的性能越来越强,价格也越来越低,51系列作为非常成熟的8位单片机,在国内得到了广泛的应用。
采用51系列单片机除了能完成所需的控制功能外,完全能够实现对方波信号的频率和占空比的调节,不再需要额外的信号发生电路,采用软件控制这种方法,电路简单,调节方便,显示直观,误差小,一致性好,可靠性高。
1 实现原理脉冲宽度调制(PWM)是英文“Pulse Width Modulation”的缩写,它是通过调节方波的占空比来实现的,只要占空比的步进精度足够,就可以通过PWM来实现数字输出信号对模拟电路的有效控制,比如灯光的亮度、流量的控制、开关电源电压的控制等等。
脉冲宽度调制在工业控制、电源变换、测试测量、通信等领域都有广泛的应用。
在一些文献中,产生各种波形信号,采用的是软件延时的方式,但这种方式占用了单片机的处理时间,且精度不易控制,尤其是在调节时计算比较复杂,本文采用的是定时器中断方式,单片机通过中断来产生对应的脉冲信号,还可以同时进行其他输入、输出控制功能,定时器的精度较高,调节时也仅需通过软件调整对应的设置值即可。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
河南机电高等专科学校电气工程系微控制器技术课程设计报告设计题目:占空比可调的PWM波形发生器!微控制器技术课程设计任务书设计题目:占空比可调的PWM波形发生器¥设计时间:——设计任务:在Proteus中画出原理图或使用实物,编制程序,实现以下功能:1、理解PWM的工作原理。
2、编制PWM程序,使用八段发光字符管显示占空比。
3、可与电机连接,驱动电机以不同的转速旋转。
背景资料:1、单片机原理与应用2、检测技术]3、计算机原理与接口技术进度安排:1、第一天,领取题目,熟悉设计内容,分解设计步骤和任务;2、第2天,规划设计软硬件,编制程序流程、绘制硬件电路。
3、第3天,动手制作硬件电路,或编写软件,并调试。
4、第4天,中期检查,书写设计报告。
5、第5天,提交设计报告,整理设计实物,等待答辩。
6、第6天,设计答辩。
?题目:占空比可调的PWM波形发生器一、设计目的掌握PWM的工作原理;学会编制PWM程序,使用八段发光字符管显示占空比;并与电机连接,驱动电机以不同的转速旋转。
二、设计思路直流电机PWM控制系统的主要功能包括:实现对直流电机转速的调整,能够很方便的实现电机的智能控制。
主体电路:即直流电机PWM控制模块。
这部分电路主要由AT89C51单片机的I/O端口、定时计数器、外部中断扩展等调整直流电机的转速,能够很方便的实现电机的智能控制。
其间是通过AT89C51单片机产生脉宽可调的脉冲信号并输入到L298驱动芯片来控制直流电机工作的。
该直流电机PWM控制系统由以下电路模块组成:设计输入部分:这一模块主要是利用带中断的独立式键盘来实现对直流电机的加速、减速控制。
设计控制部分:主要由AT89C51单片机的外部中断扩展电路组成。
直流电机PWM控制实现部分主要由一些二极管、电机和L298直流电机驱动模块组成。
设计显示部分:LED数码显示部分,实现对PWM脉宽调制占空比的实时显示。
…三、方案设计系统框架设计总体设计方案的硬件部分详细框图如图一所示。
由命令输入模块、LED显示模块及电机驱动模块组成。
采用带中断的独立式键盘作为命令的输入,单片机在程序控制下,定时不断给L298直流电机驱动芯片发送PWM波形,H型驱动电路完成电机正,反转和急停控制;同时单片机不停的将PWM脉宽调制占空比送到LED数码管完成实时显示。
四、系统硬件设计硬件模块组成(1)单片机控制模块(2)L298电机驱动模块(3)LED显示模块(4)独立键盘控制模块系统硬件各模块电路单片机整个控制模块—这里利用定时计数器让单片机P2口的、引脚输出占空比不同的方波,然后经驱动芯片L298放大后控制直流电机。
驱动芯片的输入电压是两引脚的电压差,在调速时一根引脚线为低电平,另一个引脚产生调速方波,这样两个引脚的电压差就可通过控制其中一个引脚来控制。
当需要改变电机转动方向时,两个引脚的输出相反。
定时计数器若干时间(1us)中断一次,就使或产生一个高电平或低电平。
直流电机的速度分成100个等级,因此一个周期就有100个脉冲,周期为一百个脉冲的时间,速度等级对应一个周期的高电平脉冲的个数。
占空比为高电平脉冲个数占一个周期总脉冲个数的百分数。
一个周期加在电机两端的电压为脉冲高电压乘以占空比。
占空比越大,加在电机两端的电压越大,电机转动越快。
电机的平均速度等于在一定的占空比下电机的最大速度乘以占空比。
当我们改变占空比时,就可以得到不同的电机平均速度,从而达到调速的目的。
五、PWM的基本工作原理PWM是通过控制固定电压的直流电源开关频率,从而改变负载两端的电压,进而达到控制要求的一种电压调整方法。
在PWM驱动控制的调整系统中,按一个固定的频率来接通和断开电源,并根据需要改变一个周期内“接通”和“断开”时间的长短。
通过改变直流电机电枢上电压的“占空比”来改变平均电压的大小,从而控制电动机的转速。
六、软件设计主程序设计:主程序部分主要对定时计数器T1的工作方式、中断入口地址、计数初值、中断产生、进行设置,为了方便程序编程。
主程序流程图定时中断子程序设计|1. 定时计数器TMOD设置选用T0 作为产生脉冲用的定时器并且使它工作在模式1 下。
在模式1 中,寄存器TH0 和TL0 以全8 位参与操作,构成一个16 位定时/计数器,当TH0 溢出时向中断标志位TF0进位,并申请中断。
在这种模式下T0 定时时间最长,有利于在更大的范围内对电机进行调速。
工作模式寄存器TMODTMOD 的高4 位用于T1,低4 位用于T0,4 种符号含义如下: GATE :门控位。
C/T :定时/计数器方式选择位。
C/T =0 为定时器方式,C/T =1时为计数器方式。
M1M0:工作模式选择位,具体如下:TMOD 寄存器:M1M0=00:模式0(13 位定时/计数器) M1M0=01:模式1(16 位定时/计数器)M1M0=10:模式2(8 位自动重装常数的定时/计数器) M1M0=11:模式3(2 个8 位定时/计数器,仅对T0)因在程序中T0 是作为定时器,T0 的C/T 控制位就应设置为0;T0 工作在模式1,TMOD 中控制T0的M1M0应设置为01,其它位全部设置为0,即应给工作模式寄存器TMOD 赋值01H 。
2. 工作方式1及初值计算当M1,M0=01时,定时/计数器处于工作方式1,此时,定时/及数器的等效电路 仍以定时器0为例,定时器1与之完全相同。
方式0和方式1的区别仅在于计数器的位数不同,方式0为13位,而方式1则为16位,由TH0作为高8位,TL0为低8位,有关控制状态字(GATA 、C/T 、TF0、TR0)和方式0相同。
在工作方式1下,计数器的计数值范围是: 1—65536(216)。
当为定时工作方式1时,定时时间的计算公式为:(216—计数初值)╳晶振周期╳12*如果单片机的晶振选为,则最小定时时间为:GATE C/T M1 M2 GATE C/T M1 M00 0 0 1 0 0 0 0[213—(216—1)]╳1/6╳10-6╳12=2╳10-6(s)=2(us)(216—0)╳1/6╳10-6╳12=131072╳10-6(s)=131072(us)定时/计数器中的计数器是在计数初值基础上以加法计数的,并能在计数器从全“1”变为全“0”时自动产生溢出中断请求。
因此,可以把计数器计数初值设定为TC,定时器定时时间T 的计算公式为:T=(M-TC)T 计数[2]式中M 为计数器模值,该值和计数器工作模式有关。
在模式1 时M 为216。
在定时器模式下,T 计数是单片机振荡周期的12 倍。
上式也可写成:TC=M-T/T 计数在程序设计中工作模式为模式1,则计数器模值M=216=65536;假设单片机仿真器的晶振频率为,则:T 计数=12/×106)=×10若定时时间长度为30ms,则:TC=65536-30×10-3/×10-7=10240=2800H给定时器赋值时:MOV TL0, #00H;MOV TH0, #28H3. 中断设置除特殊功能寄存器TCON 和SCON 中的某些位与中断有关以外,还有一个特殊功能寄存器即中断允许寄存器IE 用来设定各个中断源的打开和关闭。
中断系统的结构框图IE寄存器各位的含义如下:?EA():CPU的中断总允许标志位。
当EA=1时,CPU允许中断;当EA=0时,CPU禁止所有的中断请求。
ES():串行口中断允许位。
当ES=1时,允许串行口中断;当ES=0时,禁止中断。
ET1():定时器T1的溢出中断允许位。
当ET1=1时,允许T1中断;当ET1=0时,禁止T1中断。
EX1():外部中断1的中断允许标志位。
当EX1=1时,允许外部中断1中断;当ES=0时,禁止外部中断1中断。
ET0():定时器T0溢出中断允许位。
当ET0=1时,允许T0中断;当ET0=0时,禁止T0中断。
EX0():外部中断0允许位。
当EX0=1时,允许外部中断0中断;当EX0=0时,禁止外部中断0中断。
定时中断子程序流程:根据程序的需要,先为IE的各位赋值:外部中断0的中断允许位:EX0=1,允许外部中断SETB EX0定时器T0溢出中断允许位:ET0=1,允许中断请求SETB ET0允许中断(EA=1,CPU允许中断)SETB EA串行口中断允许位:ES=1,允许串行口中断SETB ES以上各位等于1 时,CPU 开放中断;等于0 时,CPU 禁止该中断。
单片机系统复位后,IE 中各位均被清零,即禁止所有中断。
因此程序中开T0 中断则应将ET0置1,另外如果要使用中断EA 也要置1,故应给IE 赋值为82H。
七、系统功能调试仿真整体图如下:~直流电机的调试功能仿真如下图:加速分5档,波形依次如下:|减速分5档,波形如下:八、设计总结通过本次课程设计,使我学到了许多书本上无法学到的知识,也使我深刻体会到单片机技术应用领域的广泛。
不仅让我对学过的单片机知识有了很多的巩固,同时也对单片机这一门课程产生了更大的兴趣。
在本次课程设计过程中,我学会了有关本设计的各硬件的资源,其中包括:直流电机PWM调速、AT89C51单片机、L289引脚图及其引脚功能、LED数码管显示等知识。
参考文献[1] 林志琦.基于Proteus的单片机可视化软硬件仿真[M].北京:北京航空航天大学出版社,>[2] 周润景,张丽娜.基于PROTEUS的电路及单片机系统设计与仿真[M].北京:北京航空航天大学出版社,[3] 张靖武,周灵彬.单片机系统的PROTEUS设计与仿真[M].北京:电子工业出版社,[4] 周润景,张丽娜.PROTEUS入门实用教程[M].北京:机械工业出版社,[5] 楼然苗,李光飞.51系列单片机设计实例[M].北京:北京航空航天大学出版社,[6] 楼然苗,李光飞.单片机课程设计指导[M].北京:北京航空航天大学出版社,直流电机PWM调速C语言程序:#include<>#include<>#include <>/********自定义变量********/—#define uint unsigned int //自定义变量#define uchar unsigned charchar gw,sw,bw,qw;uchar j; //定时次数,每次20msuchar f=5; //计数的次数sbit P10=P1^0; //PWM输出波形1sbit P11=P1^1; //PWM输出波形2sbit P13=P1^3; //加速sbit P14=P1^4; //减速sbit P15=P1^5; //停止(sbit P16=P1^6; //启动uchar k;uchar t; //脉冲加减/*********控制位定义********************/uchar code smg[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x73,0x71};//程序存储区定义字型码表char data led[4]={0x08,0x04,0x02,0x01}; //位码uint x; //数码管显示的数值display(); //数码管显示delays(); //延时函数key();\displays();/***************主函数********************/main (void){TMOD=0x51; //T0方式1 定时计数 T1方式1计数TH0=0xb1; //装入初值20MSTL0=0xe0;TH1=0x00; // 计数567TL1=0x00;TR0=1; //启动t0—TR1=1; //启动t1gw=sw=bw=qw=0; //数码管初始化P0=0xc0;P2=1;while(1) //无限循环{display(); //数码管显示key();}}\/***************数码管显示****************/display(){uchar i;gw=x%10; //求速度个位值,送到个位显示缓冲区sw=(x/10)%10; //求速度十位值,送到十位显示缓冲区 bw=(x/100)%10; //求速度百位值,送到百位显示缓冲区 qw=x/1000; //求速度千位值,送到千位显示缓冲区 for(i=0;i<4;){*P2=led[i];if(i==0) //显示个位{P0=smg[gw];delays();}else if(i==1) //显示十位{P0=smg[sw];delays();}}else if(i==2) //显示百位{P0=smg[bw];delays();}else if(i==3) //显示千位}i++;}·}/*****************延时函数*************************/ delays(){uchar i;for(i=5000;i>0;i--);}/*********t0定时*中断函数*************/void t0() interrupt 1 using 2{》TH0=0xb1; //重装t0TL0=0xe0;f--;if(k==0){if(f<t)P10=1;elseP10=0;P11=0;!}else{if(f<t)P11=1;elseP11=0;P10=0;}if(f==0)/{f=5;}j++;if(j==50){j=0;x=TH1*256+TL1; //t1方式1计数,读入计数值 TH1=0x00;TL1=0x00;"x++;display();}}/****************按键扫描**************/ key(){if(P12==0) //如果按下,{while(!P12) //去抖动(display();k=~k;}if(P16==0) //启动{while(P16==0);IE=0x8a;}if(P13==0) //加速{while (P13==0);t++;}if(t>=5)t=5;if(P14==0) //减速{while(P14==0);t--;}if(t<1)t=1;if(P15==0) //停止{while(P15==0);EA=0;P10=0;P11=0;}}/**************** END **************/。