完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
各位大神 请教几个问题:
问题1,通过串口调试助手给51单片机发送一个16位的数据 如0-65536中的任一个数,那么是先发送高8位数据还是低8位数据?接收缓存器是先接收高8位还是低8位? 问题2: #include #define uint unsigned int #define uchar unsigned char ***it dula=P2^6; ***it wela=P2^7; uint dat; uchar wan,qian,bai,shi,ge,flag,buf1,buf2; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void delay(uchar z) { uchar x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void init_uart() { TMOD=0x20; TH1=0xfd; TL1=0xfd; TR1=1; REN=1; SM0=0; SM1=1; EA=1; ES=1; } void display(uint date) { wan=date/10000; qian=date%10000/1000; bai=date%1000/100; shi=date%100/10; ge=date%10; dula=1; P0=table[wan]; dula=0; P0=0xff; wela=1; P0=0xfe; wela=0; delay(5); dula=1; P0=table[qian]; dula=0; P0=0xff; wela=1; P0=0xfd; wela=0; delay(5); dula=1; P0=table[bai]; dula=0; P0=0xff; wela=1; P0=0xfb; wela=0; delay(5); dula=1; P0=table[shi]; dula=0; P0=0xff; wela=1; P0=0xf7; wela=0; delay(5); dula=1; P0=table[ge]; dula=0; P0=0xff; wela=1; P0=0xef; wela=0; } void main() { init_uart(); while(1) { display(dat); } } void ser() interrupt 4 { if(RI) { flag++; if(flag==1) buf1=SBUF; if(flag==2) { buf2=SBUF; dat=buf1+buf2*256; flag=0; } RI=0; } } 这是发送0-65535任意数然后通过数码管显示的程序,我是将16进制数 fffe分成两个字节发送,可是发送的时候,点击串口调试助手的手动发送 第一次竟然没反应,点了第二次之后才发送出去 并且成功显示了,很奇怪为什么 第一次发送时没反应? 请大神们指点一二 |
|
相关推荐
6个回答
|
|
|
这题我会,你求我啊!我就告诉你!
|
|
|
|
|
|
|
|
|
|
|
|
尴尬,中了21的毒,没想到你认真了,我还是帮你看看吧。先解决你的第一个问题吧,发送告八位和低八位都无所谓的,只要你另外一端能正常的识别了你发送的消息,达到你想要的效果就行了,不过一般来说还是先发现低八位吧。至于第二个问题我还真没遇到过,希望能帮助你。顺便说下这是发烧友提前的愚人节活动,希望莫往心里去 |
|
|
|
|
|
刚又看了下你的程序,有一个变量没有赋初值,一般来说全局变量应该赋一个初值的,都不知道你第二次是怎么成功接收到的,flag应该是一个随机值,你把flag赋值后再试一试吧,应该没什么问题了 |
|
|
|
|
我会告诉你真名 发表于 2016-3-24 09:40 没关系的,不会往心里去 有时也要点活跃的氛围 |
|
|
|
|
我会告诉你真名 发表于 2016-3-24 09:54 首先,定义的变量如果不赋初值的话不是默认为0吗? 再者 ,后来我给flag赋了0,结果还是一样, 应该不是这里的问题 还有我之所以想弄清楚是先发高八位 还是先发低八位 是因为 给的一个参考程序 在接收到两个字节组合成一个字的时候用dat=(buf1*256+buf2) 感觉他好像认为 先发高8位(所以先接受到高8位存放于buf1),再发低8位,但实际的结果显示却是错的,后来我自己 改成了dat=buf1+buf2*8 我认为是先发低8位 再发高8位 ,结果却是我点第一次发送0xfffe数码管显示的是65535,我点第二次发送0xfffe时才显示65534是正确的,所以感觉很奇怪与痛苦!非常希望能有高手帮忙解决这个问题, 或者帮我 重新写一下这个程序 以16进制发送一个0-65536之间的任一数,当单片机收到后在数码管上动态显示出来 |
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【瑞萨RA6E2】瑞萨E2S软件安装过程,等待过程玩下97_e2 studio_ZGZZ
234 浏览 0 评论
514 浏览 0 评论
【原创】【RA4M2-SENSOR开发板评测】低功耗+USB综合测试
826 浏览 0 评论
1366 浏览 2 评论
814 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
16911 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-3 02:43 , Processed in 0.714643 second(s), Total 83, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
3888