1. 3?? 單片機與DSP通信的軟件實現
在異步通信中必須先規定3 件事: 一是字符格式,即傳輸的每一幀數據的格式; 二是通信雙方要設置為相同的波特率, 且該波特率能適應雙方的時鐘頻率; 三是通信雙方要有約定的通信協議, 也就是雙方要互相確認后才能傳輸數據。
在本設計中, DSP 和單片機采用的數據幀格式是1 位起始位, 8 位數據位和1 位停止位。由于數據包采用校驗和的方式進行校驗, 因而在數據幀格式中沒有設置奇偶校驗位。因而MCS51 單片機應設置工作在串口方式1 狀態下, 此時串行口為8 位異步通信接口。為了保證數據傳輸具有較高的速率, 同時又有比較低的傳輸誤碼率, 因而選擇波特率為9600 b/ s。通過相應的波特率設置計算公式計算出DSP 和單片機的初始化時寄存器的初值, 即可完成設置。這樣就保證了通信雙方幀格式的統一和波特率的統一, 從而使數據通信正確、可靠[。
DSP 的串口初始化設置程序如下:
EALLOW;
GpioMuxReg s. GPGMUX. bit. SCIRXDB_GPIOG5 = 1;/ / 設置SCI??RX 引腳外設功能
GpioMuxReg s. GPGMUX. bit. SCIT XDB_GPIOG4 = 1;/ / 設置SCI??TX 引腳外設功能EDIS;
ScibRegs. SCICCR. all = 0x07; / / 1 位停止位, 無奇偶校驗,8 位字符長度, 使用空閑線模式協議
ScibRegs. SCICTL1. all = 0x 03;/ / 使能發送和接收緩沖
ScibRegs. SCICTL2. all= 0x 02;/ / 使能RXRDY 中斷, 禁止T XRDY 中斷
ScibRegs. SCIPRI. all = 0x0000;/ / 禁止接收錯誤中斷和休眠模式
ScibRegs. SCIH BAUD= 0x01;/ / LSPCLK = 37. 5 MH z, 波特率設為9 600 b/ s
ScibRegs. SCILBAUD = 0xE1; ??
ScibRegs. SCICTL1. all = 0x 0023;/ / 重新使能SCI
51 單片機串口初始化程序如下:
TMOD= 0x 21;/ / 定時器1 工作在方式2, 用于產生0 串口的波特率
SCON= 0x 50;/ / 串行口0 工作在方式1, 允許接收, 清標志位
TH 0= 0xfd; / / 晶振12 MH z, 設置波特率為9 600 b/ s
TH 1= 0xfd; PS= 1; / / 串口中斷優先
PCON| = 0x 00; / / 波特率不加倍
TR1= 1;
在本設計中, 采用自己規定的通信協議, 首先DSP發送出握手信號, C51 收到握手信號后, 進入中斷子程序, 判斷握手信號是否正確, 若正確才握手成功, 開始接收數據包, 接收完成后對數據進行和校驗, 正確后刷新液晶的顯示數據存儲區; 若錯誤則放棄本次數據, 并將接收數據存儲區清零, 等待下一次通信。其程序流程圖如圖3 所示。
?
圖3?? DSP 和單片機的通信程序流程圖
?
DSP 向單片機的定時發送程序如下:
ScibRegs. SCITXBUF = Sci_VarRx [ i] ;/ / 將數據包寫入發送緩沖區
i+ + ; / / 依次發送數據包
if( i= = 12) i= 0; / / 重新計數
IER | = M_INT1; / / 清除中斷標志位
EINT;
PieCtr lReg s. PIEACK. all = PIEACK_GROUP1;
51 單片機串口中斷服務程序如下:
Rx0_Buffer[ Rx0_Ptr] = SBUF; / / 讀取數據到接收數組
RI= 0; / / 清除接收標志位
Rx0_Ptr+ + ; / / 計數加1
Rx_flag= 1;
評論