• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
  • slider image 488
  • slider image 491
:::

論壇索引


Board index » All Posts




請問關於MPLAB新舊版本專案轉換一事
新會員
新會員


您好:
我是最近剛學習使用PIC的菜鳥,有幾個問題想請問各位前輩

1. 如何把舊版的專案(*.pjt)轉換成MPLAB v7.X版本的專案(*.mcp)?
2. 請問一下HI-TECH C 和 C18 之間有何差異,各適用在哪些場合?
3. 新華或力浦等協力廠商出的模擬器,和 Microchip 的 ICD2,主要的差異為何?我該怎麼選擇開發工具?

謝謝!!

發表於: 2005/7/5 16:38
頂部


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震盪
資深會員
資深會員


參照:

astonsun 寫道:
請問 12F675 12F629 16F676等內部RC震盪值存放在0x3FF位址,如何在燒錄時自動將校正值存入0x3FF內



這數值是出廠時便已設定好的 , 你只需把它取出填入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
          MOVLW   IIC_DATA_0            
;載入指標位址L
          MOVWF   FSR0L                 
;
寫入迴圈
          MOVFF   INDF0
,SSPBUF          ;送出資料
          INCF    FSR0L                 
;資料指標遞增
          CALL    WAIT_IIC              
;等待IIC傳送資料完成
          CALL    WAIT_ACK              
;等待回傳確認
          DECFSZ  EEP_W_CNT             
;寫入資料記數器-1後若不為0
          BRA     寫入迴圈              
;則繼續寫入資料
          BRA     IIC_STOP              
;停止IIC通訊

我把要傳送的資料丟到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
頂部



« 1 ... 7017 7018 7019 (7020) 7021 7022 7023 ... 7523 »



:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------