單片機是STC15F2K60S2,用里面的PWM模塊做一個呼吸燈,定時器0中斷做占空比增加或減少,定時器0,500MS中斷,占空比加1,下面是我的程序,但是不工作,求指導,謝謝~~
#include"reg51.h"
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int
sfr AUXR=0x8e;
sfr P_SW1=0xA2;
sfr CCON=0xD8;
sfr CMOD=0xD9;
sfr CL=0xE9;
sfr CH=0xF9;
sfr CCAPM0=0xDA;
sfr CCAP0L=0xEA;
sfr CCAP0H=0xFA;
sfr PCA_PWM0=0xF2;
sbit CR=CCON^6;
sbit LED=P3^3;
sbit key=P2^6;
sbit PWM=P1^1;
unsigned int counter;
unsigned char flag;
unsigned char PWMduty=0;
unsigned char code DutyDC[] = {
5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,105,110,115,120,125,130,135,140,
145,150,155,160,165,170,175,180,185,190,195,200,205,210,215,220,225,230,235,240,245,250,255
};//占空比數值//
void Delay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}
void main()
{
AUXR&=0x7f; //定時器0為12T模式//
TMOD=0x00; //設置定時器0為模式0//
TH0=(65536-50000)/256;
TL0=(65536-50000)%256; //定時值初值//
EA=1; //開總中斷//
ET0=1; //開啟內部定時器中斷0//
TR0=1; //打開定時器0//
P_SW1=0x00;
CCON=0;
CL=0;
CH=0;
CMOD=0x00;//系統時鐘,SYS/12,禁止中斷//
PCA_PWM0=0x00;
PWMduty=0;
//CCAP0H=DutyDC[PWMduty];
//CCAP0L=CCAP0H;//可變占空比//
CCAPM0=0x42;
CR=1;//運行PWM//
while(1);
}
void KEYtime2() interrupt 1
{
TF0=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256; //定時值初值
counter++;
if(counter>=10)//500ms//
{
counter=0;
CCAP0H=DutyDC[PWMduty++];
CCAP0H=CCAP0L;
}
}
|