我正在尝试为PIC18F4550设置TMR1 T1CON寄存器,但出现与RD16位有关的错误。我得到:
config.c:17:1: error: use of undeclared identifier 'RD16'
RD16 = 1;
^
1 error generated.
根据数据表:
RD16:16位读/写模式使能位
1 =通过16位操作使能Timer1的寄存器读/写
0 =通过两个8位操作使能Timer1的寄存器读/写
我阅读了一些帖子,应该是正确的。我在使用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;
}
答案 0 :(得分:1)
RD16 位位于T1CON 字节 /寄存器中。 xc.h
标头将其指定为这样的T1CONbits结构中的位域成员,该结构取自here:
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。无论如何,我想补充一点,如果您正在使用免费的xc8编译器或sdcc编译器将PIC18用于自定义项目,请不要这样做,请将所有pic设备放入垃圾桶,并购买更便宜,更快,更好和更简单的产品STM32器件。除非您使用付费xc8编译器或为必须使用PIC的项目工作,否则不要浪费时间。
答案 1 :(得分:1)
尝试这样的事情:
#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;
}
您可能想看看Microchip代码配置器。它可以为您完成很多配置工作。