Pic12f683仅在引脚2(GP5)上有数字输出

时间:2019-03-14 07:45:01

标签: microcontroller pic

我一直试图开始使用PIC12f683,以熟悉PIC系列单片机。

我已经将它连接到Pickit 3,并与我的PC进行通讯,看来一切正常。

我一直在尝试从互联网上获取各种LED闪光灯示例,但是无论我尝试使用哪种示例代码,或者对TRISO或GPIO寄存器执行的操作,我都只会在引脚2上获得输出,其他GPIO引脚都不会输出做任何事情。

从电气角度来讲...针脚1、4、6、7和8连接到用于ICSP的Pickit。针脚2、3、5和7具有从其针脚到地的220欧姆电阻的LED,针脚1和8连接到锂离子电池(〜3.7 v)。

这是我当前正在使用的代码。

#define _XTAL_FREQ 8000000 

#include <xc.h>

// BEGIN CONFIG 
// CONFIG
#pragma config FOSC = INTOSCIO  // Oscillator Selection bits (INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF      // MCLR Pin Function Select bit (MCLR pin function is digital input, MCLR internally tied to VDD)
#pragma config CP = OFF         // Code Protection bit (Program memory code protection is disabled)
#pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)
#pragma config BOREN = OFF      // Brown Out Detect (BOR disabled)
#pragma config IESO = OFF       // Internal External Switchover bit (Internal External Switchover mode is disabled)
#pragma config FCMEN = OFF      // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is disabled)

//END CONFIG 

int main() 
{ 
    TRISIO =0b00000000; //RB0 as Output PIN 
    GPIO = 0b00111111;
    while(1) 
    { 
        GP5=1;
        GP4=1;
        GP0=1;
        GP2=1; 
        __delay_ms(1000); 
        GP5=0;
        GP4=0;
        GP0=0;
        GP2=0;
       __delay_ms(1000); 
    } 
    return 0; 
}

我相信config部分是由MPlab生成的,其余部分是从此指令中复制/修改的: https://www.instructables.com/id/How-to-Blink-an-Led-With-PIC16F886-/ 但是无论我使用什么示例代码,结果都是一样的。我猜是某个地方设置了一个寄存器或配置变量,但我无法弄清楚。

1 个答案:

答案 0 :(得分:0)

您必须将输出切换为数字输出。

int main() 
{ 
    TRISIO =0b00000000;   //RB0 as Output PIN 
    ANSEL = 0;            // all outputs digital !!!!!
    CMCON0 = 0b00000111;  //turn Cin Pins as I/O
    GPIO = 0b00111111;
    while(1) 
    { 
        GP5=1;
        GP4=1;
        GP0=1;
        GP2=1; 
        __delay_ms(1000); 
        GP5=0;
        GP4=0;
        GP0=0;
        GP2=0;
       __delay_ms(1000); 
    } 
    return 0; 
}

GP0 ... GP4输出是默认的模拟量输出。
并且请记住,GP3与MCLR共用该引脚,因此它是仅输入引脚。