![]() |
發布時間: 2019-4-16 15:31
正文摘要:如圖所示,用pcf8591通過AD轉換獲取數值并通過串口返回,圖為樣例程序現在不懂的點在于連寫了四個SUBF,在第一個SUBF操作完成后,發送中斷不就置1了嗎,這個程序是如何執行的。 此外,如果我只想通過串口返回D0光敏 ... |
非常感謝以上大佬,問題已經解決了 |
程序不全不好判斷。 |
/**********串口發送函數*************/ void SendOneByte(unsigned char c) { SBUF = c; //發送數據 while(!TI); //等待發送完成 TI = 0; //發送中斷請求標志位清0 } //發送字符串(這里4個字節:D[0]~D[3]) void xxxx() { unsigned char i; //其它語句 //........ ES=0; //關串口中斷(如果使用了串口中斷) for(i=0;i<4;i++) { SendOneByte(D[i]);//調用串口發送函數 } ES=1; //開串口中斷(如果使用了串口中斷) } |
在第一個SUBF操作完成后,需要等一段時間(串行發送需要時間的),串行完數據后,才將發送標記置1!然而,中斷是否發生還取決于,你讓不讓它中斷(中斷允許位是否已被你置1)。 程序中DELAY(200),就是等待它串行完成,而后再發第二個。可以猜到,“中斷允許位是被清0的,即不允許中斷”。 |
沒看全你的程序:估計程序不管發送中斷,就靠延時來發送; 延時發送不可取,應該用中斷發送,寫好發送中斷即可;這里面有好多工作要做。 |