51会一点 发表于 2023-12-15 09:18 这个确实也可以,我考虑到了另一个方式,就是直接写出占空比如High_num=150;加上了延迟也可以实现要求 |
#include <reg52.h> //包含52头文件 #define uint unsigned int //宏定义uint代替unsigned int #define uchar unsigned char //宏定义uchar代替unsigned char sbit PWM=P1; void T1_init(); uint count=0,High_num=200; void main() //主函数 { T1_init(); while(1) { } } void T1_init() { TMOD=0x20; //设置T1为方式2 TH1=256-100; //置T1高8位,备用初值 TL1=256-100; //置T1低8位,初值 TR1=1; //启动T1 ET1=1; //开T1中断 EA=1; //开总中断 } /**********T1中断服务程序*********/ void T1_int() interrupt 3 //00us进入中断 { High_num--; if(High_num==0) { High_num=200; count++; if(count>=200) count=0; } if(count<High_num) PWM=1; else PWM=0; } 这个试一下 |
lkc8210 发表于 2023-12-14 16:18 噢噢噢噢,我明白了,就是这两个相冲了,但是我修改成下面的样子,仿真上还是没法实现要求 #include <reg52.h> //包含52头文件 #define uint unsigned int //宏定义uint代替unsigned int #define uchar unsigned char //宏定义uchar代替unsigned char sbit PWM=P2^0; void T1_init(); uint count=0,High_num; void zidong(); void delay (uint xms) //毫秒函数定义 { uint i,j; for(i=0;i<xms;i++) for(j=0;j<120;j++); } void main() //主函数 { T1_init(); while(1) { zidong(); } } void T1_init() { TMOD=0x20; //设置T1为方式2 TH1=256-100; //置T1高8位,备用初值 TL1=256-100; //置T1低8位,初值 ET1=1; //开T1中断 EA=1; //开总中断 } /**********T1中断服务程序*********/ void T1_int() interrupt 3 //00us进入中断 { count++; if(count>=500) count=0; if(count<High_num)PWM=1; else PWM=0; } void zidong() { TR1=1; //启动T1 High_num=150; delay(200); High_num=100; delay(200); High_num=50; delay(200); High_num=0; delay(200); } |
High_num不能和count同时改变 因改为count变为0时才改变 |