完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
我的程序目的是51单片机的按键1按下时单片机就往外发送56 0036 01 00这几个十六进制数,按键不按就不发送。问题在于按键按下,在串口助手接收区接的是00 56 00 36 01 00,不知道这是为什么? 串口助手的HEX显示打钩了。哪位高手帮忙看看程序哪里的问题.谢谢
#include #include #include unsigned char ch; bit flag=0; ***it K1=P3^1; ***it K2=P3^2; ***it LED=P1^0; unsigned char start_photo_cmd[]={0x56,0x00,0x36,0x01,0x00}; void delay(unsigned char xms) { unsigned int i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } void init() { SCON=0x50; TMOD=0x20; PCON=0x80;// TH1=0xfd; //晶振11.0592MHZ,SMOD=1,波特率19200bps 如果晶振为22.1184NHZ时,波特率为38400 IE|=0x90; TR1=1; // } void uart_sendbuf(unsigned char *buf,unsigned char n) { unsigned char i; ES=0; for(i=0;i SBUF=buf[i]; while(ti==0); TI=0; } ES=1; } void ser() interrupt 4 using 3 { RI=0; ch=SBUF; flag=1; } main() { init(); while(1) { if(K1==0) { delay(10); if(K1==0) { while(K1==0); uart_sendbuf(start_photo_cmd,5); } } } } |
|
相关推荐
9个回答
|
|
|
不是按键的问题。。。按键接在通信口上也可以,只要不在按键按下去的时候通信就是了,但如果IO口富裕的话最好还是别接在通信上。。。
把uart_sendbuf(start_photo_cmd,5);改为uart_sendbuf(start_photo_cmd,4);试试 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TXD,RXD无数据时是高电平。注意到书上说的起始位了吗?是不是一个低电平的脉冲?
当你按下按键后,TXD引脚变低,于是相当于发送了一个起始位,于是就有了最开始的数据0。至于为何是0x00而不是其他值,我希望你自己找找原因。 那么为什么又只有一个数据0x00呢,而不是多个呢?停止位在这里起了作用。 你做个实验: 把发送程序去掉,每当你按一次按键,你的串口调试助手就会接收到一个数。试试吧。 |
|
|
|
|
|
顶、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
265 浏览 0 评论
【原创】【RA4M2-SENSOR开发板评测】低功耗+USB综合测试
789 浏览 0 评论
1306 浏览 2 评论
787 浏览 0 评论
【RA4M2-SENSOR开发板评测】Analogue+Timers综合测试
1587 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
16901 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 03:39 , Processed in 0.863447 second(s), Total 102, Slave 80 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
8922