你电脑串口助手, 发个 0x31 给单片机, 让单片机收到0x31,给你回复0x13看看,是不是能正常干活,不能得话,就是单片机里波特率或者什么的设置不对, |
yzwzfyz 发表于 2021-9-14 14:46 没有示波器...... |
黄youhui 发表于 2021-9-14 11:37 试了不行 |
lkc8210 发表于 2021-9-14 11:49 波特率4800我是知道的 |
188610329 发表于 2021-9-14 12:04 串口助手接收就是显示31 |
zhai1995 发表于 2021-9-14 11:28 没有配置打印这功能 |
注意通讯频率。最好有示波器看,直观,易找出问题之所在。 |
lkc8210 发表于 2021-9-14 11:49 就是字符1,用串口助手16进制接收就是显示31 |
黄youhui 发表于 2021-9-14 11:37 改了不行 |
lkc8210 发表于 2021-9-14 11:49 这位大哥的回复好详细,我试试 |
郑汉松 发表于 2021-9-14 11:33 字符1,unsigned char a这类型,能写成a==0x31吗 |
程序结构有问题,串口中断函数也写错。
|
首先, 你尝试比较 while(receiveData==0x31) 如果这样能成功的话, 你只要改成 while(receiveData=='1') 就能正常运行了. |
1. TH1=0XF4; TL1=0XF4; 对于12T 8051单片机8位定时器波特率加倍来说0xF4的波特率是4800 2. UsartInit()只需在开机时运行一次,不用放在while(1)里 3. while(receiveData=="1")<<双引号是字串,比较字符要用单引号 ‘1’ |
1是数字1,串口接受16进制模式就是1 ‘1’是字符1,串口接受16进制模式就是0x31 “1”是字符串1,串口接受16进制模式就是‘1’ ‘\r’ '\n'三个字符,字符串必须用\r\n结束 |
郑汉松 发表于 2021-9-14 11:33 你把“1”改成‘1‘试试,要不改成0X31也行 |
你给单片机发送的数据是 1 还是 '1' 呢?'1' 对应的数值是0x31,检查一下 |
应该是你接收的数据不对。 你利用flag = 1;只是表示有串口数据发来,并不能对具体的数据进行处理。 建议配置打印,接收的数据再打印出来,分析问题在那。 |