此帖子適用于新手,本人也是新手,用于記錄總結經驗用,如果存在問題,請高手提出寶貴意見!
主要是用于兩個單片機之間通過串口傳遞數據使用,只是一個小測試,先上原理圖。
無標題.png (50.77 KB, 下載次數: 35)
下載附件
2019-8-10 20:06 上傳
COMA單片機源代碼如下:
//發送端單片機代碼如下:
#include <reg51.h>
unsigned char code tab0[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char code tab1[]={0xFF,0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01};
unsigned char code tab2[]={0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};
sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
void InitUART(void)
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xFD;
TL1 = TH1;
PCON = 0x00;
EA = 1;
ES = 1;
TR1 = 1;
}
void Send(unsigned char c)
{
SBUF = c;
while(!TI);
TI = 0;
}
void delay10ms(void) //誤差 0us
{
unsigned char a,b,c;
for(c=7;c>0;c--)
for(b=74;b>0;b--)
for(a=95;a>0;a--);
}
void delay(void)
{
unsigned char a,b,c;
for(c=46;c>0;c--)
for(b=152;b>0;b--)
for(a=70;a>0;a--);
}
void main(void)
{
unsigned char i;
InitUART();
while(1)
{
if(!k1)
{
for(i=0;i<sizeof(tab1);i++)
{
Send(tab1[ i]);[ i]
delay10ms();
}
delay();
}
else if(!k2)
{
for(i=0;i<sizeof(tab2);i++)
{
Send(tab2[ i]);[ i]
delay10ms();
}
delay();
}
else if(!k3)
{
for(i=0;i<sizeof(tab0);i++)
{
Send(tab0[ i]);[ i]
delay10ms();
}
delay();
}
}
}
void UARTInterrupt(void) interrupt 4
{
if(RI)
{
RI = 0;
//add your code here!
}
}
COMB單片機源代碼如下:
//接收端單片機代碼如下:
#include <reg51.h>
unsigned char receive(void)
{
unsigned char dat;
while(RI)
{
RI=0;
dat=SBUF;
return dat;
}
}
void InitUART(void)
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xFD;
TL1 = 0xFD;
PCON = 0x00;
EA = 1;
ES = 1;
TR1 = 1;
REN=1;
}
void main(void)
{
InitUART();
while(1)
{
P1=receive();
}
}
測試圖:
無標題.png (47.41 KB, 下載次數: 45)
下載附件
2019-8-10 20:17 上傳
|