會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客





PIC16F886 output pin訊號異常
新會員
註冊日期:
2012/04/23 10:05
所屬群組:
註冊會員
文章: 14
等級: 2; EXP: 50
HP : 0 / 37
MP : 4 / 585
離線
我的環境是MPLAB IDE V8.92 + HI-tech compiler(PICC v9.83)
我想實現將INPUT pin狀態給OUTPUT pin
底下while loop裡面的三種寫法只有第三種寫法OUTPUT pin會和INPUT pin輸出相同訊號,前兩種寫法OUTPUT pin會輸出穩定的方波訊號

__CONFIG
(FOSC_INTRC_NOCLKOUT&WDTE_OFF&PWRTE_ON&MCLRE_ON&BOREN_ON&IESO_OFF&FCMEN_OFF&LVP_OFF&CP_OFF );

void main(void)
{
   
Setup();
    while(
1){
        
//第一種寫法
        
MCU_OUT=MCU_IN;
        
//第二種寫法
        
Flag=MCU_IN;
        
MCU_OUT=Flag;
        
//第三種寫法
        
if(MCU_IN==1){
           
MCU_OUT=1;
        }else{
           
MCU_OUT=0;
        }

    }

}


void Setup()
{
//~I/O
ANSEL=0;  //digital I/O
ANSELH=0;  //digital I/O

TRISB5=0;  //MCU_OUT,Output

TRISC7=1;//MCU_IN, input
  
//~Set internal oscillator to 8MHz.
OSCCON=0x71;

}

1月05日 14:20:18

Ryang 於 2017年01月05日 14:56:44
轉換PDF檔 列印


Re: PIC16F886 output pin訊號異常
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14047
等級: 72; EXP: 34
HP : 1070 / 1783
MP : 4682 / 69322
離線
這問題真得很單純簡單,但是就是看不出問題所在。可以找 FAE 或代理商的 FAE 現場了解一下嗎?

這不是完整的程式,可以提供一下完整的測試程式嗎?

1月06日 12:07:15
轉換PDF檔 列印


Re: PIC16F886 output pin訊號異常
新會員
註冊日期:
2012/04/23 10:05
所屬群組:
註冊會員
文章: 14
等級: 2; EXP: 50
HP : 0 / 37
MP : 4 / 585
離線
Hi Ryang,附件project分別兩組input/output,其中RC6的input pin較為單純僅外部pull high,而RC7的input pin是透過外部另一顆IC給訊號,但當RC6/RC7為high時,RB2/RB5兩output pin都會輸出方波訊號

附加檔案:


zip TTTT.zip 大小: 21.99 KB; 下載次數: 19

1月16日 16:09:16
轉換PDF檔 列印


Re: PIC16F886 output pin訊號異常
新會員
註冊日期:
2012/04/23 10:05
所屬群組:
註冊會員
文章: 14
等級: 2; EXP: 50
HP : 0 / 37
MP : 4 / 585
離線
這兩天找到原因了,問題在於我在define GPIO時(下面那行),只寫了static,沒有寫volatile的描述字在前面,當加上之後就可以排除上面提到的output pin訊號異常問題

但是否有人能幫忙解答沒有宣告"volatile"為什麼會導致這樣的異常呢?

static bit MCU_OUT @ ((unsigned)&PORTB*8+0);

2月09日 14:01:46
轉換PDF檔 列印


Re: PIC16F886 output pin訊號異常
新會員
註冊日期:
2010/11/02 15:13
所屬群組:
註冊會員
文章: 6
等級: 1; EXP: 47
HP : 0 / 11
MP : 2 / 233
離線
這問題我也碰過
查過組語才知 當寫 ABit=BBit;
組語會將 ABit清為0 再 OR BBit 然後做輸出
所以當ABit為Hi時 一瞬間會被拉Lo
這是C Complier的問題 不是邏輯的問題
乖乖用第三種寫法吧

2月09日 16:20:12
轉換PDF檔 列印


Re: PIC16F886 output pin訊號異常
高級會員
註冊日期:
2014/12/02 11:55
所屬群組:
註冊會員
文章: 82
等級: 8; EXP: 0
HP : 0 / 175
MP : 27 / 1387
離線
引用:

xxfishxx 寫道:
這兩天找到原因了,問題在於我在define GPIO時(下面那行),只寫了static,沒有寫volatile的描述字在前面,當加上之後就可以排除上面提到的output pin訊號異常問題

但是否有人能幫忙解答沒有宣告"volatile"為什麼會導致這樣的異常呢?

static bit MCU_OUT @ ((unsigned)&PORTB*8+0);



這是剛好關於你volatile和GPIO的解答,以下的東西是網路找來的

1. I/O, 假設有一程式片斷如下

U8 *pPort;
U8 i, j, k;

pPort = (U8 *)0x800000;

i = *pPort;
j = *pPort;
k = *pPort;

以上的i, j, k很有可能被compiler最佳化而導致產生
i = j = k = *pPort;
的code, 也就是說只從pPort讀取一次, 而產生 i = j = k 的結果, 但是原本的程式的目的是要從同一個I/O port讀取3次的值給不同的變數, i, j, k的值很可能不同(例如從此 I/O port 讀取溫度), 因此i = j = k的結果不是我們所要的, 那怎麼辦? => 用volatile, 將
U8 *pPort;
改為
volatile U8 *pPort;

告訴compiler, pPort變數具有揮發性的特性, 所以與它有關的程式碼請不要作最佳化動作. 因而
i = *pPort;
j = *pPort;
k = *pPort;
此三列程式所產生的code, 會真正地從pPort讀取三次, 從而產生正確的結果

2月09日 16:33:17
轉換PDF檔 列印






無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
線上教學影片
網頁捷徑
2017 Summer Elite 報名
教育訓練
其它網站連結
電話: 02-25000405
產品技術問題產品技術支援專線:0800-717718 台北02-25088600 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project