ADC conversion and EUSART
|
||||
---|---|---|---|---|
新會員
|
各位好,我在使用PIC16F1823的ADC和EUSART發現了一個奇怪的情況
開發環境為 MPLAB X IDE 5.50+XC8 2.31+MCC 4.2.3, debugger tool is PICKit3,使用C語言 程式內容大概如下 我在protect_status(void)中去讀取ADC,並將轉換值和預設值做比較 比較完回傳一個unsigned char到main,然後將其從EUSART輸出 然後問題就發生了,在我正常送電開機時 3組ADC輸入理應尚未有電壓進來,值應該是趨近於0,亦不會大於參考值,對應bit也會是0 所以protect輸出會是0才對,但EUSART讀出來的protect卻是0x02,04,08,0E....等亂跳,跳了幾次之後才能持續讀到0 可我使用debug mode用breakpoint設在EUSART_Write這行去看,不管怎麼跳怎麼看protect在debug mode裡面一直都是0x00沒有其他亂跳的值 原本我以為是我EUSART設置的問題,但程式跑出來卻是正確的,例如EUSART丟0x02(先假設EUSRT是對的)出來便是跳至portect是0x02的程式執行指令,丟0x04做0x04的指令....等等,所以算是排除EUSART錯誤 後來甚至將3組ADC輸入直接接地讓input = 0後也是如此,所以就變成我接上tool去debug mode看都正常,拿掉tool直接勾EUSART然後用正常開機的方式去讀EUSART都會看到他在亂跳,以至於我不知道是什麼問題造成的 程式如下,不知道是不是我設置上面的問題還是程式有錯誤 --------------------------------------------------------------------------------------------------- main { ...........//省略 while(1) { ...........//省略 protect = protect_status(); EUSART_Write(protect); ...........//省略 } } uint8_t protect_status(void) { ...........//省略 設定變數; ADC_OTP=ADC_GetConversion(AN4); ADC_OVP=ADC_GetConversion(AN5); ADC_OCP=ADC_GetConversion(AN6); ...........//省略部分指令,指令內容如下敘述 分別針對三個ADC抓取參數和reference做比較 大於reference分給給應變數(OVP,OCP,OTP)1否則0; ...........//省略部分指令,指令內容如上敘述 //set ovp at protect[3], ocp at protect[2], otp at protect[1], protect[1] is 0 protect=OVP+OCP+OTP return protect }
發表於: 2021/8/6 10:22
|
|||
|