原理图: 以下两张图原理一样,只是位置不一样,方便你排版
仿真结果:
示波器显示脉冲
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
电压表显示输入输出电压:
单片机源程序如下: - #include<reg51.h>
- sbit PWM=P2^0; // 定义P2.0输出pwm脉冲
- unsigned char DutyCount = 0; // 定义占空比的计数变量
- unsigned char Duty = 50; // 定义占空比,初始值为50%,可调
- void main()
- {
- // 初始化定时器0 , 0.001ms 1Mhz
- TMOD=0x01; //定时器0工作方式1
- TH0=0xff; //定时器高八位赋初值 :(65536-12)/256;
- TL0=0xf4; //定时器低八位赋初值 :(65536-12)%256
- EA=1; //开总中断
- ET0=1; //开定时器0中断
- TR0=1; //启动定时器0
- while(1)
- {
- ;//nothing to do!!!
- }
- }
-
- void tim0() interrupt 1 //定时器0中断服务函数
- {
-
- TR0=0; //赋初值时,暂时关闭定时器
- TH0=0xff; //定时器高八位赋初值 :(65536-12)/256;
- TL0=0xf4; //定时器低八位赋初值 :(65536-12)%256
- TR0=1; //打开定时器
-
- DutyCount++; //计数器自加
-
- if(DutyCount>=100) //10khz
- {
- DutyCount=0;
- }
- if(DutyCount<=Duty) //占空比%50,可改
- {
- PWM=1;
- }else
- {
- PWM=0;
- }
-
- }
复制代码
Keil5代码与Proteus8.8仿真下载:
仿真程序.7z
(274.25 KB, 下载次数: 72)
|