怎么让AT90S2313—10PI单片机输出一定占空比的PWM波形,求程序
展开全部
#include<reg51.h> // 这是 可以调节 占空比的
sbit P1_0 = P1^0; // 三路PWM输出
sbit P1_1 = P1^1;
sbit P1_2 = P1^2;
sbit key10 = P3^2; // 6 个 按键 三路 + 或者 -
sbit key11 = P3^3;
sbit key20 = P3^4;
sbit key21 = P3^5;
sbit key30 = P3^7;
sbit key31 = P3^1;
unsigned char Set_PWM0 = 2; // 占空比调整
unsigned char Set_PWM1 = 5;
unsigned char Set_PWM2 = 8;
unsigned char counter = 0; // 计数的
bit bdata tt1,tt2,tt3; // 标志位
void main()
{
TMOD=0x01;
TH0=(65536-2000)/256; // 定时时间 可以修改
TL0=(65536-2000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{ // 开关调整 PWM 占空比
if(key10==0 && tt1==0) {tt1 = 1; Set_PWM0++;} // K1、K2
if(key11==0 && tt1==0) {tt1 = 1; Set_PWM0--;}
if(key10==1 && key11==1) tt1=0;
if(key20==0 && tt2==0) {tt2 = 1; Set_PWM1++;} // K3、K4
if(key21==0 && tt2==0) {tt2 = 1; Set_PWM1--;}
if(key20==1 && key21==1) tt2=0;
if(key30==0 && tt3==0) {tt3 = 1; Set_PWM2++;} // K5、K6
if(key31==0 && tt3==0) {tt3 = 1; Set_PWM2--;}
if(key30==1 && key31==1) tt3=0;
}
}
void Timer0(void) interrupt 1 // 定时器0 PWM 控制
{
TH0=(65536-2000)/256; // 定时时间 可以修改
TL0=(65536-2000)%256;
counter++;
if(counter >= 16) counter = 0; // PWM 16级 可以修改
if(counter >= Set_PWM0) P1_0 = 0; else P1_0 = 1;
if(counter >= Set_PWM1) P1_1 = 0; else P1_1 = 1;
if(counter >= Set_PWM2) P1_2 = 0; else P1_2 = 1;
}
sbit P1_0 = P1^0; // 三路PWM输出
sbit P1_1 = P1^1;
sbit P1_2 = P1^2;
sbit key10 = P3^2; // 6 个 按键 三路 + 或者 -
sbit key11 = P3^3;
sbit key20 = P3^4;
sbit key21 = P3^5;
sbit key30 = P3^7;
sbit key31 = P3^1;
unsigned char Set_PWM0 = 2; // 占空比调整
unsigned char Set_PWM1 = 5;
unsigned char Set_PWM2 = 8;
unsigned char counter = 0; // 计数的
bit bdata tt1,tt2,tt3; // 标志位
void main()
{
TMOD=0x01;
TH0=(65536-2000)/256; // 定时时间 可以修改
TL0=(65536-2000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{ // 开关调整 PWM 占空比
if(key10==0 && tt1==0) {tt1 = 1; Set_PWM0++;} // K1、K2
if(key11==0 && tt1==0) {tt1 = 1; Set_PWM0--;}
if(key10==1 && key11==1) tt1=0;
if(key20==0 && tt2==0) {tt2 = 1; Set_PWM1++;} // K3、K4
if(key21==0 && tt2==0) {tt2 = 1; Set_PWM1--;}
if(key20==1 && key21==1) tt2=0;
if(key30==0 && tt3==0) {tt3 = 1; Set_PWM2++;} // K5、K6
if(key31==0 && tt3==0) {tt3 = 1; Set_PWM2--;}
if(key30==1 && key31==1) tt3=0;
}
}
void Timer0(void) interrupt 1 // 定时器0 PWM 控制
{
TH0=(65536-2000)/256; // 定时时间 可以修改
TL0=(65536-2000)%256;
counter++;
if(counter >= 16) counter = 0; // PWM 16级 可以修改
if(counter >= Set_PWM0) P1_0 = 0; else P1_0 = 1;
if(counter >= Set_PWM1) P1_1 = 0; else P1_1 = 1;
if(counter >= Set_PWM2) P1_2 = 0; else P1_2 = 1;
}
追问
请问大神这个芯片是avr的吗
追答
是avr的,不过编程方法 大同小异。以上程序是51的 ,只是供参考。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询