關於ice2000問題
|
||||
---|---|---|---|---|
高級會員
|
1. MPLAB IDE +ICE2000 模擬PIC18F8720我要如何看到EEPROM MEMORY 區域內容
2. ICE 2000模擬EEPROM 是真的EEPROM嗎?如果關掉ICE 2000電源資料會消失嗎? 因為我怕寫入太多次造成ICE2000損壞
發表於: 2005/3/15 12:09
|
|||
|
關於靜電問題
|
||||
---|---|---|---|---|
高級會員
|
使用pic18f8720 and pic18f452
我是使用LCM模組與PIC18F8720 OR PIC18F452通信 我的LCM是圖像矩陣式當使用靜電槍打在機子(大約4KV)LCM出現亂碼 我有量D0~D7 DATA BUS都會出現異常信號 所以導致DATA錯誤造成顯示會有亂碼 不知哪位大哥有此經驗
發表於: 2005/3/14 16:01
|
|||
|
Re: 請底下網友跟我連絡: (要送贈品)
|
||||
---|---|---|---|---|
高級會員
|
作夢也想不到發言也可以拿獎品
真是感恩啊
發表於: 2005/3/14 15:35
|
|||
|
Re: 無線電干擾問題
|
||||
---|---|---|---|---|
高級會員
|
發表於: 2005/1/29 11:01
|
|||
|
Re: 請問一下看門狗的意義..怎麼用?
|
||||
---|---|---|---|---|
高級會員
|
26.1 簡介
看門狗計時器(WDT)是一個運行在片內的RC 振盪器,它不需要任何的外接元件。圖26-1 為 看門狗計時器的結構框圖。該RC 振盪器獨立於OSC1/CLKIN 引腳上的RC 振盪器。這樣,即使 器件的OSC1 和OSC2 引腳上的時鐘停振(例如執行了SLEEP指令),WDT 仍將正常工作。 有一個器件配置位元是控制看門狗計時器(WDT)的使能/ 關閉。如果WDT 被使能,就不能通過 軟體關閉此功能。 看門狗計時器(WDT)的操作 在正常操作期間,一次WDT 超時溢出將產生一次器件復位。如果器件處於休眠狀態,一次WDT 超時溢出將喚醒器件,使其繼續正常操作(即稱作WDT 喚醒)。對WDTE 設置位清零可以永久 性地關閉WDT。 後分頻器分配完全是由軟體控制,即它可在程式執行期間隨時更改。 注: 為避免發生不可預測的器件復位,當從Timer0 預分頻器的分配改為WDT 後分頻器 的分配時,必須執行下列指令序列(如例26-1 所示)。即使WDT 被禁止,也要執 行這個指令序列。 在例26-1 中,如果需要的預分頻值不是1:1,就不需要對OPTION_REG 寄存器做初始修改。如 果需要的預分頻值是1:1,那麼先向OPTION_REG 設置一個非1:1 的臨時預分頻值,在完成其 它操作後,在最後修改OPTION_REG 時再設置1:1 的預分頻值。這樣操作,主要是因為無法知 道TMR0 預分頻器的當前計數值,而且分頻器更改後,該值將變為WDT 後分頻器的當前計數值, 所以必須遵循示例中的代碼順序。如果沒有按照示例中的代碼順序改變OPTION_REG 寄存器, 那麼無法準確得知WDT 復位前的時間。 26.3.1 WDT 週期 WDT 的超時溢出週期在不使用後分頻器時的典型值為18ms。這個週期隨著溫度、VDD 和製造工 藝偏差而不盡相同(見DC規範)。如果需要更長的超時溢出週期,可以用軟體設置OPTION_REG 寄存器,把後分頻器分配給WDT ;這時最大分頻率可達1:128,可以實現2.3s 左右的超時溢出 週期。 CLRWDT 和SLEEP 指令將對WDT 和後分頻器(如果分配給WDT)清零,防止其超時而引起器件複 位 。 看門狗計時器超時溢出使WDT 重定(正常工作狀態下)或WDT 喚醒(休眠狀態下),同時狀 態寄存器中的TO 位將被清零。 26.3.2 WDT 編程注意事項 在最惡劣的情況下(VDD 最小、溫度最高、WDT 後分頻比最大),要過幾秒鐘WDT 才會發生 超時溢出,因此在編寫程式時要考慮到這一點。 表26-1: 和看門狗計時器有關的寄存器 注: 當後分頻器分配給WDT 時,在改變後分頻值前應務必先執行一條CLRWDT 指令,否 則可能會發生WDT 復位。
發表於: 2005/1/29 10:56
|
|||
|
Re: p16f877, 關TMR1中斷使用問題
|
||||
---|---|---|---|---|
高級會員
|
ORG 0x000 ; processor reset vector
clrf PCLATH ; 保證頁位元被清除 goto main ; 到程式開始位址 ;************************************** ;*** INTERRUPT SERVICE ROUTINE *** ;*** PROGRAM BY LEE-CHIN-WEI *** ;*** INITIAL DATE : 2003-06-09 *** ;************************************** ORG 0x004 ; 中斷向量位址 movwf w_temp ; save off current W register contents movf STATUS,w ; move status register into W register movwf status_temp ; save off contents of STATUS register BTFSS INTCON,T0IF ; TIMER INT 0 FLAG == 1 ? GOTO END_INT ; NO THEN RETURN BCF INTCON,T0IF ; YES THEN CLEAR T0IF FLAG BSF F_TMAIN ; SET THE MAIN LOOP FLAG=1 MOVLW .6 MOVWF TMR0 ; isr code can go here or be located as a call subroutine elsewhere END_INT: movf status_temp,w ; retrieve copy of STATUS register movwf STATUS ; restore pre-isr STATUS register contents swapf w_temp,f swapf w_temp,w ; restore pre-isr W register contents retfie ; return from interrupt ;********************************************* ;*** MAIN SERVICE ROUTINE ;*** INITIAL DATE 2003-06-09 ;********************************************* main CALL INIT_IO ; initial all IO port CALL CLEAR_ALL_MEMORY ; clear all memory CALL SYSTEM_INITIAL ; the system initial service routine LOOP: CALL KEY_SCAN ; KEY SCAN CALL KEY_DEBOUNCE_PROC ; KEY DEBOUNCE PROCESS CALL CHECK_SYSTEM_TIME ; CHECK THE SYSTEM TIME CALL FUN_PROC LOOP1: BTFSS F_TMAIN ; GOTO LOOP1 ; BCF F_TMAIN ; NOP ; GOTO LOOP ; ;************************************** ;*** SYSTEM INITIAL SERVICE ROUTINE *** ;*** INITIAL DATE : 2003-06-09 *** ;*** PROGRAM BY LEE-CHIN-WEI *** ;************************************** SYSTEM_INITIAL: BANKSEL OPTION_REG ;OPTION_REG IN RAM BANK 1這一點要特別注意 MOVLW B'00000011' ; 1:16 FOR TIMER MOVWF OPTION_REG BSF INTCON,GIE BSF INTCON,T0IE BANKSEL TMR0 MOVLW .6 MOVWF TMR0 RETLW 0 我想你可能忘了切BANK 我在systems_initial第一行註解你可以看一下
發表於: 2005/1/11 13:34
|
|||
|
Re: p16f877, 關TMR1中斷使用問題
|
||||
---|---|---|---|---|
高級會員
|
把程式貼上
這樣很難替你診斷
發表於: 2005/1/11 13:28
|
|||
|
Re: ICD2 的問題??
|
||||
---|---|---|---|---|
高級會員
|
traget board 電源接了嗎?
ICD2接線對嗎 ICD2自身電源有接嗎?
發表於: 2005/1/7 17:12
|
|||
|
Re: encoder問題請教
|
||||
---|---|---|---|---|
高級會員
|
if ( ( INTCON3bits.INT1IE == 1 ) && ( INTCON3bits.INT1IF == 1 ) )
{ INT1_CHATTER = 100; // INT1_CHAT = 100 = 抑制雜訊出現的次數 = JOG chatter 的處理 while ( ( P_JOG1 == 1 ) && ( INT1_CHATTER != 0 ) ) // 對策雜訊的千擾 { INT1_CHATTER--; DLY10US(); } while ( ( P_JOG1 ==0 ) && ( INT1_CHATTER != 0 ) ) /* Low_Level */ { if ( P_JOG2 == 0 ) { JOG_CW(); } else if ( P_JOG2 == 1 ) { JOG_CCW(); } break; } F_CUESET = 1; //CUE SET F_POWER_ON = 0; //CUE SET INTCON3bits.INT1IF = 0; // Clear INT1 interrupt flag } void JOG_CW() { F_JOGCW=1; F_JOGCCW=0; JOG_BUF++; // BUFF + 1 if ( JOG_SPD.bit7 == 1 ) JOG_SPD.all = 0x01; // 反轉 -> 正轉 -> (ENCSPD)=01H ;<<JOG>> else JOG_SPD.all++; // speed counter + 1 ;<<JOG>> } void JOG_CCW() { F_JOGCW=0; F_JOGCCW=1; JOG_BUF--; // BUFF - 1 if ( JOG_SPD.bit7 == 0 ) JOG_SPD.all = 0x81; // 正轉 -> 反轉 -> (ENCSPD)=81H ;<<JOG>> else JOG_SPD.all++; // speed counter + 1 ;<<JOG>> } 嘿嘿
發表於: 2005/1/7 17:02
|
|||
|