I2C Slave Mode一問
|
||||
---|---|---|---|---|
中級會員
|
請問一下~~~
我用18F452模擬I2C Slave Mode時~~~ 在什麼情況下SSPSTA會讀到0xB0??? 這又代表什麼意思??? 因為如果正常的情況~~~ 會是讀到0x8C,0xAC........... 謝謝~~~
發表於: 2005/7/5 16:12
|
|||
|
pwm
|
||||
---|---|---|---|---|
新會員
|
各位高手....
我寫了一個簡單的抓pwm程式,可是想請問是否可以讓我的程式執行下來更有效率,以方便我抓到更小的pwm波寬值,麻煩高手指教,謝謝。 我的程式如下: #include <p18f452.h> #include <usart.h> #include <delays.h> #include <timers.h> #include <stdlib.h> #include <portb.h> #define UART_40Mhz_19200 129 void external_int(void); unsigned char a[7]; unsigned char PWM_out[8]; union { unsigned char One_Byte[2]; unsigned int Two_Byte[1]; }Buff; #pragma code high_vector=0x0008 // high priotity interrupt isr void high_interrupt (void) {_asm goto external_int _endasm} #pragma code //********* Port B chagne detect ********* #pragma interrupt external_int void external_int() { //** INT0 ********************************************** if(INTCONbits.INT0IF){ WriteTimer1(0); TMR1H=0; TMR1L=0; INTCONbits.INT0IF=0; // clear INT0IF } //**** INT 1 ********************************************** if(INTCON3bits.INT1IF){ //x=ReadTimer1(); Buff.One_Byte[0]=TMR1L; Buff.One_Byte[1]=TMR1H; INTCON3bits.INT1IF=0; } } #pragma //**********************************************// void main(){ // Setup UART for 9600bps with 20MHZ for high speed OpenUSART(USART_TX_INT_OFF& USART_RX_INT_OFF& USART_ASYNCH_MODE& USART_EIGHT_BIT& USART_CONT_RX& USART_BRGH_HIGH,UART_40Mhz_19200); //Setup Timer1 OpenTimer1(TIMER_INT_OFF& T1_16BIT_RW& T1_SOURCE_INT& T1_PS_1_1); //Initialize Ports TRISB=0b00000011;// set RB5-RB4 for input on change TRISCbits.TRISC2=1;// CCP1 TRISCbits.TRISC6=0; TRISCbits.TRISC7=1; TRISD=0; // PORTD all output PORTB=0; PORTD=0; // Set up interrupt control bit PIR1bits.TMR1IF=0; // clear timer1 IF // setup INT0 INTCONbits.INT0IE=1; INTCONbits.INT0IF=0; INTCON2bits.INTEDG0=1;// set INT0 for Rising Edge // setup INT1 INTCON3bits.INT1IE=1; INTCON3bits.INT1IF=0; INTCON2bits.INTEDG1=0;// set INT1 for Falling Edge INTCON3bits.INT1IP=1;// set for Low Priority RCONbits.IPEN=1; // enable priority interrupt INTCONbits.PEIE=1;// enable peripheral interrupt INTCONbits.GIE=1;// enable global interrupt putrsUSART("\r AS5040 PWM Measurement \n\r"); while(1) { //ltoa(x,a); ltoa(Buff.Two_Byte[0],PWM_out); putrsUSART("\rPWM "); Delay10KTCYx(1); //putsUSART(a); putsUSART(PWM_out); putrsUSART("\n"); } }
發表於: 2005/7/5 8:04
|
|||
|
Re: ECCP用于捕捉的问题
|
||||
---|---|---|---|---|
資深會員
|
TIMER3 -> 16 bit PRESCALE 1:8 -> 3 bit 19 bit -> 512 K 20MHz -> 5 MIPs SO MAX TIME --> 0.1 Sec -> 10 Hz PRESCALE 或許需要再調高一點會更好 不會 18 不懂 C
發表於: 2005/7/5 3:36
|
|||
|
Re: 程式指點...
|
||||
---|---|---|---|---|
資深會員
|
PCL --> PROGRAM COUNTER 的 LOW BYTE
執行第 ( 幾 ) 個指令的參考值 本來是執行一個指令 便加一 但 ADDWF PCL ,F 會再加上放在 W 的值 所以便會跳過 W個 指令 例如 W = 0 則 會執行 第一個 (沒跳) 指令 retlw b'00000001' 例如 W = 5 則 會執行 第六個 (跳五個) 指令 retlw b'00000100' RETLW 返回時 會將一個值 放在 W 內( 如 b'00000001' ) 所以這種程式寫法 通常都叫做查表法
發表於: 2005/7/5 3:06
|
|||
|
Re: 如何設定內部RC震盪
|
||||
---|---|---|---|---|
資深會員
|
參照:
這數值是出廠時便已設定好的 , 你只需把它取出填入OSCCAL 便行 bsf STATUS, RP0 ;Bank 1 call 0XFFh ;Get the cal value movwf OSCCAL ;Calibrate bcf STATUS , RP0 ;Bank 0 規格書 : DS41190C-page 54 9.2.5.1 Calibrating the Internal Oscillator 如此便能得到較正確的震盪值
發表於: 2005/7/5 2:34
|
|||
|
如何設定內部RC震盪
|
||||
---|---|---|---|---|
初級會員
|
請問 12F675 12F629 16F676等內部RC震盪值存放在0x3FF位址,如何在燒錄時自動將校正值存入0x3FF內
發表於: 2005/7/4 23:58
|
|||
|
程式指點...
|
||||
---|---|---|---|---|
中級會員
|
大家好 我照著書上範例測試 可以work 但是我不明白
addwf PCL,f 是要幹麻ㄉ 請指點 謝謝 list p=16F873a #include <p16f873a.inc> ; Include file locate at defult directory w_temp equ 0x20 STATUS_temp equ 0x21 scaler equ 0x22 blankcnt equ 0x23 maxcount equ 0x32 ;******************************************** ;********************************************* org 0x00 nop goto Main org 0x04 goto IntServ IntServ movwf w_temp swapf STATUS_temp,w movwf STATUS_temp btfsc PIR1,TMR1IF call Timer1 swapf STATUS_temp,w movwf STATUS swapf w_temp,f swapf w_temp,w retfie Timer1 banksel PIR1 bcf PIR1,TMR1IF decf scaler,f clrf TMR1L movlw 0xf8 movwf TMR1H movlw 0x2f movwf TMR1L return ;----------------------main---------------------------------------------------------- Main call initial loop call Blink call looptime goto loop ;------------------------------------------------------------------------------------- initial banksel maxcount movlw maxcount movwf blankcnt movlw b'11111111' movwf PORTB movlw 0x04 movwf scaler banksel TRISB clrf TRISB banksel T1CON clrf T1CON clrf TMR1H clrf TMR1L clrf INTCON bsf INTCON,PEIE banksel PIE1 clrf PIE1 bsf PIE1,TMR1IE banksel PIR1 clrf PIR1 banksel TMR1L clrf TMR1L movlw 0xf8 movwf TMR1H movlw 0x2f movwf TMR1L bsf T1CON,TMR1ON banksel INTCON bsf INTCON,GIE return ;----------------Blink-------------------------------------------------------------------------- Blink decfsz blankcnt,f goto blinkend movlw maxcount movwf blankcnt call blinktable xorwf PORTB,f blinkend return ;----------------table-------------------------------------------------------------------------- blinktable movf PORTB,w andlw b'00000111' addwf PCL,f retlw b'00000001' retlw b'00000011' retlw b'00000110' retlw b'00000010' retlw b'00000101' retlw b'00000100' retlw b'00000111' retlw b'00000110' ;---------------------looptime----------------------------------------------------------------- looptime btfss scaler,7 goto looptime movlw 5 addwf scaler,f return ;------------------------ end
發表於: 2005/7/4 22:46
|
|||
|
請問有哪些指令會更改FSR?
|
||||
---|---|---|---|---|
資深會員
|
PIC18F452
我有一堆資料要傳送 由於我都依序放在一個變數區塊裡 (應該是屬於檔案暫存器吧?) 我的方式是
CLRF FSR0H ;清除檔案暫存器指標位址H
我把要傳送的資料丟到IIC_DATA_0 ~ IIC_DATA_15 然後用這副程式依序丟出去 剛剛模擬結果是沒問題 不過我目前沒開中斷 在考慮進中斷前是否需要備份FSR0L這個指標值... 目前試MOVFF MOVWF這兩個指令不會更動FSR0L的值 看了指令集,只要我不使用LFSR這指令 整個程式就都不會動到FSR暫存器了是吧?!
發表於: 2005/7/4 14:51
|
|||
|
rs232一問
|
||||
---|---|---|---|---|
高級會員
|
各位前輩:小弟我想要利用外部中斷int1取代鍵盤傳一字元到電腦終端機上再利用ReadUSART()收中斷將此一字元回傳到pic~~~字元能順利送出,但pic一直收不到資料~~~不知道哪裡有錯,請各位指點
發表於: 2005/7/4 14:20
|
|||
|