Re: 新手求問 16F887 I/O
|
||||
---|---|---|---|---|
新會員
![]() ![]() |
因為我程式是用mplab sim來模擬PIC16F1936. 但是我手上唯一有的實物就是PIC16F887. 所以只是把原本的程式定義稍稍改變一下就拿來用.
另外.當我使用示波器接在RB2.RB3時. 開關dipSW的動作. 卻又正常了. 並不會關掉開關時電壓還是hold住的情況. 我是不是該找外部的電路圖來看? 另外不知道能不能並在一起詢問: 之前爬文曾經有人發生過change of interrupt的旗標RBIF無法消除. 有前輩查看數據手冊時發現硬體構造中的問題. 要重新讀過PORTB一次才能清除. 如今類似的情況也發生在pic16f1936的change of interrupt旗標. Data Sheet上並沒有寫明資料. 請問前輩當時是怎樣去找到這些腳位.暫存器的電路邏輯圖呢?
發表於: 2010/1/6 16:02
|
|||
|
新手求問 16F887 I/O
|
||||
---|---|---|---|---|
新會員
![]() ![]() |
請教各位先進. 目前想要使用change interrupt來做I2C
程式寫完以後在MPLAN SIM上模擬正常時. 打算拿APP001來DEBUG. 發現用來當SDA.SCL的兩個開關.RB3正常反應. RB2則像一隻偷油吃的老鼠...一上去就永遠下不來了 我又另外寫了一個檢查用的精簡程式. 發現SIM模擬還是正常. 但是這一次 RB2.RB3兩個再WATCH上完全沒有反應 (但是很奇怪是. RB3開關打開以後還是可以發生change interrupt). Data Sheet看上好久. 也實驗很多次.還是搞不懂. 能有前輩能指教我觀念哪裡疏忽了嗎? 謝謝. 下面是我用來實驗問題的程式...使用的是PIC16F887 #include <htc.h> #define SDA RB3 #define ANS_SDA ANS9 #define TRIS_SDA TRISB3 #define IOC_SDA IOCB3 #define SCL RB2 #define ANS_SCL ANS8 #define TRIS_SCL TRISB2 #define IOC_SCL IOCB2 #define READ 1 #define WRITE 0 #define TURE 1 #define FALSE 0 #define HOW_MUCH_TIME 5 /***********************I2C函式.整理好後會丟到I2C.C********************************************/ void InitI2C(void); long int Rise_Interrupt, Work_Interrupt; void main(void) { GIE = 1; InitI2C(); while(1){ } } /***********************組件區******************************************/ void InitI2C(void){ TRIS_SDA =1; TRIS_SCL =1; ANS_SDA = 0; ANS_SCL = 0; RBIE = 1; IOC_SDA =1; IOC_SCL =0; RBIF = 0; } /*************************中斷向量表******************************************/ static void interrupt isr(void) // Here be interrupt function - the name is { if(T0IF){ if(!TRIS_SCL) SCL = !SCL; T0IF = 0; } if(RBIF){ if(!IOC_SDA&&IOC_SCL){ Rise_Interrupt =1; } if(IOC_SDA&&IOC_SCL&&!SCL){ IOC_SDA = 0; } if(IOC_SDA&&IOC_SCL&&!SDA){ IOC_SCL = 0; Work_Interrupt = 0; } if(IOC_SDA&&!IOC_SCL&&SCL&&SDA){ IOC_SDA = 0; IOC_SCL = 1; Work_Interrupt = 1; } SDA =SDA; RBIF = 0; } }
發表於: 2010/1/4 18:42
|
|||
|
Re: 請教 MPLAB SIM的問題
|
||||
---|---|---|---|---|
新會員
![]() ![]() |
謝謝Ryang您的提醒. 該章節說明:
ANSEL0=1時. 數位INPUT. PULL UP. RAIE等等功能都會中斷. 如果直接在程式裡RA0. RA2寫入一個值. 也是出不來的. 所以不是模擬器的問題. 當時我光是認為關掉ADC enable bit就可以了事 0rz. 先前我確實沒有注意到ANSEL類比數位選擇. 只是感覺該關的都關了. 現在還是一樣的狀況. 所以到現在還在龜起來沉思中.
發表於: 2009/12/28 17:05
Edited by ranger75th on 2009年12月28日 18:06:19
|
|||
|
Re: 請教 MPLAB SIM的問題
|
||||
---|---|---|---|---|
新會員
![]() ![]() |
感謝BBL的提醒
![]() 我改採用RC0.RC1純數位接腳以後. Logic Analyzer視窗上確實出現波型 另外我也注意到當使用PORTA.B等跟AN共用的腳位時 出現了下面的警告: Pin(s) (0x02) on PORTA can not be stimulated due to being controlled by the A/D converter 依照警告與這網頁的說法: http://www.microchip.com/forums/printable.aspx?m=419512 所以我想說ADCON裡面把enable bit =0. 想說這樣應該代表所有腳位都沒有類比輸入. 結果是失敗的... 有沒有辦法挽救呢? 畢竟16f887上AN腳可是天殺的多....
發表於: 2009/12/25 10:30
|
|||
|
請教 MPLAB SIM的問題
|
||||
---|---|---|---|---|
新會員
![]() ![]() |
請教各位先進
目前我使用的IDEv8.0. 當我想要使用stimulus功能來模擬某腳位信號. 結果不管是同步信號 或是非同步信號. 都無法成功模擬 好比方說: 使用Pin/Register Action功能 Time Units 選擇cyc row1: Time(des)=1, AN0.AN1 bin值分別是1.0 row2: Time(des)=2, AN0.AN1 bin值分別是0.1 勾選Repeat after 3(des) Apply後存檔設定 我以為程式Build後執行應該可以在Logic Analyzer上觀察到週期信號. 結果什麼反應都沒出現. 就是clock simulus. asynch功能模擬也都沒成功過. 請問設定上哪裡出錯了?
發表於: 2009/12/25 9:42
|
|||
|