freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

畢業(yè)設(shè)計論文單片機(jī)msp430與pc機(jī)串口通訊設(shè)計(參考版)

2024-11-11 23:05本頁面
  

【正文】 321 下位機(jī)程序設(shè)計 一下位機(jī)通訊協(xié)議 分布式控制系統(tǒng)中的下位機(jī)的每臺單片機(jī)均 有唯一的地址通信開始時先由PC機(jī)呼叫被叫單片機(jī)的地址單片機(jī)在接收到 PC機(jī)的呼叫后首先判斷是不是自己的地址如果不是就不予理睬如果是則發(fā)送呼叫應(yīng)答信號并根據(jù)上位機(jī)的命令進(jìn)行相應(yīng)的接收或發(fā)送 根據(jù)以上要求以及 UART 通信協(xié)議基本內(nèi)容可以將下位機(jī)通信協(xié)議設(shè)置如下表 表 31 下位機(jī)通訊協(xié)議格式 地 址 數(shù) 據(jù) 結(jié)束 地址取值 18 即上位機(jī)可以呼叫的 8 個下位機(jī)之一發(fā)送時地址位有效 數(shù)據(jù)取值 9127 為 ASCⅡ 可顯示字符 結(jié)束 0 二下位機(jī)程序流程圖 下位機(jī)單片機(jī)程序設(shè)計包括初始化設(shè)計串口中斷服務(wù)設(shè)計和主處理 程序設(shè)計本例雖然有多個下位機(jī)但他們除了本機(jī)地址的設(shè)置不同外其他硬件電路都是相同的所以各下位機(jī)的軟件設(shè)計也是相同的按照通信協(xié)議的要求可以設(shè)計出如圖 31 的下位機(jī)程序流程 圖 31 下位機(jī)單片機(jī)主程序流程圖 三初始化設(shè)置 初始化設(shè)置包括時鐘初始化端口初始化和串口初始化 1 時鐘初始化程序及說明 include include UARTh void Init_CLK void unsigned int i BCSCTL1 0X00 將寄存器的內(nèi)容清零 XT2 震蕩器開啟 LFTX1 工作在低頻模式 ACLK 的分頻因子為 1 do IFG1 ~ OFIFG 清除 OSCFault 標(biāo)志 for i 0x20i 0i while IFG1 OFIFG OFIFG 如果 OSCFault 1 BCSCTL2 0x00 將寄存器的內(nèi)容清零 BCSCTL2 SELM1 MCLK 的時鐘源為 TX2CLK 分頻因子為 1 BCSCTL2 SELS SMCLK 的時鐘源為 TX2CLK 分頻因子為 1 由上面的程序可以知道只要設(shè)置 BCSCTL1和 BCSCTL2寄存器的相應(yīng)位就可以獲得需要的 MCLKSMCLK 和 ACLK 的時鐘信號 2 端口初始化 void Init_Port void 將所有的管腳在初始化的時候設(shè)置為輸入方式 P3DIR 0 將所有的管 腳設(shè)置為一般 IO 口 P3SEL 0 return 上面的初始化程序?qū)?P3 口初始化為一般的 IO 接口 3 串口初始化 由于串口 1UART1 的管腳號為 P36 和 P37 端口初始化只是將端口設(shè)置為一般的 IO接口而本設(shè)計里需要將 P36和 P37作為 UART的輸出和輸入管腳所以這里需要對其另外初始化 UART1 的初始化程序代碼為 void Init_UART1 void U1CTL 0X00 將寄存器的內(nèi)容清零 UCTL1 ~ SWRST SWRDT 復(fù)位 UART 允許 UCTL1 CHARMM 8 位數(shù)據(jù)位 1 位停止位地址位模式 URCTL1 URXWIE 只有地址字符使 URXIFG 置位 UBR0_1 0X03 UBR1_1 0X00 UMCTL_1 0X4A 使用 32KHz 晶振時波特率為 9600bps U1TCTL 0x10 選定 ACLK32KHz 晶振為時鐘源 ME2 UTXE1 URXE1 使能 UART1 的 TXD 和 RXD IE2 URXIE1 使能 UART1 的 RX 中斷 IE2 UTXIE1 使 能 UART1 的 TX 中斷 P3SEL BIT6 設(shè)置 P36 為 UART1 的 TXD P3SEL BIT7 設(shè)置 P37 為 UART1 的 RXD P3DIR BIT6 P36 為輸出管腳 return 根據(jù)硬件設(shè)置的要求上面的程序設(shè)置了串口 1的參數(shù)比如 8位數(shù)據(jù)位 1位停止位地址位多機(jī)模式波特率發(fā)生器選擇 ACLK波特率為 9600波特秒等將 P36和 P37 設(shè)置為串口 1 的 IO 管腳 四串口中斷服務(wù)程序 串口接收和發(fā)送都采用中斷方式設(shè)計單片機(jī)通信程序時必須充分發(fā)揮單片機(jī)的 效率由于單片機(jī)多應(yīng)用于實時性較強(qiáng)的控制場合因此 應(yīng)將及時響應(yīng)和控制對象的動作放在優(yōu)先考慮的位置以盡量減少通信等輔助性操作所占用的 CPU 時間基于上述考慮在設(shè)計單片機(jī)通信程序時將程序分為接收中斷程序和發(fā)送中斷程序 2 部分 interrupt [UART1RX_VECTOR] void UART1_RX_ISR void if URCTL1URXWIE 接收為地址方式時等待正確的地址出現(xiàn) if URBUF_1 ADDRESS 地址正確改變接收為數(shù)據(jù)方式準(zhǔn)備接收 URCTL1 ~ URXWIE nRX1_Len_temp 0 else 接收為數(shù)據(jù)時 UART1_RX_BUF[nRX1_Len_temp] RXBUF1 數(shù)據(jù)存入 UART1_RX_BUF 里 nRX1_Len_temp 1 if UART1_RX_BUF[nRX1_Len_temp ] 0 是否到達(dá)停止位 nRX1_Len nRX1_Len_temp nRev_UART1 1 設(shè)置標(biāo)志來通知主程序 nRX1_Len_temp 0 URCTL1 URXWIE 數(shù)據(jù)收完改變?yōu)榈刂贩绞? 對于接收中斷程序處于等待狀態(tài)當(dāng)外面有數(shù)據(jù)到來時則觸發(fā)接收進(jìn)入接收中斷服務(wù)程序當(dāng)?shù)刂夫炞C正確開始后面的數(shù)據(jù)中斷從 RxBUF1 寄存器里讀取數(shù)據(jù)將讀到的數(shù)據(jù)放到 UART1_RX_BUF[ ]全局緩沖區(qū)里在接收數(shù)據(jù)之后設(shè)置一個標(biāo)志 nRev_UART1 來通知主程序完成后等待下一中斷的到來接收中斷服務(wù)程序包含了對地址位是 否匹配的驗證 2 發(fā)送中斷服務(wù)程序 當(dāng)主程序有數(shù)據(jù)要發(fā)送時設(shè)置一個中斷標(biāo)志進(jìn)入中斷并發(fā)送數(shù)據(jù)下面為程序代碼 interrupt [UART1TX_VECTOR] void UART1_TX_ISR void if nTX1_Len 0 nTX1_Flag 0 表示緩沖區(qū)里的數(shù)據(jù)沒有發(fā)送完 TXBUF1 0x01 先寫入地址字符 TXBUF1 UART1_TX_BUF[nSend_TX1] 開始傳輸數(shù)據(jù) nSend_TX1 1 if nSend_TX1 nTX1_Len 數(shù)據(jù)是否發(fā)送完 nSend_TX1 0 nTX1_Len 0 nTX1_Flag 1 緩沖區(qū)里沒有數(shù)據(jù)要發(fā)送了 對于發(fā)送中斷程序一般處于禁止等待狀態(tài)只有當(dāng)單片機(jī)的發(fā)送緩沖區(qū)歷由數(shù)據(jù)需要發(fā)送并將發(fā)送中斷置為允許方式后發(fā)送中斷才開始工作發(fā)送時從緩沖區(qū)里發(fā) 送數(shù)據(jù)遵守通訊協(xié)議首先發(fā)送地址位然后發(fā)送需要傳輸?shù)臄?shù)據(jù)最后發(fā)送校驗以及結(jié)束標(biāo)志在發(fā)送中斷服務(wù)程序里從 UART1_TX_BUF[ ]全局緩沖區(qū)里取出數(shù)據(jù)給 TXBUF1 寄存器進(jìn)行發(fā)送發(fā)送完后發(fā)送中斷服務(wù)程序等待下一中斷的到來 以上兩程序可以看出采用中斷有很好的結(jié)構(gòu)只要在中斷服務(wù)程序里理接收和發(fā)送數(shù)據(jù)然后與主程序進(jìn)行數(shù)據(jù)交換易實現(xiàn)多任務(wù)操作很好利用單片機(jī)資源 五主處理程序 主處理程序包含初始化設(shè)置串口工作方式對接收到的數(shù)據(jù)進(jìn)行處理以及封裝需要發(fā)送的數(shù)據(jù)下面是它的程序代碼 include include sp3220h 定義串口操作變量 char nRev_UART1 串口 1 的接收標(biāo)志 char UART1_TX_BUF[60] 串口 1 的發(fā)送緩沖區(qū) char UART1_RX_BUF[60] 串口 1 的接收緩沖區(qū) int nTX1_Len char nRX1_Len char nRX1_Len_temp char nTX1_Flag int nSend_TX1 void main void int nRes_UART1 int nRes 0 char UART1_RX_Temp[60] int i int n WDTCTL WDTPW WDTHOLD 關(guān)閉看門狗 _DINT 關(guān)閉中斷 Init_CLK 初始化時鐘 Init_Port 初始化端口 Init_UART1 初始化串口 1 _EINT 打開中斷 for 進(jìn)入處理循環(huán) if nRev_UART1 1 如果有接收中斷 nRev_UART1 0 for i 0i nRX1_Leni UART1_RX_Temp[i] UART1_RX_BUF[i] 將接收到的數(shù)據(jù)拷貝到臨時緩沖區(qū) nRes ProcessCMD UART1_RX_TempnRX1_Len switch nRes case 1 UART1_TX_BUF[0] O UART1_TX_BUF[1] K UART1_TX_BUF[2] 13 nTX1_Len 3 設(shè)置中斷標(biāo)志進(jìn)入發(fā)送中斷程序 IFG2 UTXIFG1 nRX1_Len 0 break case 2 for n 0n nRX1_Lenn UART1_TX_BUF[n] UART1_RX_Temp[n] UART1_TX_BUF[nRX1_Len] O UART1_TX_BUF[nRX1_Len1] K UART1_TX_BUF[nRX1_Len2] 13 nTX1_Len nRX1_Len 3 設(shè)置中斷標(biāo)志進(jìn)入發(fā)送中斷程序 IFG2 UTXIFG1 nRX1_Len 0 break case 1 UART1_TX_BUF[0] E UART1_TX_BUF[1] R UART1_TX_BUF[2] R UART1_TX_BUF[3] O UART1_TX_BUF[4] R UART1_TX_BUF[5] 13 nTX1_Len 6 設(shè)置中斷標(biāo)志進(jìn)入發(fā)送中斷程序 IFG2 UTXIFG1 nRX1_Len 0 break 在上面的程序中主要根據(jù) ProcessCMD UART1_RX_TempnRX1_Len 對得到的結(jié)果進(jìn)行處理向 PC 發(fā)送響應(yīng)數(shù)據(jù)如果接收到的數(shù)據(jù)有錯誤則發(fā)送 ERROR 數(shù)據(jù)封裝完成后設(shè)置 nTx1_Len的長度并通過 IFG2 UTXIFG1發(fā)送中斷從而使中斷處理程序進(jìn)行數(shù)據(jù)發(fā)送上面程序中 ProcessCMD UART1_RX_TempnRX1_Len 主要處理接收到的數(shù)據(jù)并返回相應(yīng)的代碼以使主程序處理該函數(shù)的具體代碼為 int ProcessCMD char pBuf[]int nLen int nTemp 1 int i if nLen 2 return 1 if nLen 5 if pBuf[0] A pBuf[1] T pBuf[2] E pBuf[3] 0 nTemp 1 if pBuf[0] A pBuf[1]
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1