PIC24fj128ga010是16位单片机,在设置串口波特率时出现了溢出问题:
#define FCY 4000000
#define BaudRate 9600
void InitUART(void);
void InitUART(void)
{
unsigned char i;
_TRISF5 = 0;
_TRISF4 = 1;
U2MODE = 0x8004; // 使能串口,奇校验
i = (unsigned char)(FCY/(BaudRate*16)-1);
U2BRG = i;
U2STA = 0x0400; // UTXEN set使能发送
_U2RXIE = 1; //开启接收中断
}
错误为:E:/professional software/Maplab/mcc18/lkr/UART.c:15: warning: integer overflow in expression
把 i = (unsigned char)(FCY/(BaudRate*16)-1); 改为i = (unsigned char)(FCY/BaudRate/16-1);就可以了?
求教为什么会溢出,这个和单片机的位数有关吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
由于计算优先的问题,BaudRate*16算出来的值暂存在寄存器中,而其值大于16位了吧。。。我的猜测,立即数计算结果会存在一个16位寄存器中回复【2楼】studydev
take an introductory C book, read it 100x. if you still don't know what's wrong with your code after that, take a different job.
一周热门 更多>