我需要使用SMBus与设备通信,并在七段显示器上显示SOC。我使用PIC18F26K83。七段显示器需要I2C连接。问题是我将使用具有2个不同I2C时钟的2个不同I2C模块。 SMBus必须介于10 kHz和100 kHz之间。我使用8 MHz MCU时钟。对于七段显示部分,如果不将I2CxCLK寄存器设置为HFINTOSC(0010),就无法使其工作。我尝试使用TMR2后缩放输出。计时器代码如下:
void InitTimer2(){
T2CLK =0b00000101; //500 kHz
T2CON.B7 = 1; //Timer 2 is on
T2CON.B3=0;
T2CON.B3=0;
T2CON.B3=0; //Timer 2 PostScaler = 1:2 (500/2 = 250 kHz)
T2CON.B3=1;
}
然后我在main方法中将此函数称为InitTimer2()函数。之后,我选择I2CxCLK作为TMR2后缩放输出(0110)。但是,它不起作用...如果我直接设置I2CxCLK HFINTOSC,那么它将起作用。 (在所有情况下,MCU时钟均为8 MHz)。所以我的问题是:
计时器初始化正确吗?
我的MCU频率会影响计时器频率吗?
答案 0 :(得分:1)
不应是InitTimer2函数,如下所示:
void InitTimer2(){
T2CLK =0b00000101; //500 kHz
T2CON.B7 = 1; //Timer 2 is on
T2CON.B3=0;
T2CON.B2=0;
T2CON.B1=0;
T2CON.B0=1; //Timer 2 PostScaler = 1:2 (500/2 = 250 kHz)
}
还请检查PIC的PMD功能。参见数据表的第275和277页。 确保TMR2MD = 0。