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
|
|||
|
Re: 新手求問 16F887 I/O
|
||||
---|---|---|---|---|
版主
|
還沒細看你的程式先問你一個問題 : PIC16F887 內建Master IIC 介面了,為何要使用 I/O 腳來模擬 IIC 的功能?
發表於: 2010/1/6 13:30
|
|||
|
新手求問 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
|
|||
|