PIC 877A Debugger
|
||||
---|---|---|---|---|
新會員
|
將溫度(數值) 心電、呼吸變化(圖形)
取值做AD轉換 不知是哪錯了 一直組譯不過去.... #include <p16f877a.h> char ECGbufh,ECGbufl,Wbufh,Wbufl,Tmrh,Tmrl,Alltmr,breathebufh,breathebufl; int IDX; void SYSTEMinit(void); //副程式 void Delay_x_mS(int); //定義延遲副程式 void Delay_1mS(void); char TMR1H_Cary=0; double OK; char ex_int_flag=0; //中斷旗標 void interrupt isr_Sevr ( void ) { if(INTF==1) //中斷觸發 { INTF=0; if(ex_int_flag==0) // { TMR1ON=1; //1=啟用Timer1 ex_int_flag=1; // } else { TMR1ON=0; //Timer1歸回初始值 ex_int_flag=0; Tmrh=TMR1H; Tmrl=TMR1L; Alltmr=TMR1H_Cary; TMR1H=0x00; TMR1L=0x00; TMR1H_Cary=0X00; } } else if(TMR1IF==1) { TMR1IF=0; TMR1H_Cary++; if(TMR1H_Cary==0x00) { TMR1H=0X00; TMR1L=0X00; ex_int_flag=0; TMR1ON=0; } } } void main (void) //主程式 { SYSTEMinit(); //晶片初始化設定 while(OK < 1000) { Delay_x_mS(2); ADCON1=0x80; //1000 0000 右對齊;FOSC/32;Channel-0(AN0);0=A/D轉換模塊關閉和不消耗工作電流 ADCON0=0x89; //1000 1001 右對齊;FOSC/32;Channel-1(AN1);1=A/D轉換模塊通電 IDX=0X00; Delay_x_mS(2); ADGO=1; //開始A/D轉換 while(!(ADIF==1 && IDX==0)); Wbufh=ADRESH; //Wbufh=A/D轉換結果存到暫存器高位元 Wbufl=ADRESL; //Wbufl=A/D轉換結果存到暫存器低位元 ADIF=0; // while(!(ADIF==0 && IDX==0)); ADCON0=0x91; //1001 0001 FOSC/32;Channel-2(AN2);1=A/D轉換模塊通電 Delay_x_mS(2); ADGO=1; //開始A/D轉換 while (!(IDX==0 && TRMT==1)); // TXREG=0xF0; //送溫度檔頭傳到TXREG(傳送暫存器) while(!(IDX==0 && TRMT==1)); TXREG=0xFF; //溫度檔頭傳到TXREG(傳送暫存器) while(!(IDX==0 && TRMT==1)); TXREG=Wbufh; //將溫度高位元資料傳到TXREG(傳送暫存器) while(!(IDX==0 && TRMT==1)); TXREG=Wbufl; //將溫度低位元資料傳到TXREG(傳送暫存器) IDX=0X01; // OK++; ADIF=0; } while(1) { ADCON1=0x80; //1000 0000 FOSC/32;Channel-0(AN0);0=A/D轉換模塊關閉和不消耗工作電流 ADCON0=0x81; //1000 0001 FOSC/32;Channel-2(AN2);1=A/D轉換模塊通電 Delay_x_mS(2); ADGO=1; //開始A/D轉換 IDX=0X00; while(!(ADIF==1 && IDX==0)); ECGbufh=ADRESH; //將轉換結果暫存器高位元傳到ECGbufh ECGbufl=ADRESL; //將轉換結果暫存器低位元傳到ECGbufl ADIF=0; while (!(IDX==0 && TRMT==1)); TXREG=0xF1; //將檔頭傳到TXREG(傳送暫存器) while(!(IDX==0 && TRMT==1)); TXREG=0xFF; //將檔頭傳到傳到TXREG(傳送暫存器) while(!(IDX==0 && TRMT==1)); TXREG=ECGbufh; //將ECG高位元資料傳到TXREG(傳送暫存器) while(!(IDX==0 && TRMT==1)); TXREG=ECGbufl; //將ECG低位元資料傳到TXREG(傳送暫存器) while(!(IDX==0 && TRMT==1)); TXREG=breathebufh; //將呼吸高位元資料傳到TXREG(傳送暫存器) while(!(IDX==0 && TRMT==1)); TXREG=breathebufl; //將呼吸低位元資料傳到TXREG(傳送暫存器) while(!(IDX==0 && TRMT==1)); TXREG=Tmrh; //將計時器高位元資料傳到TXREG(傳送暫存器) while(!(IDX==0 && TRMT==1)); TXREG=Tmrl; //將計時器低位元資料傳到TXREG(傳送暫存器 while(!(IDX==0 && TRMT==1)); TXREG=Alltmr; IDX=0X01; ADIF=0; } } void SYSTEMinit(void) { OK=0x00; IDX=0X00; TRISA=0XFF; TRISB0=1; SPBRG=0x23; TXSTA=0x24; RCSTA=0x80; SYNC=0; BRGH=1; SPEN=1; TXEN=1; Tmrh=0X00; Tmrl=0X00; Alltmr=0x00; ECGbufh=0x00; ECGbufl=0x00; Wbufh=0x00; Wbufl=0x00; INTCON=0XD0; TMR1IE=1; TMR1H=0X00; TMR1L=0X00; T1CON=0X30; } void Delay_x_mS(int N_mS) { int Loop_mS ; for ( Loop_mS = 0 ; Loop_mS < N_mS ; Loop_mS++ ) { Delay_1mS(); } } //*** Delay 1mS with 16MHz crystal void Delay_1mS(void) { int Del_1mS; for (Del_1mS = 0 ; Del_1mS < 199 ; Del_1mS ++ ) { asm("nop"); asm("nop"); }
發表於: 2009/9/25 20:24
|
|||
|