全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1430
推到 Plurk!
推到 Facebook!

hctl 2032 for pic30 問題

缺席
p886222
一般會員


發表:4
回覆:10
積分:2
註冊:2010-10-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-12-31 21:54:17 IP:140.118.xxx.xxx 訂閱
基本上我在pic18f4520寫,結果讀值非常正確,然後把它移值到16bit pic30f6015上,code  也沒改多少,如下
#include
#include
#define FCY 20000000/4
#define OE1 LATDbits.LATD9
#define SEL LATDbits.LATD8
#define RST LATDbits.LATD10
#define X_Y LATDbits.LATD11
_FOSC(CSW_FSCM_OFF & ECIO); // XT with 8xPLL oscillator, Failsafe clock off
_FWDT(WDT_OFF); // Watchdog timer disabled
_FBORPOR(PBOR_OFF & MCLR_EN); // Brown-out reset disabled, MCLR reset enabled
_FGS(CODE_PROT_OFF); // Code protect disabled
unsigned int i=0,high_byte=0,low_byte=0,count=0,P[600]={0},I=0;
void Init_Timer1(void) ;
void __attribute__((interrupt, no_auto_psv)) _T1Interrupt(void)
{
Nop();

OE1=0;
SEL=0;
high_byte=(PORTE);
Nop();
SEL=1;
Nop();
low_byte=(PORTE);
OE1=1;
count=((high_byte<<8)|low_byte);
P[I ]=count;
IFS0bits.T1IF = 0 ;
}
int main (void)
{
Init_Timer1() ;
LATE=0X0000;
PORTE=0x0000;
TRISE=0xFFFF; //PORTE設為輸入
TRISDbits.TRISD8=0; //SEL
TRISDbits.TRISD9=0; //OE
TRISDbits.TRISD10=0; //RESET
TRISDbits.TRISD11=0; //X/Y

OE1=1;
SEL=1;
X_Y=0;
RST=0;
Nop();
Nop();
RST=1; //把RST拉高

while(1)
{

}
}
void Init_Timer1(void) //每50ms中斷一次
{
ConfigIntTimer1( T1_INT_PRIOR_7 & T1_INT_ON ) ; // Timer1 的中斷優先等級設 7 (最高)
// Timer1 的中斷 ON
OpenTimer1( T1_ON & T1_IDLE_STOP & T1_GATE_OFF & // Timer1 的 Period 設為每 500 ms
T1_PS_1_64 & T1_SYNC_EXT_OFF & T1_SOURCE_INT ,
(long)((FCY)/1000)*50/64 ) ;
}


已上的code只有在中斷的地方寫法比較不同以外,我在pic18f4520上是沒問題的但移值過來,就是讀不正確,是用在16bit上要注意什麼嗎?
p886222
一般會員


發表:4
回覆:10
積分:2
註冊:2010-10-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-03-18 17:10:12 IP:140.118.xxx.xxx 訂閱
因為pic30的速度太快,所以在讀high byte and low byte 時 ,必需delay一小段時間
系統時間:2024-04-24 0:18:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!