单片机输出PWM脉冲的两种方法
51单片机没有PWM输出功能,可以采用定时器配合软件的方法实现,对精度要求不高的场合是非常实用的 。采用高速光隔6N137输出,并将PWM的信号倒相 。
一、 工作原理
二、PWM输出
1. 固定脉宽PWM输出
用T0定时器完成PWM输出,脉宽固定为65536μs 。T0定时器设置成16位定时器,PWM波形如图2所示 。
程序清单:(12MHz)
PwmData0 ;T0定时t1的初值(字)
PwmData1 ;T0定时t2的初值(字)
PwmF;PWM输出标志
??;***************************
setb tro ;启动T0
……
T0Int:;T0中断服务程序
JB PwmF ,PwmOutH
;PWM输出未完成返回
Mov TH0,High(PwmData0)
Mov TL0,Low(PwmData0)
Setb tr0
Setb PwmF
Clr p1.0 ;PWM输出脚
reti
PwmOutH:Setb p1.0
Clr tr0
Mov TH0,High(PwmData1)
Mov TL0,Low(PwmData1)
Setb tr0
Clr PwmF
reti
说明:在主程序中计算PwmData0、PwmData1的值 。
2. 可变脉宽PWM输出
用T0定时器控制PWM的占空比,T1定时器控制脉宽(最大65536μs 。)
T0、T1定时器设置成16位定时器 。
程序清单:(12MHz)
PwmData0 ;T0定时t1的初值(字)
【单片机输出PWM脉冲的两种方法】PwmData1 ;T1定时T的初值(字)
??;***************************????????????
setb tro ;启动T0
setb tr1
……
T0Int:Clr tr0;T0中断服务程序
setb p1.0 ;PWM输出脚
reti
T1Int:Clr p1.0 ;T1中断服务程序
Clr tr0
Clr tr1
Mov TH0,High(PwmData0)
Mov TL0,Low(PwmData0)
Mov TH1,High(PwmData1)
Mov TL1,Low(PwmData1)
Setb tr1
Setb tr0
reti
说明:在主程序中计算PwmData0、PwmData1的值 。
推荐阅读
- 单片机编程软件基础篇,IAR单片机编程软件菜单栏讲解
- 单片机编程软件入门篇,IAR单片机编程软件之新建软件工程
- 大佬讲解单片机编程软件,IAR单片机编程软件之基础教程
- 基于单片机的气体流量计检测仪
- 用8051控制报警产生实例
- 基于51单片机的电力载波通信开关电路的制作
- 基于单片机的高性能直流稳压电源
- pic单片机也可以很简单,搞定pic单片机IO口操作
- 搞定pic单片机奇葩事,pic单片机分类大讲解
- 大佬探讨pic单片机,pic单片机更实用