|
大家好,由于我剛學(xué)單片機(jī),很多不懂,
需要一個問題 兩個單片機(jī)串口通訊,a發(fā)射1
給b b點(diǎn)亮小燈,現(xiàn)在測試b接收程序沒有問題,發(fā)射有問題自己,無法解決請求大家解答。
以下是程序
接收和發(fā)射
#include "reg52.h" //此文件中定義了單片機(jī)的一些特殊功能寄存器
typedef unsigned int u16; //對數(shù)據(jù)類型進(jìn)行聲明定義
typedef unsigned char u8;
sbit led=P2^6;
void UsartInit()
{
SCON=0X50; //設(shè)置為工作方式1
TMOD=0X20; //設(shè)置計數(shù)器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //計數(shù)器初始值設(shè)置,注意波特率是4800的
TL1=0XF3;
ES=1; //打開接收中斷
EA=1; //打開總中斷
TR1=1; //打開計數(shù)器
}
void main()
{
UsartInit(); // 串口初始化
while(1);
}
void Usart() interrupt 4
{
u8 receiveData;
receiveData=SBUF;//出去接收到的數(shù)據(jù)
if( receiveData=='1' )
{
led=0;
}
RI = 0;//清除接收中斷標(biāo)志位
}
接收是上面,發(fā)射是下面
#include "reg52.h" //此文件中定義了單片機(jī)的一些特殊功能寄存器
typedef unsigned int u16; //對數(shù)據(jù)類型進(jìn)行聲明定義
typedef unsigned char u8;
sbit k1=P3^1;
void delay(u16 i)
{
while(i--);
}
void UsartInit()
{
SCON=0X50; //設(shè)置為工作方式1
TMOD=0X20; //設(shè)置計數(shù)器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //計數(shù)器初始值設(shè)置,注意波特率是4800的
TL1=0XF3;
ES=1; //打開接收中斷
EA=1; //打開總中斷
TR1=1; //打開計數(shù)器
}
void main()
{
UsartInit(); // 串口初始化
while(1);
}
void Usart() interrupt 4
{
u8 receiveData;
SBUF=receiveData;//將接收到的數(shù)據(jù)放入到發(fā)送寄存器
{
if(k1==0) //檢測按鍵K1是否按下
{
delay(1000); //消除抖動 一般大約10ms
if(k1==0) //再次判斷按鍵是否按下
{
SBUF='1';
}
while(!k1); //檢測按鍵是否松開
}
}
TI=0; //清除發(fā)送完成標(biāo)志位
}
|
|