:::

論壇索引


Board index » All Posts (ken.wu)




Re: PIC10LF320 燒錄完成卻沒有動作
#1
新會員
新會員


另外請教我用以下寫法編譯OK
#define LED_W PORTAbits.PORTA1 //PWM
#define LED_Y PORTAbits.PORTA0
#define SW PORTAbits.PORTA3

但是使用下面的寫法卻出現錯誤訊息,
#define LED_W RA1 //PWM
#define LED_Y RA0
#define SW RA3

,錯誤訊息是:
"PIC10LF320-Pickit_4.c:26: error: (192) undefined identifier "RA1"
PIC10LF320-Pickit_4.c:27: error: (192) undefined identifier "RA0"
PIC10LF320-Pickit_4.c:28: error: (192) undefined identifier "RA3""

請問為甚麼呢?

發表於: 6/11 15:01
頂部


PIC10LF320 燒錄完成卻沒有動作
#2
新會員
新會員


使用IC:PIC10LF320 6PIN
編譯器及軟體:PICkit4、MPLAB X IDE v3.35、HI-TECH PICC V9.83

需求:使用PIC10LF320達到3組LED之間的模式切換,其中RA3為輸入PIN,判斷輸入HI or LO,用RA0、RA1為輸出來決定兩組LED亮 OR 滅,以下是程式的部分,程式於另一顆PIC16F1503驗證過沒問題,因此懷疑是PIC10LF320設定或是沒有確實將程式燒錄進去所造成,再請前輩幫忙找問題,thx!

==============================================================================================================
/*
MCU : PIC10LF320

*/

#include<pic.h>

__CONFIG(WDTE_OFF&PWRTE_ON&MCLRE_ON&CP_OFF&BOREN_OFF&LVP_OFF);

#define LED_W PORTAbits.PORTA1 //PWM
#define LED_Y PORTAbits.PORTA0
#define SW PORTAbits.PORTA3

volatile unsigned int ms=0;
volatile unsigned char step=0;
volatile unsigned char debounce=60;

void system_initial(void)
{
OSCCON = 0b01100000;
INTCONbits.GIE = 1;
INTCONbits.PEIE = 1;
TRISA = 0b00001000;
ANSELA = 0b00000000;
LED_W = 0;
LED_Y = 0;
SW = 0;
}

void PWM_Init(void)
{
PWM2CON = 0b00000000; //Clear PWM2CON
PR2 = 0b10100110; //Configure the Timer2 period - decimal 166
PWM2CON = 0b11000000; //Enable PWM Module, Module Output
PWM2DCH = 0b00000000; //Clear duty cycle registers
PWM2DCL = 0b00000000;
TMR2IF = 0; //Clear the timer 2 interrupt flag
T2CON = 0b00000001; //Set prescaler to 1
TMR2ON = 1; //Enable timer 2
PWM2DCH = 0b00010000; //Pulse Width:33.5μs, Duty = 10%
PWM2DCL = 0b00000011;
}

void TIMER0_Init(void)
{
OPTION_REGbits.T0CS = 0;
OPTION_REGbits.PSA = 0;
OPTION_REGbits.PS = 0b010;
INTCONbits.TMR0IE = 1;
INTCONbits.TMR0IF = 0;
}

void interrupt SystemISR(void)
{
if(TMR0IF && TMR0IE);
{
TMR0IF = 0;
ms++;
}
}

void main(void)
{
system_initial();
TIMER0_Init();
PWM_Init();

while(1)
{
switch(step)
{
case 0:
{
PWM2CON = 0b01000000; //Disable PWM Module

if(SW==1)
{
LED_Y=0;
step=1;
}
else
{

if(ms==50)
LED_Y=1;

if(ms==100)
LED_Y=0;

if(ms==150)
LED_Y=1;

if(ms==200)
LED_Y=0;

if(ms==500)
ms=0;
}

break;
}

case 1:
{
if(SW==0)
{
LED_W=0;
ms=0;
step=0;
}
else
{
PWM2CON = 0b11000000; //Enable PWM Module
}
break;
}
}
}
}

發表於: 6/11 14:52
頂部


PIC16F1503 timer 計數中斷 與 外部中斷無法同時使用
#3
新會員
新會員


請教前輩,我原本有使用timer1設定每1ms中斷一次當做時間計算給LED1使用,後來我要增加另一個LED2(PWM控制點燈),所以打算用外部中斷功能,可以用彈跳開關做為兩各LED的切換,但加入中斷後,按彈跳開關都沒有反應,我是設定負緣觸發的時候產生中斷,示波器量測確實有負緣信號產生,但卻沒有進行切換,請問是我的設定哪邊有問題嗎?
以下是我的程式code,請不吝指教,

=========================================================================
#include<pic.h>

__CONFIG(FOSC_INTOSC&WDTE_OFF&PWRTE_ON&MCLRE_OFF&CP_OFF&BOREN_OFF);

#define LED1 RC2
#define LED2 RC1 //PWM

volatile unsigned int ms=0;
volatile unsigned char step=0;
volatile unsigned char SW=0;

void system_initial(void)
{
OSCCONbits.IRCF = 0b1110; //內部振盪器頻率設為8MHz
OSCCONbits.SCS = 0b11; //內部振盪器模塊
INTCONbits.GIE = 1; //允許所有有效中斷
INTCONbits.PEIE = 1; //允許所有有效外設中斷
INTCONbits.INTE = 1; //允許INT外部中斷
TRISA = 0b00000100; //RA2 input
TRISC = 0b00000000;
ANSELA = 0b00000000; //RA0~RA4 Digital I/O
ANSELC = 0b00000000; //RC0~RC3 Digital I/O
LED1 = 0;
LED2 = 0;
}

void PWM_Init(void)
{
PWM4CON = 0b00000000; //Clear PWM2CON
PR2 = 0b10100110; //Configure the Timer2 period - decimal 166
PWM4CON = 0b11000000; //Enable PWM Module, Module Output
PWM4DCH = 0b00000000; //Clear duty cycle registers
PWM4DCL = 0b00000000;
TMR2IF = 0; //Clear the timer 2 interrupt flag
T2CON = 0b00000001; //Set prescaler to 4
TMR2ON = 1; //Enable timer 2
PWM4DCH = 0b00010000; //Pulse Width:33.5μs, Duty = 10%
PWM4DCL = 0b00000011;
}

void INT_Init(void)
{
OPTION_REGbits.INTEDG = 0; //下降沿中斷
INTF = 0; //Clear INTF
}

void TIMER1_Init(void)
{
TMR1H=0xFF;
TMR1L=0x06;
T1CONbits.T1CKPS = 0b11;
T1CONbits.TMR1CS = 0b00;
PIE1bits.TMR1IE = 1;
T1CONbits.TMR1ON = 1;
PIR1bits.TMR1IF = 0;
}

void interrupt SystemISR(void)
{
if(TMR1IF && TMR1IE)
{
TMR1IF = 0;
TMR1H = 0xFF;
TMR1L = 0x06;
ms++;
}

if(INTF && INTE)
{
INTF = 0; //Clear INTF
SW = 1;
}
}

void main(void)
{
system_initial();
TIMER1_Init();
PWM_Init();

while(1)
{
switch(step)
{
case 0:
{
PWM4CON = 0b01000000; //disable PWM Module
LED2=0;

if(SW==1)
{
LED1=0;
step=1;
}

if(ms==60)
LED1=1;

if(ms==120)
LED1=0;

if(ms==180)
LED1=1;

if(ms==240)
LED1=0;

if(ms==1000)
ms=0;

break;
}

case 1: //LED2 PWM mode
{
if(SW==1)
{
ms=0;
step=0;
}

LED1=0;
PWM4CON = 0b11000000; //Enable PWM Module

break;
}
}
}
}

發表於: 5/21 16:18
頂部


PIC16F1503 timer 計數 每秒開+每秒關LED 循環
新會員
新會員



發表於: 12/17 11:06
頂部






:::

Microchip連結

http://elearning.microchip.com.tw/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

課程 - 台北教育訓練中心
課程 - 新竹教育訓練中心
課程 - 高雄教育訓練中心
教育訓練中心介紹
購買 - 實驗工具
臺灣實驗板介紹與資源