这是我做的方波发生装置,要求能输出5k到25k的方波,频率和占空比可调,但一直实现不了,求大佬帮忙。
代码如下:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
float f=12000000;
sbit KEY1=P1^0;
sbit KEY2=P1^1;
sbit KEY3=P1^2;
sbit KEY4=P1^3;
sbit OUTPUT=P2^0;
uchar zkb;
uint freq;
uchar TIMER0_L,TIMER0_H,TIMER1_L,TIMER1_H;
void delay(uchar n)
{
uchar i;
while(n--)
{for(i=255;i>0;i--)
{}
}}
void SysInit(void)
{
P1=0x0f;
freq=5000;
zkb=50;
TIMER0_L=0xe0;
TIMER0_H=0xb1;
TIMER1_L=0xf0;
TIMER1_H=0xd8;
TL0=0xe0;
TH0=0xb1;
TL1=0xf0;
TH1=0xd8;
TMOD=0x11;
IT0=1;
EX0=1;
ET0=1;
ET1=1;
EA=1;
TR0=1;
TR1=1;
}
void main(void)
{
SysInit();
while(1)
{}
}
void Timer0_freq() interrupt 1
{
TR1=1;
TL0=TIMER0_L;
TH0=TIMER0_H;
OUTPUT=1;
}
void Timer1_zkb() interrupt 3
{
TR1=0;
TL1=TIMER1_L;
TH1=TIMER1_H;
OUTPUT=0;
}
void Keyscan() interrupt 0 using 1
{
float TF0,TZ1;
EX0=0;
delay(1);
if(P1!=0x0f)
{
if(KEY1==0) freq+=1000;
if(KEY2==0) freq+=100;
if(KEY3==0) zkb+=10;
if(KEY4==0) zkb+=1;
if(freq>25000) freq=5000;
if(zkb>100) zkb=10;
TF0=(65536-f/(12*freq));
TZ1=(65536-(f*zkb)/(12*100*freq));
TIMER0_H=(uint)TF0/256;
TIMER0_L=(uint)TF0%256;
TIMER1_H=(uint)TZ1/256;
TIMER1_L=(uint)TZ1%256;
}
P1=0x0f;
EX0=1;
TR0=1;
TR1=1;
}