Pic12f683 имеет только цифровой выход на выводе 2 (GP5) - PullRequest
1 голос
/ 14 марта 2019

Я пытался начать работу с PIC12f683, чтобы познакомиться с семейством микроконтроллеров PIC.

Я подключил его к Pickit 3 и разговаривал с моим ПК,кажется, что все работает нормально.

Я пробовал различные примеры светодиодных флешеров из интернета, но независимо от того, какой пример кода я пробую, или что я делаю с регистрами TRISO или GPIO, я получаю вывод только на контакт 2, ни один из другихКонтакты GPIO будут делать все что угодно.

Говоря электрически, контакты 1, 4, 6, 7 и 8 подключены к Pickit для ICSP.Контакты 2, 3, 5 и 7 имеют светодиоды с резисторами 220 Ом, идущими от контакта к земле, а контакты 1 и 8 подключены к литий-ионному аккумулятору (~ 3,7 В).

Это кодЯ использую в настоящее время.

#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; 
}

Я считаю, что часть конфигурации была сгенерирована MPlab, остальное копируется / модифицируется из этой инструкции: https://www.instructables.com/id/How-to-Blink-an-Led-With-PIC16F886-/ но результаты одинаковы, независимо от того, какой примеркод, который я использую.Я предполагаю, что есть регистр или переменная конфигурации, которую я где-то установил неправильно, но я не могу понять это.

1 Ответ

0 голосов
/ 14 марта 2019

Вы должны были переключить свои выходы на цифровые.

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, так что этоввод только пин.

...