這是我做的方波發生裝置,要求能輸出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;
}
uj5u.com熱心網友回復:
TIMER0_H=(uint)TF0/256;這種強制型別轉換,我的映像中是,編譯器不會做轉換,而是直接把原來的變數當成你指定的型別去用。不知道我是不是理解錯了。如果像我理解的那樣,你不會得到正確的結果的。
uj5u.com熱心網友回復:
抱歉,好像我的理解是錯的。編譯器會進行轉換。轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/278257.html
標籤:單片機/工控
