原理圖: 以下兩張圖原理一樣,只是位置不一樣,方便你排版
仿真結果:
示波器顯示脈沖
仿真原理圖如下(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)
2022-4-22 20:24 上傳
點擊文件名下載附件
|