串行口方式3的運用 一、 設計要求甲乙兩個單片機進行方式3(或方式2)串行通訊。甲機將8個流水燈控制數據發送給乙機,乙機再利用該數據點亮其P1口的8個LED。方式3比方式1多了一個可編程位TB8,該位一般作奇偶校驗位。乙機接收到的8位二進制數據有可能出錯,需進行奇偶校驗,其方法是將乙機的RB8和PSW的奇偶校驗位P進行比較,如果相同,接收數據;否則拒絕接收。
二、 系統方案本系統主要由單片機控制模塊、AT80C51模塊、燈組模塊、電源模塊組成,下面分別論證這幾個模塊的選擇。
1、主控制器件的論證與選擇1.1.1控制器選用 單片機比較 方案一:采用傳統的51系列單片機。 傳統的51單片機有5個中斷源,12T模式,內部沒有或很少4K或8K的程序存儲器。51單片機是基礎入門的一個單片機,還是應用最廣泛的一種。需要注意的是51系列的單片機一般不具備自編程能力。 方案二:采用以增強型80C51內核的STC系列單片機 80C51有兩個16位定時計數器,兩個外中斷,兩個定時計數中斷,及一個串行中斷,并有4個8位并行輸入口。80C51內部有時鐘電路,但需要石英晶體和微調電容外接,本系統中采用12MHz的晶振頻率。由于80C51的系統性能滿足系統數據采集及時間精度的要求,而且產品產量豐富來源廣,應用也很成熟,故采用來作為控制核心。 STC單片機是1T的單片機,比傳統的51單片機要快很多,而且也增加了很多新的功能,增加了內部EEPROM存儲器,更方便保存數據。另一個特點,就是用串行口下載程序,使得燒錄程序更方便。 通過比較,我們選擇方案二。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (39.41 KB, 下載次數: 30)
下載附件
2018-12-27 13:27 上傳
單片機源程序如下:
- #include "reg52.h" //此文件中定義了單片機的一些特殊功能寄存器
- typedef unsigned int u16; //對數據類型進行聲明定義
- typedef unsigned char u8;
- u8 data_send;
- void usart_send(u8 data_send)
- {
- ACC=data_send;
- TB8=P;
- SBUF=data_send;
- while(!TI);
- TI=0;
-
-
- }
- void UsartInit()
- {
- SCON=0xd0; //設置為工作方式3
- TMOD=0X20; //設置計數器工作方式2
- //PCON=0X80; //波特率加倍
- TH1=0XFd; //計數器初始值設置,注意波特率是4800的
- TL1=0XFd;
- SM0=1;
- SM1=1;
- REN=1;
- ES=1; //打開接收中斷
- EA=1; //打開總中斷
- TR1=1; //打開計數器
- }
- void delay(u16 j) //1ms?????
- {
- u8 i=250;
- for(;j>0;j--)
- {
- while(--i);
- i=249;
- while(--i);
- i=250;
- }
- }
- void main()
- {
- UsartInit(); // 串口初始化
- while(1)
- {
- }
- }
- void Usart_rec() interrupt 4
- {
- RI=0;
- ACC=SBUF;//出去接收到的數據
- if(RB8==P)
- {
- P1=SBUF;
- }else{
- }
-
- }
復制代碼
所有資料51hei提供下載(發射+接收):
串行通訊.zip
(93.25 KB, 下載次數: 26)
2018-12-27 12:36 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|