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