Pwm程序流程图

上传人:沈*** 文档编号:108155702 上传时间:2022-06-15 格式:DOC 页数:58 大小:276.50KB
收藏 版权申诉 举报 下载
Pwm程序流程图_第1页
第1页 / 共58页
Pwm程序流程图_第2页
第2页 / 共58页
Pwm程序流程图_第3页
第3页 / 共58页
资源描述:

《Pwm程序流程图》由会员分享,可在线阅读,更多相关《Pwm程序流程图(58页珍藏版)》请在装配图网上搜索。

1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-datePwm程序流程图Pwm程序流程图Pwm程序流程图 首先我们要确定频率和占空比,我们选用12MHZ晶振,让PWM 输出频率为1KHZ, 让定时中断次数为C=100,即0.01MS中断一次,则TH0=FF,TL0=F6;由于设定中断时间为0.01ms,这样可以设定占空比可从1-100 变化,即0.01ms*100=1ms。 TH0 和TL0 是计数器0 的高8 位和低8

2、位计数器,计算方法:TL0=(65536-C)%256;TH0=(65536-C)/256,其中C 为所要计数的次数;TMOD 是计数工作模式选择,TMOD=0X01表示选用模式1,它有16 位计数器,最大计数脉冲为65536,最长时间为65.536ms。系统初始化占空比设定计数计数=100PWM输出 开始 是否#include#define uchar unsigned?char#define V_TH0 0XFF#define V_TL0 0XF6#define V_TMOD 0X01 void init_sys(void);/*系统初始化函数*/void Delay5Ms(void);

3、unsigned char click,ZKB1,ZKB2;void main(void)init_sys(); ZKB1=40;/*占空比初始值设定*/ZKB2=70;/*占空比初始值设定*/while(1) if(!P10)/*如果按了+键,增加占空比*/ Delay5Ms();if(!P10)ZKB1+;ZKB2=100-ZKB1; if(!P11)/*如果按了-键,减少占空比*/Delay5Ms();if(!P11)ZKB1-; ZKB2=100-ZKB1; /*对占空比值限定范围*/ if (ZKB199) ZKB1=1; if (ZKB1=100) click=0; if (cli

4、ck=ZKB1) /*当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整*/ P2=0xff; else P2=0x00;正反转void zhengzhuan()/*正转函数*/ p0.0=HA; p0.1=HB; p0.2=HC; switch(hall) case 0X05:p1=21H ;break pwm(); while(p0.2) case 0X04:p1= 22H ;break dop0.4=1;p0.5=1; case 0X06:p1= 0AH ;breakwhile(p1.1) case 0X02:p1= 0BH ;breakdop0.2=1;p0.3=1; c

5、ase 0X03:p1= 14H ;break while(p1.1;p1.2) case 0X01:p1= 11H ;breakdop0.3=1;p0.4=1; while(p1.0) dop0.0=1;p0.1=1; while(p1.0;p1.2) dop0.0=1;p0.5=1; while(p1.0;p1.1) dop0.1=1;p0.2=1; PWM=PHASE&pwm(); void fanzhuan()/*反转函数*/ p1.0=HA; p1.1=HB; p1.2=HC; pwm(); while(p1.2) dop0.1=1;p0.2=1; while(p1.1) dop0.

6、0=1;p0.5=1; while(p1.1;p1.2) dop0.0=1;p0.1=1; while(p1.0) dop0.3=1;p0.4=1; while(p1.0;p1.2) dop0.2=1;p0.3=1; while(p1.0;p1.1) dop0.4=1;p0.5=1; PWM=PHASE&pwm(); 主程序void main(void) TMOD=0x59; /*T1软件启动,T0软件+脉冲启动,T1计数器,T0定时器 T1工作在方式1,T0工作在方式1*/ TCON=0x20; TH1=0x00; TL1=0x00; TH0=0xD8; TL0=0xF0; IE=0x82;

7、 /*中断允许总控制,禁止T1中断*/ keyget();if(tag=1) start(); else stop(); 按键查询KEYIN: MOV P2, 0FFH MOV A,P2 CJNE A,#0FFH,QUDOU LJMP RETURNQUDOU: MOV R3,A LCALL DELAY10 MOV A,P2 CJNE A,R3,RETURNKEY0: MOV C,P2.0 JC KEY1 LJMP PKEY0(启动)KEY1: MOV C,P2.1 JC KEY2 LJMP PKEY1(停止)KEY2: MOV C,P2.2 JC KEY3 LJMP PKEY2(正转)KEY3

8、: MOV C,P2.3反转.KEY5: MOV C,P2.5 JC RETURN LJMP PKEY5(减速)RETURN: RET过压过流K1 :MOV C,P1.2 JC K2 LJMP RETURNPkey1 K2:CLR P1.0 CLR P1.1 CLR P1.2SETB P1.3SETB P1.4SETB P1.5JMP GONGZUORETvoidstop()/*停止函数*/ P0=0;P1=0;P2=0;TR0=0;TR1=0;void keyget() /*键盘扫描函数*/ uchar x; /*定义变量*/ P2=0XC0 ; /*键盘扫描,看是否有键按下*/ if(P2

9、&0XC0)=0) /*有键按下*/ P2=0X80; /*P2.7置1,扫描第一行*/ if(P2&0X80)=0) /*第一行有键按下*/ d_ms(1500); /*延时去抖*/ x=P2; /*读P2口*/ else P2=0X40; /*P2.6 置1,扫描第二行*/ if(P2&0X40)=0) /*第二行有键按下*/ d_ms(1500); /*延时去抖*/ x=P2; /*读P2口*/ switch(x) case 0xA0: start();break; /*启动*/ case 0x90: up();break; /*向上箭头*/ case 0x88: fanzhuan();

10、break; /*反转*/ case 0x60: left();break; /*左移*/ case 0x50: down();break; /*向下箭头*/ case 0x48: right();break /*右移*/ 用MCS-51单片机成功产生PWM波的方法PWM 是“脉冲宽度调制”的意思。PWM 实际上是在单片机的某个引脚输出一系列的矩形波,其周期一般是固定的;而其高电平、低电平所占用的时间,是可以受控调整的。高电平与周期占用的时间之比,称为占空比,其值为01之间。PWM 的应用很广,简单的说,它可以控制灯光的亮度、可以控制直流电机的转速,甚至还可以输出语音信号。新型的单片机,往往都

11、含有硬件的 PWM 模块,编写程序就很简单;而老式的MCS-51系列,就不具备这个条件。其实,在没有 PWM 硬件的单片机上实现 PWM,也并不难,只需一个定时器,令其工作在中断方式即可。题目:AT89C52单片机输出可调 PWM 波。要求:1。单片机的晶振是12MHz,输出周期为1s。2。用两个开关控制占空比的增加和减少,分20等级。针对这个题目,做而论道设计了一个简单的实验电路:在 P2 口的 8 条线输出 PWM 波形;在 /INT1、/INT0 外接了两个按键,用来调整占空比;在 P0 口外接了两个 BCD 数码显示器,用来显示当前的占空比的等级。实验的时候,可以使用示波器来观察 P2

12、 口输出的波形。如果把 PWM 波形的频率提高,也可以用 LED 观察到渐亮渐暗的效果,目前看,只是闪烁的时间发生变化。/程序如下:/=#includeunsigned int a, b;/-void main() TMOD = 0x01; /T0定时方式1 TH0 = (65536-50000) / 256; /50ms12MHz TL0 = (65536-50000) % 256; TR0 = 1; ET0 = 1; EX0 = 1; EX1 = 1; IT0 = 1; IT1 = 1; EA = 1; a = 0; b = 10; while(1);/-void time0() inte

13、rrupt 1 TL0 = (65536-50000) % 256; TH0 = (65536-50000) / 256; /50ms12MHz a+; if(a = 20) a = 0; /在这里调整周期. if(a b) P2 = 0xff; /在这里调整占空比. else P2 = 0x00; P0 = (b / 10) 19) b = 19; /占空比等级最大为19/-void X1_INT() interrupt 2 b-; if(b 1) b = 1; /占空比等级最小为1./=电路以及仿真效果如下图:用16产生了10K,50%占空比的PWM波,但是用按键无法控制PWM的占空比#i

14、nclude #include #define uchar unsigned char #define uint unsigned int int num=50; /*延时函数*/void delay(uint MS) /约为1MS的延时函数 uint i,j; for(i=0;iMS;i+) for(j=0;j0;x-)for(y=1140;y0;y-);void keyscan(void )if(PIND&0x01)=0)while(!(PIND&0x01); /松手检测delay_ms(50);num+=5;if(num=255)num=0;if(PIND&0x02)=0)while(!

15、(PIND&0x02);delay_ms(50);num-=5;if(num=0)num=255;if(PIND&0x08)=0)while(!(PIND&0x01);delay_ms(50);num=128;void main(void)uchar wide;pwm0_init();init_key();while(1)OCR0=num;keyscan();16、 定时器0快速PWM模式 快速PWM可以的到比较高频率的PWM输出但占空比的调节精度稍微差一些。此时计数器仅工作在单程正向计数方式计数器的上限值决定PWM的频率而比较匹配寄存器的值决定了占空比的大小。PWM频率的计算公式为 PWM频

16、率 = 系统时钟频率/分频系数*1+计数器上限值 快速PWM模式适合要求输出PWM频率较高但频率固定占空比调节精度要求不高的应用。 /*定时器0快速PWM模式由OC0输出PWM波 */ /*PWM频率 = 系统时钟频率/分频系数*1+计数器上限值*/ /*本程序中频率=8000000/(8*(1+255)=3.91KHZ频率固定 */ /*占空比为OCR0/0XFF=OCR0/256,占空比可调 */ /*TCNT0从BOTTOM计数到MAX,然后回到BOTTOM重新开始;TCNT0计数到与OCR0相等时 OC0清零在BOTTOM时置位1 */ #include #include #defin

17、e uint unsigned int #define uchar unsigned char volatile uchar num; void pwm0_init(void) DDRB=0X10; /将PB4设置为输出 TCCR0=0X00; /关闭 num=64; /设置输出比较寄存器的初值 TCNT0=0; /计数器初值为0 TCCR0=0X6A; /设置为快速pwm模式采取8分频 /*键盘初始化 */ void init_key() DDRD=0X00; PORTD=0XFF; /*延时函数 */ void delay_ms(uint z) uint x,y; for(x=z;x0;x

18、-) for(y=1140;y0;y-); /*键盘扫描 */ void keyscan(void ) if(PIND&0x01)=0) while(!(PIND&0x01); /松手检测 delay_ms(50); num+=5; if(num=255) num=0; if(PIND&0x02)=0) while(!(PIND&0x02); delay_ms(50); num-=5; if(num=0) num=255; if(PIND&0x08)=0) while(!(PIND&0x01); delay_ms(50); num=128; void main(void) uchar wide; pwm0_init(); init_key(); while(1) OCR0=num; keyscan(); #include#define uchar nsigned char#define uint unsignde intsbit led=p1.0;/延时void delayms(uint x)uchar i;while(x-)for(i=0;i120;i+);主程序void main()led=0;while(1)led=-led;delayms(150);-

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!