PIC24fj128ga010

2020-02-08 09:20发布

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);就可以了?
求教为什么会溢出,这个和单片机的位数有关吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
explorer117
2020-02-08 20:36
-----------------------------------------------------------------------

由于计算优先的问题,BaudRate*16算出来的值暂存在寄存器中,而其值大于16位了吧。。。我的猜测,立即数计算结果会存在一个16位寄存器中回复【2楼】studydev

一周热门 更多>