欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
各位大佬幫我看看,為啥單片機首發一次就不能接收數據了
[打印本頁]
作者:
完后余生9375
時間:
2020-3-28 14:52
標題:
各位大佬幫我看看,為啥單片機首發一次就不能接收數據了
串口助手。發送一次字符 能收到數據。但是顯示一直發送中。不知道什么原因TI沒有置為1 導致一直發送中。。。再給單片機發送數據就收不到數據了。
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar buf;
//volatile unsigned char sending;
sbit led=P1^0;
sbit sending = P1^1;
//申明函數
void delay(unsigned char i);
void send(uchar d);
void initUart(void);
void main(void)
{
//初始化串口
initUart();
while(1);
}
//初始化串口 9600
void initUart(void){
SCON=0x50;
PCON=0x00;
TMOD=0x20;
EA=1;
ES = 1;
TL1=0xfd;
TH1=0xfd;
TR1=1;
led = 0;
sending = 0;
}
//發送一個字節的數據,形參d即為待發送數據。
void send(uchar d)
{
sending=1; //設置發送標志
SBUF=d; //將數據寫入到串口緩沖
while(sending); //等待發送完畢
}
/**
* 延時函數
**/
void delay(unsigned char i)
{
uchar j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
/*********************************************************
串口接收
*********************************************************/
void serial() interrupt 4
{
//收到數據
if(RI){
RI=0; //清中斷請求
buf = SBUF;
send(buf);
}
if(TI){
TI=0;
sending=0; //清正在發送標志
}
}
復制代碼
作者:
csmyldl
時間:
2020-3-28 15:51
void send(uchar d)
{
sending=1; //設置發送標志
SBUF=d; //將數據寫入到串口緩沖
while(sending); //等待發送完畢
}
此程序寫錯了
應該為
void send(uchar d)
{
SBUF=d; //將數據寫入到串口緩沖
while(!TI); //等待發送完畢
TI=0;
}
作者:
完后余生9375
時間:
2020-3-28 16:19
csmyldl 發表于 2020-3-28 15:51
void send(uchar d)
{
sending=1; //設置發送標志
非常感謝!用你這個代碼成功了
作者:
wulin
時間:
2020-3-28 17:47
你試試
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar buf;
//volatile unsigned char sending;
sbit led=P1^0;
//sbit sending = P1^1;
//申明函數
void delay(unsigned char i);
void send(uchar d);
void initUart(void);
void main(void)
{
//初始化串口
initUart();
while(1);
}
//初始化串口 9600
void initUart(void)
{
SCON=0x50;
PCON=0x00;
TMOD=0x20;
EA=1;
ES = 1;
TL1=0xfd;
TH1=0xfd;
TR1=1;
led = 0;
// sending = 0;
}
//發送一個字節的數據,形參d即為待發送數據。
void send(uchar d)
{
// sending=1; //設置發送標志
SBUF=d; //將數據寫入到串口緩沖
while(!TI); //等待發送中斷請求標志位為1
TI=0; //發送中斷請求標志位清0
}
/**
* 延時函數
**/
/*
void delay(unsigned char i)
{
uchar j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
*/
/*********************************************************
串口接收
*********************************************************/
void serial() interrupt 4
{
//收到數據
// if(RI){
RI=0; //清中斷請求
buf = SBUF;
led = ~led;
send(buf);
// }
// if(TI){
// TI=0;
// sending=0; //清正在發送標志
// }
}
復制代碼
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1