использование необъявленного идентификатора 'RD16' - PullRequest
0 голосов
/ 07 октября 2018

Я пытаюсь установить регистр TMR1 T1CON для PIC18F4550, но получаю ошибку, связанную с битом RD16. Я получаю:

config.c:17:1: error: use of undeclared identifier 'RD16'
RD16 = 1;
^
1 error generated.

В соответствии с таблицей:

RD16: бит разрешения 16-битного режима чтения / записи

1 = включает чтение / запись регистра Timer1 в одной 16-битной операции

0 = включение чтения / записи регистра Timer1в двух 8-битных операциях

Я прочитал несколько сообщений, и это должно быть правильно. Я использую XC8 и MPLab

мой полный код config.c:

#include <xc.h>
void configPIC(void){
    T3CCP2:T3CCP1 = 01;   //TMR1 para CCP1    
    CCP1M0 = 0;           //Captura flancos de subida
    CCP1M1 = 1;
    CCP1M2 = 0;
    CCP1M3 = 1;
    CCP1IF = 0 ;          //Bandera de Captura CCP1
}

void timer1config(void){
    //TMR1 Config Registros   
    TMR1ON = 1;
    RD16   = 1;
    T1RUN  = 0;     //Usar reloj interno
    TMR1CS = 0;     // FOSC / 4
    T1CKPS1:T1CKPS0 = 00;
    T1OSCEN = 0;
}

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Попробуйте что-то вроде этого:

#include <xc.h>
void configPIC(void){
    T3CONbits.T3CCP2   = 0;      //TMR1 para CCP1    
    T3CONbits.T3CCP1   = 0;
    CCP1CONbits.CCP1M0 = 0;      //Captura flancos de subida
    CCP1CONbits.CCP1M1 = 1;
    CCP1CONbits.CCP1M2 = 0;
    CCP1CONbits.CCP1M3 = 1;
    PIR1bits.CCP1IF    = 0;      //Bandera de Captura CCP1
}



void timer1config(void){
    T1CONbits.TMR1ON  = 1;
    T1CONbits. RD16   = 1;
    T1CONbits.T1RUN   = 0;      //Usar reloj interno
    T1CONbits.TMR1CS  = 0;      // FOSC / 4
    T1CONbits.T1CKPS1 = 0;
    T1CONbits.T1CKPS0 = 0;
    T1CONbits.T1OSCEN = 0;
}

Возможно, вы захотите взглянуть на конфигуратор кода микрочипа.Это может сделать для вас много работы по настройке.

0 голосов
/ 07 октября 2018

RD16 бит находится внутри T1CON байт / регистр.Заголовок xc.h определяет его как элемент битового поля внутри структуры T1CONbits, как это взято из здесь :

extern volatile near union {
  struct {
    unsigned TMR1ON:1;
    unsigned TMR1CS:1;
    unsigned T1SYNC:1;
    unsigned T1OSCEN:1;
    unsigned T1CKPS0:1;
    unsigned T1CKPS1:1;
    unsigned T1RUN:1;
    unsigned RD16:1;
  };
  struct {
    unsigned :2;
    unsigned NOT_T1SYNC:1;
  };
} T1CONbits;

Вы должны использовать его следующим образом:

T1CONbits.RD16 = 1;

как и все остальные биты внутри любого регистра на устройствах PIC.Осмотрите заголовок p18f4500.h , чтобы узнать имена всех регистров.

PS.В любом случае, я хотел бы добавить, что если вы используете PIC18 для нестандартного проекта, использующего бесплатный компилятор xc8 или sdcc, не делайте этого, поместите все свои устройства Pic в корзину и покупайте дешевле, быстрее, лучше и прощеУстройства STM32.Если вы не используете платный компилятор xc8 или не работаете над проектом, в котором обязательны PIC, не тратьте свое время.

...