有沒有遇到采用中斷方式每隔幾秒種發送一組數據出去之后,調試助手收到多個同樣的數據,而在串口發送后加1秒的延遲程序,收到的就只有一組數據.
#include "stc15.h"
#include "USART.h"
#include "intrins.H"
unsigned char TxBusy = 0; //發送忙檢測
unsigned char rxBuff[rxLength]={0}; //接收緩沖區,長度50
unsigned char txBuff[txLength]={0}; //發送緩沖區,長度50
unsigned char rxcnt = 0; //接收計數
/* void Uart_Init(void) //115200bps@11.0592MHz
{
SCON = 0x50; //8位數據,可變波特率
AUXR |= 0x01; //串口1選擇定時器2為波特率發生器
AUXR |= 0x04; //定時器2時鐘為Fosc,即1T
T2L = 0xE8; //設定定時初值
T2H = 0xFF; //設定定時初值
AUXR |= 0x10; //啟動定時器2
ES = 1; //使能串口中斷
EA = 1; //開總中斷
}*/
void Uart_Init(void) //9600bps@11.0592MHz
{
SCON = 0x50; //8位數據,可變波特率
AUXR |= 0x01; //串口1選擇定時器2為波特率發生器
AUXR |= 0x04; //定時器2時鐘為Fosc,即1T
T2L = 0xE0; //設定定時初值
T2H = 0xFE; //設定定時初值
AUXR |= 0x10; //啟動定時器2
ES = 1; //使能串口中斷
EA = 1; //開總中斷
}
/*
void Uart1_SendByte(unsigned char dat)
{
//unsigned int OutTime = 10000;
//TI = 0;
//while((TxBusy)&&(OutTime--));
while(TxBusy);
SBUF = dat;
TxBusy = 1;
}*/
void Uart1_SendByte(unsigned char dat)
{
while(TxBusy);//等待數據發送完成,進入中斷,將TI、TxBusy清0
TxBusy = 1;
SBUF = dat;
}
void Uart1_SendByte_N(unsigned char *dat,unsigned char N)
{
while(N--)
{
Uart1_SendByte(*dat) ;
dat++;
}
}
void Uart1_IT_Handle(void) interrupt 4 using 1
{
unsigned char temp;
if(RI)
{
RI = 0; //清RI
if(rxcnt<rxLength)
{
rxBuff[rxcnt++]= SBUF;
}
else
{
temp =SBUF; //讀BUFF
}
}
if(TI)
{
TI = 0 ; //清TI
TxBusy = 0 ; //清BUSY
}
}
/*void Uart_SendStr(const char* str)
{
while(*str)
{
Uart1_SendByte(*str);
str++;
}
} */ |