用串口接收到的數字作為定時器時間
#include<reg51.h>
unsigned int i,num;
sbit led0=P2^0;
//IP=0X10;
void main (void)
{
//
IP=0X10;
TMOD=0x21;
TH0 = 0x0FF;
TL0 = 0x9C;
EA = 1;
ET0 = 1;
TR0 = 1;
SCON = 0x50;
TH1 = 0xF3;
TL1 = TH1;
PCON = 0x00;
EA = 1;
ES = 1;
TR1 = 1;
while(1)
{
if(num==i)
{
num=0;
led0=~led0;
}
}
}
void Timer0Interrupt(void) interrupt 1
{
TH0 = 0x0FF;
TL0 = 0x9C;
num++;
}
void UARTInterrupt(void) interrupt 4
{
if(RI)
{
i=SBUF;
RI = 0;
}
}
在單片機上實驗不行,不能有效控制,求大佬看看,指導指導
uj5u.com熱心網友回復:
定義的時候把i,num兩個變數加個修飾符static試試uj5u.com熱心網友回復:
你的現象是能實作,但不能有效控制吧。那應該是你的定時器設定的定時時間太短,所以你串口的值相應大一點,不然跟不上num值的變化,建議你控制好定時器定時的值uj5u.com熱心網友回復:
不行,會不會是發送的資料型別有什么問題,我用串口除錯助手發送的uj5u.com熱心網友回復:
問題應該出在定時器這塊,可以回傳正確資料#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uint num;
uint i[1];
uchar flag;
sbit led=P2^0;
/*void delay100us(void)
{
unsigned char a,b;
for(b=1;b>0;b--)
for(a=47;a>0;a--);
}*/
void main (void)
{
IP|=0X10;
TMOD|=0x21;
EA=1;
TH0 = 0x0FC;
TL0 = 0x18;
ET0 = 1;
TR0 = 1;
SCON = 0x50;
TH1 = 0xE6;
TL1 = TH1;
PCON = 0x00;
ES = 1;
TR1 = 1;
while(1);
/*{
if(num==i)
{
num=0;
led0=~led0;
}
}*/
}
void Timer0Interrupt(void) interrupt 1
{
TH0 = 0x0FC;
TL0 = 0x18;
num++;
if(num==i[0])
{
num=0;
led=~led;
}
}
void UARTInterrupt(void) interrupt 4
{
uint j;
if(RI)
{
RI = 0;
j=SBUF;
i[0]=j;
SBUF=i[0];
}
if(TI)
TI = 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/91465.html
標籤:單片機/工控
