Я новичок в программировании на C на микроконтроллере pic. Я медленно просматриваю различные учебные пособия и литературу, чтобы попытаться применить свои знания.
В настоящее время я пытаюсь мигать светодиодом с помощью pic16f1619, используя плату любопытства, используя MPLAB IDE X, в частности контакт A5.
Мой код выглядит следующим образом:
#include <xc.h>
#include <stdlib.h>
#include <stdio.h>
#define _XTAL_FREQ 32000000 //internal oscillator of pic16f1619 is 32MHz
// Above is header files - xc is for compiler, stdlib is for general function and stdio is for I/O
// Below is the bit configuration - this is taken from the curiosity mcc generated bit configuration
// CONFIG1
#pragma config FOSC = INTOSC // Oscillator Selection Bits (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = ON // MCLR Pin Function Select (MCLR/VPP pin function is MCLR)
#pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled)
#pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
#pragma config IESO = ON // Internal/External Switch Over (Internal External Switch Over mode is enabled)
#pragma config FCMEN = ON // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled)
// CONFIG2
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
#pragma config PPS1WAY = ON // Peripheral Pin Select one-way control (The PPSLOCK bit cannot be cleared once it is set by software)
#pragma config ZCD = OFF // Zero Cross Detect Disable Bit (ZCD disable. ZCD can be enabled by setting the ZCDSEN bit of ZCDCON)
#pragma config PLLEN = ON // PLL Enable Bit (4x PLL is always enabled)
#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 = ON // Low-Voltage Programming Enable (Low-voltage programming enabled)
// CONFIG3
#pragma config WDTCPS = WDTCPS1F// WDT Period Select (Software Control (WDTPS))
#pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled)
#pragma config WDTCWS = WDTCWSSW// WDT Window Select (Software WDT window size control (WDTWS bits))
#pragma config WDTCCS = SWC // WDT Input Clock Selector (Software control, controlled by WDTCS bits)
void main(void) {
TRISAbits.TRISA5= 0; // set pin as output
LATAbits.LATA5 = 1; //set pin as high
while(1)
{
LATAbits.LATA5 = 1; //set pin as high
__delay_ms(1000); //delay of 1second
LATAbits.LATA5 = 0; //set pin as high
}
}
На данный момент нет никакого влияния на вывод контакта A5. Я попытался изменить функцию вывода с помощью разных регистров. Любая помощь будет принята с благодарностью! Я знаю этот код - LATAbits.LATA5=~ LATAbits.LATA5; // Переключить бит порта A5
Любая помощь будет принята с благодарностью, так как я действительно застрял!
while(1) {
LATAbits.LATA5 = 1; //set pin as high
__delay_ms(1000); //delay of 1second
LATAbits.LATA5 = 0; //set pin as low
}
Вы не позволяете светодиоду оставаться выключенным достаточно долго, чтобы его заметили. Вы вбиваете булавку в последнюю линию петли while
. Как только это происходит, выполнение возвращается к началу цикла. Немедленно вы включаете светодиод. Если вы можете посмотреть на цифровой выход с помощью осциллографа, вы должны увидеть очень короткий провал длительностью порядка микросекунды. Это слишком коротко для глаза, чтобы заметить. Так что добавьте еще одну задержку.
while(1) {
LATAbits.LATA5 = 1; //set pin as high
__delay_ms(1000); //delay of 1second
LATAbits.LATA5 = 0; //set pin as low
__delay_ms(1000); // <-
}
ps Это популярная ошибка в "Hello Blinky LED!" программы.
трубка