會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客





PIC16F1455目前使用遇到的問題?
新會員
註冊日期:
2008/10/27 11:44
所屬群組:
註冊會員
文章: 9
等級: 1; EXP: 86
HP : 0 / 21
MP : 3 / 555
離線
各位先進好:
目前我使用的MPLAB X IDE v3.45+XC8 V1.41+PICkit3
完整程式碼如下:
// CONFIG1
#pragma config FOSC = INTOSC // Oscillator Selection Bits (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = ON // MCLR Pin Function Select (MCLR/VPP pin function is digital input)
#pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config BOREN = OFF // Brown-out Reset Enable (Brown-out Reset disabled)
#pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
#pragma config IESO = OFF // Internal/External Switchover Mode (Internal/External Switchover Mode is disabled)
#pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is disabled)

// CONFIG2
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
#pragma config CPUDIV = NOCLKDIV// CPU System Clock Selection Bit (NO CPU system divide)
#pragma config USBLSCLK = 24MHz // USB Low SPeed Clock Selection bit (System clock expects 24 MHz, FS/LS USB CLKENs divide-by is set to 4.)
#pragma config PLLMULT = 3x // PLL Multipler Selection Bit (3x Output Frequency Selected)
#pragma config PLLEN = DISABLED // PLL Enable Bit (3x or 4x PLL Disabled)
#pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset)
#pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LPBOR = OFF // Low-Power Brown Out Reset (Low-Power BOR is disabled)
#pragma config LVP = OFF // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

#include <xc.h>

//#define baud 0x17//0x17 for 48MHz -> 31250 baud
#define baud 0x13//0x13 for 48MHz -> 38400 baud

void InitializeSystem(void);
void UserInit(void);
void InitializeUSART(void);

#define InitGpio() TRISA = 0b00001000;\
TRISC = 0b00000000;\

#define GLed LATCbits.LATC3


union{
struct{
unsigned T0 :1; //
unsigned T1 :1; //
unsigned T2 :1; //
unsigned T3 :1; //
unsigned T4 :1; //
unsigned T5 :1; //
unsigned T6 :1; //
unsigned T7 :1; //
}oneBit;
unsigned char allBits;
}Time_FLAG;
#define interrupt_1ms Time_FLAG.oneBit.T0

unsigned char rc_temp;

#define UART_TRISTx TRISCbits.TRISC4
#define UART_TRISRx TRISCbits.TRISC5


void interrupt ISRCode()
{
if(TMR0IF && TMR0IE)
{
TMR0 = 0x00;
TMR0IF = 0 ;
interrupt_1ms = 1;
}

if(RCIF && RCIE)
{
RCIF = 0;
rc_temp = RCREG; //硬體接收器的值存到接收暫存器
TXREG = rc_temp;

}
}

void main(void) {
InitializeSystem();
while(1)
{
if(rc_temp==0)
{
GLed = 1;
}
else
{
GLed = 0;
}

}
}

void InitializeSystem(void)
{
ANSELA = 0;
ANSELC = 0;

//OSCCONbits.IRCF = 0x0f; //16MHz HFINTOSC with 3x PLL enabled (48MHz operation)
//OSCCONbits.SCS = 0x00;
//OSCCONbits.SPLLEN = 1;
//OSCCONbits.SPLLMULT = 1;
OSCCON = 0b11111100;
ACTCONbits.ACTSRC = 1; //Enable active clock tuning with USB
ACTCONbits.ACTEN = 1;

UserInit();
OPTION_REG = 0;
TMR0 = 0x05;
INTCON = 0b11100000;
}

void UserInit(void)
{
InitGpio();
InitializeUSART();
}//end UserInit

void InitializeUSART(void)
{
unsigned char c;
//unsigned char cnt=0;

UART_TRISTx = 0;
UART_TRISRx = 1;
TXSTA = 0x20; // TX enable BRGH=0
RCSTA = 0x90; // Single Character RX
SPBRG = baud;

BAUDCON = 0x00; // BRG16 = 0

PIE1bits.RCIE = 1;

c = RCREG; // read
}

遇到的問題是,DEBUG模式下進行實際量測IO輸出腳與UART傳輸都正確,但是燒錄後拔開PICkit3實際量測IO輸出一直維持HI(沒有如程式中切換),UART傳輸一樣正確.
請問這樣應該要怎麼查詢問題點可能在哪邊?

4月11日 23:52:41
轉換PDF檔 列印


Re: PIC16F1455目前使用遇到的問題?
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14022
等級: 72; EXP: 30
HP : 1069 / 1782
MP : 4674 / 68984
離線
類比 ADC 輸入功能設定?

ANSELA & ANSELB 這兩個暫存器在初始設定時是否有設成 I/O 模式?

4月12日 13:45:50
轉換PDF檔 列印


Re: PIC16F1455目前使用遇到的問題?
資深會員
註冊日期:
2007/11/05 08:29
所屬群組:
註冊會員
文章: 203
等級: 13; EXP: 28
HP : 0 / 307
MP : 67 / 8730
離線
這不一定有影響 但是 RCIF 是 read-only

if(RCIF && RCIE)
{
//RCIF = 0;
rc_temp = RCREG; // clear RCIF by reading RCREG
TXREG = rc_temp;
}
}

另外
void InitializeUSART(void)
{
...
UART_TRISTx = 0;
UART_TRISRx = 1;
TXSTA = 0x20; // TX enable BRGH=0
//RCSTA = 0x90; // Single Character RX
SPBRG = baud;

BAUDCON = 0x00; // BRG16 = 0

PIE1bits.RCIE = 1;

RCSTA = 0x90; // 通常最後才啟動

c = RCREG; // <<---- 為什麼?
}

請參考使用手冊的說明

4月12日 14:45:08
轉換PDF檔 列印


Re: PIC16F1455目前使用遇到的問題?
新會員
註冊日期:
2008/10/27 11:44
所屬群組:
註冊會員
文章: 9
等級: 1; EXP: 86
HP : 0 / 21
MP : 3 / 555
離線
首先感謝Ryang和timijk的指導,
我照著修改新增
ANSELA = 0;\
ANSELC = 0;\
也照著
//RCIF = 0;

RCSTA = 0x90; // 通常最後才啟動

測試後情況是一樣的,

今天我另外新增一隻IO腳做輸入訊號控制同一隻輸出腳位,

測試後新增的腳位是可以改變輸出腳位的,但是UART傳送的卻是沒有改變輸出腳位的,DEBUG模式中,是都可以改變輸出腳位狀態的,這個結果很令人無言,不知還有其他可能需要注意的部分嗎?

4月12日 18:33:52
轉換PDF檔 列印


Re: PIC16F1455目前使用遇到的問題?
資深會員
註冊日期:
2007/11/05 08:29
所屬群組:
註冊會員
文章: 203
等級: 13; EXP: 28
HP : 0 / 307
MP : 67 / 8730
離線
你是指 GLed 腳位沒變化嗎?

你用 INTOSC 會有 +/- 3% 的誤差 再加上 你產生的 Baud Rate 是 37500 與 38400 就有 2.34% 的誤差

不曉得會不會是這緣故

4月12日 19:50:58
轉換PDF檔 列印


Re: PIC16F1455目前使用遇到的問題?
新會員
註冊日期:
2008/10/27 11:44
所屬群組:
註冊會員
文章: 9
等級: 1; EXP: 86
HP : 0 / 21
MP : 3 / 555
離線
感謝timijk指導:
我測試判斷不是Baud Rate誤差原因,因為我的程式是確認有接收中斷,就會把接收到的值,直接回傳,測試中也確實有收到回傳的資料並且正確.

4月13日 13:42:50
轉換PDF檔 列印


Re: PIC16F1455目前使用遇到的問題?
高級會員
註冊日期:
2014/12/02 11:55
所屬群組:
註冊會員
文章: 82
等級: 8; EXP: 0
HP : 0 / 175
MP : 27 / 1358
離線
unsigned char rc_temp;

這個改為

volatile unsigned char rc_temp;

試試看

4月13日 13:57:52
轉換PDF檔 列印


Re: PIC16F1455目前使用遇到的問題?
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14022
等級: 72; EXP: 30
HP : 1069 / 1782
MP : 4674 / 68984
離線
閃眼了,居然沒看到這中斷裡所使用到的變數...

4月13日 15:36:31
轉換PDF檔 列印






無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
線上教學影片
網頁捷徑
2017 Summer Elite 報名
教育訓練
其它網站連結
電話: 02-25000405
產品技術問題產品技術支援專線:0800-717718 台北02-25088600 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project