|
代碼調(diào)試和protues仿真都可以成功實(shí)現(xiàn)方波輸出和調(diào)頻。但是實(shí)物用示波器就不能,求大佬幫助
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
float fosc=11059200;
sbit KEY=P1^0;
sbit OUTPUT=P2^0;
sbit P2_0=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 chushihua(void)
{
P1=0x01;//00000001
freq=1000;
zkb=50;
P2_0=1;
TIMER0_L=0x67;//11100000
TIMER0_H=0xfc;//10110001
TIMER1_L=0xf0;//11110000
TIMER1_H=0xd8;//11011000 定時(shí)器高、低賦初值
TL0=0x67;
TH0=0xfc;//T0計(jì)數(shù)器賦初值
TL1=0xf0;
TH1=0xd8;//T1計(jì)數(shù)器賦初值
TMOD=0x11;
IT0=1;//INT0為下降沿中斷
EX0=1;//INT0中斷
ET0=1;//打開定時(shí)器0的中斷
ET1=1;//打開定時(shí)器1的中斷
EA=1;//中斷允許
TR0=1;//表示定時(shí)器0工作。
TR1=1;//表示定時(shí)器1工作。
}//初始化
void main(void)
{
chushihua();
while(1)
{
}
}
void Timer0_freq() interrupt 1//對(duì)應(yīng)定時(shí)器/計(jì)數(shù)器0中斷;
{
TR0=1;
TL0=TIMER0_L;
TH0=TIMER0_H;
OUTPUT=~OUTPUT;
}
void Timer1_zkb() interrupt 3//對(duì)應(yīng)定時(shí)器/計(jì)數(shù)器1中斷
{
TR0=0;
TL1=TIMER1_L;
TH1=TIMER1_H;
OUTPUT=~OUTPUT;
}
void keyscan() interrupt 0 using 1//對(duì)應(yīng)外部中斷0
{
float TF0,TZ1;
EX0=0;
delay(10);
if(P1!=0x01)
{
if(KEY==0) freq+=1000;
if(freq>10000) freq=1000;
TF0=(65536-fosc/(11.0592*freq));
TZ1=(65536-(fosc*zkb)/(11.0592*100*freq));
TIMER0_H=(uint)TF0/256;
TIMER0_L=(uint)TF0%256;
TIMER1_H=(uint)TZ1/256;
TIMER1_L=(uint)TZ1%256;//計(jì)算定時(shí)器0和定時(shí)器1
}
P1=0x01;
EX0=1;
TR0=1;
TR1=1;
}
|
-
2.jpg
(1.57 MB, 下載次數(shù): 26)
下載附件
2021-1-12 21:34 上傳
-
1.png
(38.25 KB, 下載次數(shù): 29)
下載附件
2021-1-12 21:34 上傳
|