其實這是個51單片機串口通信的小例子,課堂上老師說你們可以去嘗試弄一下,于是就去網(wǎng)上找一下資料,就做了這個實驗。
1.jpg (225.41 KB, 下載次數(shù): 29)
下載附件
2021-10-12 04:54 上傳
先把一個作為主機,用來發(fā)送數(shù)據(jù);另一個作為從機,用來接收數(shù)據(jù)。將兩個程序各自燒錄到對應的板子上去,并將主機的TX(P3.0)接到從機的RX(P3.1),主機的RX(P3.1)接到從機的TX(P3.1),便可以實現(xiàn)將主機的數(shù)據(jù)發(fā)送到從機上去,并在從機上實現(xiàn)功能,這時可以看到從機上流水燈的現(xiàn)象
主機發(fā)送代碼
- #include<reg51.h>
- unsigned char code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //流水燈控制碼
- void send(unsigned char dat) //數(shù)據(jù)發(fā)送程序
- {
- SBUF=dat; //將要發(fā)送的數(shù)據(jù)存入發(fā)送緩沖器中
- while(TI==0); //若發(fā)送中斷標志位沒有置1(正在發(fā)送數(shù)據(jù)),就等待
- TI=0; //若發(fā)送完成,TI自動置1,這里把它清零
- }
- void delay(void) //延時函數(shù)
- {
- unsigned char m,n;
- for(m=0;m<200;m++) //延時約50ms
- for(n=0;n<250;n++);
- }
- void main(void)
- {
- unsigned char i;
- TMOD=0x20; //定時器T1工作于方式2(可自動重裝的8位定時器)
- SCON=0x40; //串口工作方式1,不允許接收
- PCON=0x00; //波特率不倍增
- TH1=0xf4; //波特率為2400b/s
- TL1=0xf4;
- TR1=1; //啟動定時器T1(T1作波特率的發(fā)生器)
- while(1)
- {
- for(i=0;i<8;i++) //一共8位的流水燈控制碼
- {
- send(tab[i]); //發(fā)送數(shù)據(jù)
- delay(); //每50ms發(fā)送一次數(shù)據(jù)
- }
- }
- }
- 從機接收代碼
- #include<reg51.h>
- unsigned char receive(void) //數(shù)據(jù)接收函數(shù)
- {
- unsigned char dat;
-
- while(RI==0); //數(shù)據(jù)沒有接收完畢時等待接收
- RI=0; //接收完畢時清零
- dat=SBUF; //將接收緩沖器中的數(shù)據(jù)存入dat
- return dat; //將接收到的數(shù)據(jù)返回
- }
- void main(void)
- {
- TMOD=0x20; //設置定時器T1工作于方式2
- SCON=0x50; //串口工作方式1,允許接收數(shù)據(jù)
- PCON=0x00; //波特率不倍增
- TH1=0xf4; //波特率為2400b/s
- TL1=0xf4;
- TR1=1; //啟動定時器T1
- REN=1; //允許接收數(shù)據(jù)
- while(1)
- {
- P2=receive(); //將接收到的數(shù)據(jù)送到P1口顯示
- }
- }
復制代碼
|