Re: 請問這程式碼那邊有問題(中斷+LED切換+LCD顯示)
|
||||
---|---|---|---|---|
版主
|
瞬間突波現象應該是軟體動到這隻腳,也許是對的,也許是不小心改到的。總之要知道軟提的執行的流程才可以知道這個瞬間突波是否正確。
發表於: 2007/3/27 15:57
|
|||
|
Re: 請問這程式碼那邊有問題(中斷+LED切換+LCD顯示)
|
||||
---|---|---|---|---|
版主
|
因為 Init LCD 只做一次而已,你把 RB7改為輸入後又沒有改回輸入還給人家,當然別人就送不出去 RB7 的控制信號。
發表於: 2007/3/23 14:33
|
|||
|
Re: 請問這程式碼那邊有問題(中斷+LED切換+LCD顯示)
|
||||
---|---|---|---|---|
初級會員
|
SORRY 我找到了
LCD模組 確實用RB7做致能開關 所以表示 RB7這個暫存器 我沒辦法用?! 謝謝你們給新手的指導 很感謝 **************************** 我又發覺問題了 = = 我是不是只要在SHOW_LCD的FUNCTION內 一開始就把RB7設成OUTPUT就好了 當換到SHOW_LED FUNCTION 再設定TRISB=0Xffff 這樣做法 其實是OK的!? 這些IO腳定義 如果不需要變動 是否就直接寫於MAIN 不用在FUNCTION內設定 以免重複呼叫FUNCTION 導致 多餘的重複設定動作?! 謝謝
發表於: 2007/3/22 20:20
|
|||
|
Re: 請問這程式碼那邊有問題(中斷+LED切換+LCD顯示)
|
||||
---|---|---|---|---|
初級會員
|
謝謝樓上兩位的回答喔
其實我不是很懂ADPCFG=0XFFFF這行在幹麻 我看書上 LED電路圖上(P6-7)也確實沒RB7 可是看(P5-20) 寫著RB0~RB8可以做雙向輸出入阿 @@我找不到哪個圖有說明RB7的接線 EN是? 另外問一下 我想利用IO輸出訊號 至外接LED上 八顆LED 我全給RB去做 可是很奇怪 RB8在訊號0的時候 還是會發生閃爍 極短暫的閃爍 (跟中斷時間一致) 就是單單這顆.......電阻有接了 同學跟我說 要外接BJT ? 以下是我的設定 ADPCFG = 0xffff ; //PORTB = 0xffff ; //其實我不知道MASK這行是啥原因 TRISB = 0x0000 ; //全部設定為OUTPUT LATB = 0xff00 ; //初始電壓接設為LOW (P6-3)圖 IO腳暫存器表格 反白的地方是?! 像我TRISB = 0x0000 ; 其實9~15bit是反白的區塊 我設定它 會有影響嗎 很謝謝!!
發表於: 2007/3/22 20:03
|
|||
|
Re: 請問這程式碼那邊有問題(中斷+LED切換+LCD顯示)
|
||||
---|---|---|---|---|
版主
|
樓上的找出你的問題點了;
看電路圖及LCD的程式,PORTB,7 (RB7) 是用來控制 LCD Module 的 Enable pin。I/O 重新規劃時要注意別把人的功能改掉了。 #define LCD_E LATBbits.LATB7 #define LCD_E_MODE ADPCFGbits.PCFG7 // Set RB7 as digital I/O
發表於: 2007/3/22 11:06
|
|||
|
Re: 請問這程式碼那邊有問題(中斷+LED切換+LCD顯示)
|
||||
---|---|---|---|---|
新會員
|
你好
問題在void Show_LED(void)副程式中!! 你應該要把TRISB = 0xffff 改為TRISB = 0xff7f ; 電路圖上RB7是EN的接腳,所以應該設為Output 程式我測試過了沒有問題,有問題再PO上來吧 Best Regards
發表於: 2007/3/21 23:45
|
|||
|
請問這程式碼那邊有問題(中斷+LED切換+LCD顯示)
|
||||
---|---|---|---|---|
初級會員
|
我是看了曾百由的範例
把中斷 IO輸出入 LCD顯示這三範例寫在一起 但我把IO輸出入這FUNCTION加進來 執行LCD卻無動作了 請問問題出在哪呢? 謝謝 似乎中斷 沒我想像中的好寫 @@ #define __dsPIC30F4011__ #include <p30F4011.h> #include "C30EVM_LCD.h" #include <timer.h> #define FCY 7372800 * 2 _FOSC(CSW_FSCM_OFF & XT_PLL8); _FWDT(WDT_OFF); _FBORPOR(PBOR_OFF & MCLR_EN); _FGS(CODE_PROT_OFF); const char My_String1[]="Stockton Test" ; char My_String2[]=" TIME : 00:00 " ; void Show_Time(void) ; void Show_LED(void); unsigned char Minute = 0 ; unsigned char Second = 0 ; unsigned int miliSec = 0 ; union { unsigned char ByteAccess ; struct { unsigned Bit0: 1 ; unsigned Bit1: 1 ; unsigned Bit2: 1 ; unsigned unused : 5 ; } ; } SystemFlag ; #define OneSecond SystemFlag.Bit0 #define LED7 LATBbits.LATB4 #define LED8 LATBbits.LATB5 #define DIR_LED7 TRISBbits.TRISB4 #define DIR_LED8 TRISBbits.TRISB5 #define OUTPUT 0 int LED_counter=0; void _ISR _T1Interrupt(void) { miliSec += 1 ; if (miliSec == 1000) { OneSecond = 1 ; miliSec = 0 ; } IFS0bits.T1IF = 0 ; } int main( void ) { OpenLCD( ) ; setcurLCD(0,0) ; putrsLCD( My_String1 ) ; setcurLCD(0,1) ; putrsLCD( My_String2 ) ; ConfigIntTimer1( T1_INT_PRIOR_7 & T1_INT_ON ) ; OpenTimer1( T1_ON & T1_IDLE_STOP & T1_GATE_OFF & T1_PS_1_1 & T1_SYNC_EXT_OFF & T1_SOURCE_INT , (FCY/ 1000) ) ; OneSecond = 0 ; while(1) { if ( OneSecond ) { Show_Time() ; Show_LED(); OneSecond = 0 ; Second += 1 ; if ( Second == 60 ) { Second = 0 ; Minute +=1 ; if ( Minute == 60 ) Minute = 0 ; } } } } /***********************************************/ // Subroutine to show Time on LCD void Show_Time(void) { setcurLCD(8,1) ; put_Num_LCD( Minute ) ; putcLCD(':') ; put_Num_LCD( Second ) ; } //////////////////////////////////// void Show_LED(void) { ADPCFG = 0xffff ; //PORTB = 0xffff ; TRISB = 0xffff ; LATB = 0xffff ; DIR_LED7 = OUTPUT ; DIR_LED8 = OUTPUT ; if(LED_counter%2==0) { LED7=0; LED8=1; } else { LED7=1; LED8=0; } LED_counter++; }
發表於: 2007/3/20 19:28
|
|||
|