我一直试图开始使用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-/ 但是无论我使用什么示例代码,结果都是一样的。我猜是某个地方设置了一个寄存器或配置变量,但我无法弄清楚。
答案 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共用该引脚,因此它是仅输入引脚。