11.0592M晶振,可以使用絕大部分波特率,不在4800限制內!!!
你用的單片機都是比較高級的,我只有STC89C52RC的例子,不過是可以用的。
上位機:功能是將矩陣鍵盤的按鍵值,發送給從機(我的兩板開發板一模一樣),并接收從機發回的數據,通過LED燈的顯示,表示接收和發送數據的關系。如:主機發送9,那么回傳的數據也應該讓LED燈以二進制方式顯示9。/*
串口實驗:單片機與單片機之間的通訊,這是主機程序
*/
#include<reg51.h>
#define LED P2
#define JP P1
unsigned char JZ;
bit AJ;
void UsartConfiguration();
void Delay10ms(unsigned int c);
void KeyDown(void);
void main()//主函數
{
UsartConfiguration();
Delay10ms(10);
while(1)
{
KeyDown();
if (AJ==1)
{
AJ=0;
SBUF = JZ;
while (!TI);
TI = 0;
}
}
}
void UsartConfiguration()//設置串口
{
SCON=0X50;
TMOD=0X20;
PCON=0X80;
TH1=0XF3;
TL1=0XF3;
TR1=1;
EA=1;
ES=1;
}
void Delay10ms(unsigned int c)//延時10ms
{
unsigned char a, b;
for (;c>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}
}
}
void KeyDown(void)
{
unsigned char a=0;
JP=0x0f;
if(JP!=0x0f)
{
Delay10ms(1);
if(JP!=0x0f)
{
AJ=1;
switch(JP)
{
case(0X07): JZ=0;break;
case(0X0b): JZ=1;break;
case(0X0d): JZ=2;break;
case(0X0e): JZ=3;break;
}
JP=0Xf0;
switch(JP)
{
case(0X70): JZ=JZ;break;
case(0Xb0): JZ=JZ+4;break;
case(0Xd0): JZ=JZ+8;break;
case(0Xe0): JZ=JZ+12;break;
}
for (a=0;(a<50)&&(JP!=0xf0);a++)
{
Delay10ms(1);
}
}
}
}
void FSSZ(void) interrupt 4
{
RI=0;
LED=~SBUF;
Delay10ms(1);
}
從機程序:功能是接收主機發來的數據,并且用數碼管顯示出來,再將收到的數據發回主機。
#include<reg51.h>
#define SMG P0
unsigned char k;
unsigned char code XSM[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};
void UsartConfiguration();
void Delay10ms(unsigned int c);
void main()
{
UsartConfiguration();
Delay10ms(10);
while(1)
{
}
}
void UsartConfiguration()
{
SCON=0X50;
TMOD=0X20;
PCON=0X80;
TH1=0XF3;
TL1=0XF3;
TR1=1;
ES=1;
EA=1;
}
void Delay10ms(unsigned int c)
{
unsigned char a, b;
for (;c>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}
}
}
void CKTX() interrupt 4
{
RI=0;
k=SBUF;
SMG=XSM[k];
SBUF=k;
while (!TI);
TI = 0;
}
這個程序,就是我對你說的試驗程序。
先試驗兩程序與PC機間是否可以正常通訊,然后再試驗兩單片機是否可以正常通訊。
我用的板子電路是這樣的:
|