51单片机汇编语言查询方式收发问题 汇编语言

51单片机串口查询方式收发出现的问题 - 【51单片机】 -
电子工程世界-论坛
后使用快捷导航没有帐号?
请完成以下验证码
查看: 1961|回复: 9
51单片机串口查询方式收发出现的问题
在线时间5 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 8, 距离下一级还需 192 积分
一粒金砂(中级), 积分 8, 距离下一级还需 192 积分
代码如下:
#include &reg52.h&
#define uchar unsigned char
#define uint unsigned int
void serialportinit()
& & & & TMOD=0x20;//定时计数器1,8位自动装载计数器
& & & & SCON=0x70;//串口使用工作模式1,8位UART
& & & & PCON|=0x00;
& & & & TH1=0//设置串口波特率为9600bps;
& & & & TR1=1;//定时计数器1开启
void main()
uchar ch,x=1;
serialportinit(); //串口初始化
& & & & & & & & if(RI)
& & & & & & & & {
& & & & & & & & & & & & RI=0;
& & & & & & & & & & & & ch=SBUF;
& & & && &&&
& & & & & & & & & & & & SBUF=
& & & & & & & & & & & & while(!TI);
& & & & & & & & & & & & TI=0;
& & & & & & & & & & & & SBUF=x;
& & & & & & & & & & & & while(!TI);
& & & & & & & & & & & & TI=0;
& & & & & & & & }& & & &
& & & & }& & & &
我的问题是:
1,为什么从串口工具给MCU发送abc时,从MCU发送回串口工具的数据是 61 01 62 01&&63 01; 但是从串口工具中发送的数据变成abcd,为什么从mcu发送回串口工具中的数据还是不变,依然是 61 01 62 01&&63 01?
2, 就以上代码中出现的问题,即接收一个字符后连续发送两个字符问题 描述下 串口接收和发送数据的时间顺序是怎样的?即哪些时候是在同一时间操作,关于时间间隔。。。需不需要延时......等会出错的问题。
PS:操作起串口才发现,串口并不是教程,书本上面说得那么简单,要熟练操作、甚至精通串口,真的不简单啊感觉,所以恳请大侠们帮下忙,因为学习过程中这个问题困扰了一周,都没有人说个明白,感谢了。
在线时间1180 小时
威望2677分
芯币9974枚
E金币659枚
TA的帖子TA的资源
五彩晶圆(初级), 积分 2677, 距离下一级还需 823 积分
五彩晶圆(初级), 积分 2677, 距离下一级还需 823 积分
第一个为什么MCU收到串口发来的数据会发送两字节的数据,是因为你的代码中就是在收到一个字节数据后再将该数据发送出去,并同时发判断0x01这个数据,所以会出现在收到一个字节后会返回两个字节;
第二个是发送abcd却还是只返回六个字节的数据,原因可能是MCU还没有来得及处理c,但是d已经收到了,发生了接收溢出,导致d这个数据被丢弃,所以还是只返回了6个字节
在线时间5 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 8, 距离下一级还需 192 积分
一粒金砂(中级), 积分 8, 距离下一级还需 192 积分
第一个为什么MCU收到串口发来的数据会发送两字节的数据,是因为你的代码中就是在收到一个字节数据后再将该 ...
厉害,太感谢太感谢了。这个问题困惑了好久,网上找了好多资料,几乎要没心机了。
那请问您“MCU还没来得及处理c,但是d已经收到,发生 接收溢出,导致d被丢弃”是什么意思?
我的思考:
1 是已经收到了c,然后对它进行处理期间数据d也收到,但是d被丢弃,请问新收到的d不会将数据c替换吗?
2 那请问您,什么原因会造成这种接收数据时产生的溢出和数据丢弃呢? 有人说,接收数据和发送数据的时间是一样长?那是因为发送两个字节用时 比接收一个字节 用时长造成的吗?
3 最后再麻烦请教您,这种问题,或者对串口编程时避免这类问题的良好习惯是什么呢??
现在只是我的猜测,想要确认是不是这样,可能需要知道一些信息,比如你用的是哪个型号的单片机,运行的时钟是多少MHz,你的口波特率是多少,使用的电脑端的串口助手是什么,你把这些都放上来,这样才能进一步确认是&
在线时间1180 小时
威望2677分
芯币9974枚
E金币659枚
TA的帖子TA的资源
五彩晶圆(初级), 积分 2677, 距离下一级还需 823 积分
五彩晶圆(初级), 积分 2677, 距离下一级还需 823 积分
厉害,太感谢太感谢了。这个问题困惑了好久,网上找了好多资料,几乎要没心机了。
那请问您“MCU还没 ...
现在只是我的猜测,想要确认是不是这样,可能需要知道一些信息,比如你用的是哪个型号的单片机,运行的时钟是多少MHz,你的串口波特率是多少,使用的电脑端的串口助手是什么,你把这些都放上来,这样才能进一步确认是不是我们猜测的这样
在线时间5 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 8, 距离下一级还需 192 积分
一粒金砂(中级), 积分 8, 距离下一级还需 192 积分
现在只是我的猜测,想要确认是不是这样,可能需要知道一些信息,比如你用的是哪个型号的单片机,运行的时 ...
嗯嗯,是的,单片机是STC89C52RC& &时钟是11.0592MHz& &串口波特率是9600bps&&,串口助手是ECOM串口助手V2.8& && &
好的,明天再去分析一下&
在线时间1180 小时
威望2677分
芯币9974枚
E金币659枚
TA的帖子TA的资源
五彩晶圆(初级), 积分 2677, 距离下一级还需 823 积分
五彩晶圆(初级), 积分 2677, 距离下一级还需 823 积分
嗯嗯,是的,单片机是STC89C52RC& &时钟是11.0592MHz& &串口波特率是9600bps&&,串口助手是ECOM串口助手V ...
好的,明天再去分析一下
在线时间5 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 8, 距离下一级还需 192 积分
一粒金砂(中级), 积分 8, 距离下一级还需 192 积分
好的,明天再去分析一下
好的,拜托了,这个问题停留了两周,一直没找到答案。谢谢了谢谢了。
针对这个问题,我今天实际测试了一下,抓出了数据进行分析,分析的详细的内容我另外写了一个帖子,你可以去看一下
.cn/thread--1.html&
在线时间1180 小时
威望2677分
芯币9974枚
E金币659枚
TA的帖子TA的资源
五彩晶圆(初级), 积分 2677, 距离下一级还需 823 积分
五彩晶圆(初级), 积分 2677, 距离下一级还需 823 积分
好的,拜托了,这个问题停留了两周,一直没找到答案。谢谢了谢谢了。
针对这个问题,我今天实际测试了一下,抓出了数据进行分析,分析的详细的内容我另外写了一个帖子,你可以去看一下
............
天哪,您太用心了,很详细的解答过程,实在很感谢您。。。
不好好学习真对不住您这次的帮助,太感谢了太感谢了。
请问您看的那本书是?我也想看,感觉讲得很细。&
<p id="rate_040" onmouseover="showTip(this)" tip="很给力!&威望 + 3 分
芯币 + 3 枚
" class="mtn mbn">
在线时间5 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 8, 距离下一级还需 192 积分
一粒金砂(中级), 积分 8, 距离下一级还需 192 积分
针对这个问题,我今天实际测试了一下,抓出了数据进行分析,分析的详细的内容我另外写了一个帖子,你可以 ...
............
天哪,您太用心了,很详细的解答过程,实在很感谢您。。。
不好好学习真对不住您这次的帮助,太感谢了太感谢了。
请问您看的那本书是?我也想看,感觉讲得很细。
在线时间5 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 2, 距离下一级还需 3 积分
一粒金砂(初级), 积分 2, 距离下一级还需 3 积分
学习了太感谢了
EEWORLD 官方微信
EE福利 唾手可得
Powered by51单片机汇编语言的指令格式 - 51单片机 - 电子工程世界网
51单片机汇编语言的指令格式
14:01:02来源: diangon
  一个简单的循环灯实例&
  下图中的8个发光代表 8 个彩灯,让我们看看是如何实现的
  STAT: MOV A , #01H ; 高电平对应的发光二极管亮&
  LOOP: MOV P1, A ; 从 P1 口输出到发光二极管&
  MOV R1, #10&
  DEL1: MOV R2 , #200&
  DEL2: MOV R3, #126&
  DEL3: DJNZ R3, DEL3&
  DJNZ R2, DEL2&
  DJNZ R1, DEL1&
  LJMP LOOP ; 左移一位 , 下一个发光二极管亮&
  [ 标号 ] : 操作码 [ 目的操作数 ] [ 源操作数 ] ; [ 注释 ]&
   &     &    &       &       &&
  LOOP :   MOVX    A ,    @DPTR ;   将外部 RAM 单元内容送到 A&
  标号: 又称为指令地址符号。对标号有如下规定:&
  一般由 1 ~ 8 个 ASCII 字符组成,以字母开头,其余字符可以是字母、数字和其他特定字符。&
  不能使用助记符、伪指令或者寄存器的符号名称做标号。&
  与操作码之间用冒号分开,带方括号表示为可选项。&
  一个标号只能在程序中出现一次,不能重复出现。&
  操作码&是由助记符表示的字符串,它规定了指令要完成的具体操作。&
  操作数&指令操作的对象 . 操作数分为目的操作数(上例累加器 A) 和源操作数(上例中的 @DPTR). 目的操作数和源操作数的书写顺序不能颠倒 .&
  注&释&对指令功能的说明,以便于阅读,符号&;&后面的内容为注释。&
  及其注释中常用的符号&
  Rn ------选中当前的工作寄存器区中的寄存器R0~R7之一&
  @ Ri------选中当前的工作寄存器组中的寄存器R0或R1,间接寻址前缀符号direct------直接地址,一个内部RAM单元地址或SFR地址.&
  #data ------------8位或16位常数,也称立即数. #为立即数前缀标志符号&
  addr11------------11位目的地址&
  addr16------------16位目的地址&
  rel ---------------8位地址偏移量,值在-128~+127范围内&
  bit---------------位地址.SFR的位地址(可用符号或名称表示)&
  /-----------------位操作前缀,表示该位内容求反&
  (&)------------表示以&为地址单元中内容&
  ((&))--------表示以&为地址单元中内容为地址的单元中的
关键字:&&&&
编辑:什么鱼 引用地址:
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
微信扫一扫加关注 论坛活动 E手掌握
微信扫一扫加关注
芯片资讯 锐利解读
大学堂最新课程
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
热门资源推荐
频道白皮书
何立民专栏
北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。51单片机汇编语言教程23
MOVP1,ALCALLD500MSLAMPRET:RETEND以上程序功能很简单,但它演示了一个单片机键盘处理程序的基本思路,程序本身很简单,也不很实用,实际工作中还会有好多要考虑的因素,比如主循环每次都调用灯的循环程序,会造成按钮反应“迟钝”,而如果一直按着键不放,则灯不会再流动,一直要到松开手为止,等等,大家能仔细考虑一下这些问题,再想想有什么好的解决办法。2、采用中断方式:如图4所示。各个按钮都接到一个与非上,当有任何一个按钮按下时,都会使与门输出为低电平,从而引起单片机的中断,它的好处是不用在主程序中持续地循环查询,如果有键按下,单片机再去做对应的处理上一贴下一贴26课:矩阵式键盘接口技术及程序设计在单片机系统中键盘中按钮数量较多时,为了减少IO口的占用,常常将按钮排列成矩阵形式,如图1所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按钮加以连接。这样,一个端口(如P1口)就能组成4*4=16个按钮,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就能组成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。
& 果果文库所有资源均来源于互联网,仅供网友学习交流,若侵犯了您的权益,请联系我们予以删除。
7217&&人浏览
17964&&人浏览
5494&&人浏览
18639&&人浏览
17421&&人浏览
12938&&人浏览
17045&&人浏览
282&&人浏览
16550&&人浏览
7893&&人浏览
8406&&人浏览
5048&&人浏览
15265&&人浏览
14738&&人浏览
3586&&人浏览
本文标题:51单片机汇编语言教程23 链接地址:
2013- Inc. All Rights Reserved 果果文库 版权所有 联系站长: ; 经营许可证编号:浙ICP备号温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
百度背信弃义,毫无理由关闭了所有的百度博客。
故此由原百度《做而论道》迁至此地。
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(311)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'51单片机,汇编语言,按键操作控制',
blogAbstract:' 硬件电路:P1.0&~&P1.5&外接&6&个&LED,分别称为&D1&~&D6,低电平发光。P0.0&~&P0.3&外接&4&个&按键,分别称为&K1&~&K4。P3.2&~&P3.3&外接&2&个&按键,分别称为&K5&~&K6。用汇编语言编程进行控制,要求:当按下&K1&时,D1&发光;',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:1,
publishTime:7,
permalink:'blog/static/',
commentCount:2,
mainCommentCount:2,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'百度背信弃义,毫无理由关闭了所有的百度博客。\n故此由原百度《做而论道》迁至此地。',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}& & #define uchar unsigned char& & //宏定义 #define uint& unsigned int
& & sbit HWRx=P3^3;& & & //位声明
& & code uchar Table[]=&
//共阴 0-9 a-f - 表 {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};
& & uchar Table_Data[8]={0,0,0,0,0,0,0,0};//用于显示的数组 uchar Table_Rx[67];//用于存储判断接收是1或0的参数
& & void Delay();//延时子函数
& & void Display(uchar *lp,uchar lc)//显示 { &  & & & & & //定义变量 & & & & P2=0;& &
//端口2为输出,关闭 & & & & P1=P1&0xF8;& & //将P1口的前3位输出0,对应138译门输入脚,
& & & & & & & & & & & & & & & & & & & & 全0为第一位数码管 & & & & for(i=0;i&i++)& //循环显示,采用动态扫描 & & & & {&
&     P2=Table[lp[i]]; //查表法得到要显示数字的数码段 &     if(lp[i]&0x7f) &
    P2+=0x80; &     Delay();&
//延时 &     P2=0;& & //清0端口,准备显示下位 &     if(i==7)&
//检测显示完8位否,完成直接退出,不让P1口再加1,
& & & & & & & & & & & & & & & & &
否则进位影响到第四位数据 &
&     P1++;& & //点亮下一位数码管 & & & & } }
void main()& &
//主函数 { & & & & & EA=1;& & & //首先开启总中断 & & & & & EX1=1;& &
//开启外部中断 1 & & & & & IT1=1;& &
//设置成下降沿触发方式
& & & & & & & while(1)&
//一直显示,其它由中断处理 & & & & & {& & & & &
&     Display(Table_Data,8); & & & & & }&
& & void Delay()& & & & //延时时间大约为31us,12M { & & & & & uchar i=13; & & & & & while(i) & &     i--; }
& & void Delay_ms(uint z) //延时时间约为 1ms*X& 晶振为12M { & & & & & uint x=0,y=0; & & & & & for(x=z;x&0;x--) & & & & & & & & for(y=54;y&0;y--); } void hongwai()&
interrupt 2& & //外部中断 1 ,INT1(P3^3)连接红外线接收数据脚 { & & & & & uchar i,j, & & & & & EX1=0;&
//关闭中断
& & & & & & & j=33;&
//传送一组数包括引导码1位,4个八位数据,总共33位 & & & & & i=0;& & & //从第一维数组开始 &
& & & & & Delay_ms(10); & & & & & if(HWRx) & & & & & {& //然后再检测红线接收脚是有数据招收,有继续,没有则退出 & & & & & & & & &
EX1=1; & & & & & & & & & & & & & & }
& & & & & & & while(j--) & & & & & {& //循环接收33位数据,为何我们用到66位数组,我们可以不接收高
& & & & & & & & & 时间常数,只接低电平常数就 & & & & & &
//可以判断1或0了,在这里我们都接收,还有一点要知道,
& & & & & & & & &
接收波形是反向,在没有接收时端口为高电平 & & & & & &  & tmp=0; & &     Table_Rx[i]=1;& //时间量从1开始 & &    & while(!HWRx) //检测高低电平的变化,这里检测的是高电平 &    & {&
& & &     & & Table_Rx[i]++;& //没变继续加1
& & &     & &
Delay();& & &
//家一个延时防止,计数值一下子就加满了 & & &     & &
//加1 & & &     & &
if(tmp==250) & & &
    & & & & & & & &    & } & &     i++;
& & & & & & & & & & tmp=0; & &     Table_Rx[i]=1;& &
//时间量从1开始 & & & & & & & & while(HWRx)& &
//检测高低电平的变化,这里检测的是低电平 &   & & {&
& & & & & & & & & &
Table_Rx[i]++; //没变继续加1
& & & & & & & & & &
Delay();& & &
//同上 & & & & & & & & & &
//加1,用于判断是1还是0的,低电平来了 & & & & & & & & & &
if(tmp==250) & & &
    & & & &     }
& & & & & & & &
& & & & & & P1=0xf8; & & & & i=200;& & & //加入循环延时,抗干扰 & & & & while(i)&
//在有接收数据的时候显示一个H & & & & { &
    tmp=255; &     while(tmp) &     { & &     & & &
tmp--; &     & & & &
P2=0x76; &
    } &
    i--;&
& & & & & & tmp=0; & & & & for(i=3;i&19;i++,i++)&
//处理发送的数据 & & & & {&
& & & & & & & & & tmp&&=1;& & & & & & & //右移一位,接收低位在前 & &     if(Table_Rx[i]&30)& & //检测低电平时间超过30就确认为1 & & &     & &
tmp+=0x80; & & &
Table_Data[0]=tmp/16;& &
//分开2位以16进制显示,用显示发送的数据 & & &
Table_Data[1]=tmp%16;
& & & & & & tmp=0; & & & & for(i=19;i&35;i++,i++)& & //同上 & & & & {&
& & & & & & & & &
tmp&&=1; & &     if(Table_Rx[i]&30) & & &     &
tmp+=0x80; &  &
} & & & & Table_Data[2]=tmp/16; & & & & Table_Data[3]=tmp%16;
& & & & & &
tmp=0; & & & &
for(i=35;i&51;i++,i++) & & & &
& &     tmp&&=1; & &     if(Table_Rx[i]&30) & &
    & &
tmp+=0x80; & & & &
} & & & & Table_Data[4]=tmp/16; & & & & Table_Data[5]=tmp%16;
& & & & & &
tmp=0; & & & &
for(i=51;i&67;i++,i++) & & & &
& &    & tmp&&=1; & & & & & & & &
if(Table_Rx[i]&30) & & & & & & & & & & &
tmp+=0x80; & & & & } & & & & Table_Data[6]=tmp/16; & & & & Table_Data[7]=tmp%16; & & & & EX1=1;& & &
//刚进中断时关闭了分控,现在要打开 } &
&&&&&往下看有更多相关资料
本网站试开通微、小企业商家广告业务;维修点推荐项目。收费实惠有效果!欢迎在QQ或邮箱联系!
试试再找找您想看的资料
资料搜索:
查看相关资料 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款
copyright & &广电电器(中国梧州) -all right reserved& 若您有什么意见或建议请mail: & &
地址: 电话:(86)774-2826670& & &&)

我要回帖

更多关于 单片机汇编语言入门 的文章

 

随机推荐