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);就可以了?
求教为什么会溢出,这个和单片机的位数有关吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
millwood0
1楼-- · 2020-02-08 11:33
BaudRate*16 = 9600*16 = ?
studydev
2楼-- · 2020-02-08 15:10
 精彩回答 2  元偷偷看……
panyongjie
3楼-- · 2020-02-08 16:59
等待高手来解
explorer117
4楼-- · 2020-02-08 20:36
-----------------------------------------------------------------------

由于计算优先的问题,BaudRate*16算出来的值暂存在寄存器中,而其值大于16位了吧。。。我的猜测,立即数计算结果会存在一个16位寄存器中回复【2楼】studydev
explorer117
5楼-- · 2020-02-08 20:47
立即数计算结果会存在一个16位寄存器,是一个有符号的值,我试过了
millwood0
6楼-- · 2020-02-08 21:17
"等于153600,有什么问题 "

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.

一周热门 更多>