中断实现与pwm实现的区别

中断实现与pwm实现的区别,第1张

中断实现与pwm实现的区别为:性质不同、周期性不同、响应不同。

一、性质不同

1、中断实现:中断实现是指在执行主程序时,达到某个条件时就会触发中断,停止主程序转而去执行中断程序,执行完后又返回主程序的中断处继续执行主程序。

2、pwm实现:pwm实现是指脉冲宽度调制,通过PWM功能就能调节输出电压。

二、周期性不同

1、中断实现:中断实现不具有周期性,是保持整体一直执行。

2、pwm实现:pwm实现具有周期性。

三、响应不同

1、中断实现:中断实现只有在IO接口需要服务时才去响应它。

2、pwm实现:pwm实现对IO采用的是轮询的方式进行服务,这使得CPU纠结在某一个IO上,一直在等待它的响应,如果它不响应,CPU就在原地一直的等下去。

/ 利用定时器控制产生占空比可变的 PWM 波

// 按K1,PWM值增加,则占空比减小,电机减速。

// 按K2,PWM值减小,则占空比增加,电机加速。

// 当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警。

//

#include<reg51h>

#include<intrinsh>

sbit K1 =P1^4 ; //PWM值增加键

sbit K2 =P1^5 ; //PWM值减少键

sbit BEEP =P3^7 ; //蜂鸣器

unsigned char PWM=0x7f ; //赋初值

void Beep();

void delayms(unsigned char ms);

void delay(unsigned char t);

//

void main()

{

P1=0xff;

TMOD=0x21 ;

TH0=0xfc ; //1ms延时常数

TL0=0x66 ; //频率调节

TH1=PWM ; //脉宽调节

TL1=0 ;

EA=1;

ET0=1;

ET1=1;

TR0=1 ;

while(1)

{

do{

if(PWM!=0xff)

{PWM++ ;delayms(10);}

else Beep() ;

}

while(K1==0);

do{

if(PWM!=0x02)

{PWM-- ;delayms(10);}

else Beep() ;

}

while(K2==0);

}

}

//

// 定时器0中断服务程序 (频率)

//

void timer0() interrupt 1

{

TR1=0 ;

TH0=0xfc ;

TL0=0x66 ;

TH1=PWM ;

TR1=1 ;

P0=0x00 ; //启动输出

}

//

// 定时器1中断服务程序 (脉宽)

//

void timer1() interrupt 3

{

TR1=0 ;

P0=0xff ; //结束输出

}

//

//蜂鸣器子程序

//

void Beep()

{

unsigned char i ;

for (i=0 ;i<100 ;i++)

{

delay(100) ;

BEEP=!BEEP ; //Beep取反

}

BEEP=1 ; //关闭蜂鸣器

delayms(100);

}

//

// 延时子程序

//

void delay(unsigned char t)

{

while(t--) ;

}

//

// 延时子程序

//

void delayms(unsigned char ms)

{

unsigned char i ;

while(ms--)

{

for(i = 0 ; i < 120 ; i++) ;

}

}

//

以上就是关于中断实现与pwm实现的区别全部的内容,包括:中断实现与pwm实现的区别、单片机C语言PWM的典型程序谢谢、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9662780.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存