我這段程序是測速度和心率的,但是我現在燒進52后,在串口小程序里收不到數據,連0也沒有,設置串口小程序顯示16進制了,還是沒有,求大神指點,是我哪里寫錯了,應該怎么改!謝謝
#include <reg52.h>
unsigned char flag_d = 0; //發送標志
unsigned char time = 0; /
unsigned int heart = 0; //心率變量
unsigned int num[2] = {0,0}; //
unsigned int speed = 0;
float temp;
float count = 0; //間隔時間
//發送字符
void UART_SChar(unsigned char ch)
{
SBUF = ch; //發送數據
while(TI == 0); //等待發送完成
TI = 0; //清楚發送標志
}
void main(void)
{
TMOD = 0x21; //定時器工作方式
SCON = 0X40; //串口工作方式
TH0 = (65536-45872)/256; //定時器0初值
TL0 = (65536-45872)%256;
TH1 = 0XFD; //定時器1初值
TL1 = 0XFD;
IT0 = 0; //外部中斷0低電平觸發速度
IT1 = 1; //下降沿觸發心率
EA = 1; //開中斷
ES = 1; //開串行口中斷
EX0 = 1; //開外部0中斷
EX1 = 1; //開外部1中斷
ET0 = 1; //開定時器0中斷
ET1 = 1;
TR0 = 1;
TR1 = 1; //啟動定時器1
while(1)
{
if(flag_d != 0) //如果發送標志位有效
{
UART_SChar(0x00); //發送數據
UART_SChar(speed); //發送數據
UART_SChar(0xff); //發送數據
if(flag_d == 2)
{
UART_SChar(0x00); //發送數據
UART_SChar(heart); //發送數據
UART_SChar(0xff); //發送數據
}
}
flag_d = 0; //清除標志
}
}
//T0中斷服務程序
void T0_ISR(void) interrupt 1 //
{
TH0 = (65536-45872)/256;
TL0 = (65536-45872)%256;
speed = num[0];
num[0] = 0 ;
flag_d = 1 ;
if (time == 40)
{
heart = num[1];
num[1] = 0 ;
flag_d = 2 ;
time = 0 ;
}
time++;
}
void INT0_ISR(void) interrupt 0
{
num[0]++;
}
//外部中斷1服務程序
void INT1_ISR(void) interrupt 2 //
{
num[1]++;
}
|