大家好 ! 我目前在学习串口收发数据,目的是接收命令,根据命令修改数组内的值并发送出去,主要有下面两个疑问: 1、串口调试有没有好的方法可以在线仿真,能够看到变量值的每步变化,我尝试用了proteus仿真,串口调试助手发送数据,程序进不了串口中断; 2、我写了下面一段程序,tmp[]数组接收的是串口调试助手发来的命令ASCII码。红色这句修改数组的值出了问题,接收到的ASCII码0-b转换成16进制的0-11,作为数组的下标赋值给b,接收到的ASCII码1 、2、4、8转换成16进制(tmp[2]-0x30),赋值给数组buzzer_value ''。但是实际每次buzzer_value ''都为0X00;后面发送的b 、(tmp[2]-0x30)的值又是对的,不知道中间有什么问题。 我尝试把b改成数字下标或者把tmp[2]-0x30改成具体的十六进制数,结果都是对的。 以下是相关源码: if((tmp[1]>='0')&&(tmp[1]<='9')) b=tmp[1]-0X30; else b=tmp[1]-0X51; buzzer_value '[ b ]'=(tmp[2]-0x30); a=0; while(a<12) { SBUF = buzzer_value[a]; //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器) while(!TI); // 等特数据传送 (TI发送中断标志) TI = 0; // 清除数据传送标志 a++; // 下一个字符 } SBUF = b; //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器) while(!TI); // 等特数据传送 (TI发送中断标志) TI = 0; // 清除数据传送标志 SBUF = tmp[2]-0X30; //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器) while(!TI); // 等特数据传送 (TI发送中断标志) TI = 0; // 清除数据传送标志 int_tmp(); b=0; |
共6条
1/1 1 跳转至页
8051单片机串口调试求助
关键词: 单片机 串口调试 UART
共6条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 | |
【分享评测,赢取加热台】使用8051单片机驱动WS2812被打赏40分 |