|
可以通過設(shè)置AUXR為12分頻,解決這個(gè)問題
- #include <stc12c5a.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #define uchar unsigned char
- #define uint unsigned int
- /*用定時(shí)器T0,任選一管腳P21輸出PWM波*/
- /*單片機(jī)晶振11.0592MHZ,時(shí)鐘周期為1/11.0592us*/
- /*11.0592M除以12=921600,就是1秒921600個(gè)機(jī)器周期*/
- /*0.1ms就是92機(jī)器周期,輸出PWM波周期為20ms,分成200份,
- 中斷200次,定時(shí)器初值為256-92=164*/
- /*周期20ms中高電平時(shí)間1.5ms,也就是0.1ms×15*/
- sbit PWM=P2^1;//P21輸出PWM波
- uchar time=0; //占空比
- void time0init()//定時(shí)器初始化
- {
- AUXR &= 0x7F; //定時(shí)器時(shí)鐘12T模式
- TMOD &= 0xF0; //設(shè)置定時(shí)器模式
- TMOD|=0x02; //定時(shí)器0工作方式2,8位重裝
- TH0=164; //92個(gè)機(jī)器周期,即0.1ms
- TL0=164;
- ET0=1;
- EA=1;
- TR0=1;
- }
- void time0() interrupt 1
- {
- time++;
- if(time<200) //周期為0.1ms*200=20ms
- {
- if(time<=15) //高電平時(shí)間為0.1ms*15=1.5ms
- PWM=1;
- else
- PWM=0;
- }
- else
- time=0;
- }
- void main()
- {
- time0init();
- while(1)
- {
-
- }
- }
復(fù)制代碼 |
|