51单片机io口问题,while(TI==0);里面条件一直成立,应该是死循环吧,还有while(1),所以一直发送字符?

作者&投稿:蒋丁 (若有异议请与网页底部的电邮联系)
请教单片机高手,MODE 0的串口发送。while(!TI) 是什么意思?它里面的_nop_(); 会是死循环吗?~

单片机串口发送过程中 TI 置 1,直到发送完毕,硬件自动将 TI 置 0
while(!TI) 就是 直到串口发送完毕就停止,由于 _nop_() 只是一个短延时,所以不会是死循环

首先,你要通过软件设置好TI=0;
开始执行程序后,TI==0 这个条件为真,也就是while(1); 一直执行这条while(TI==0)程序,也就是所谓的等待,直到你要发送的数据发送完毕,CUP产生一个中断,内部寄存器用于标识发送中断的TI位自动置1,此时,TI的置为1,也就是TI==0 这个条件不再成立,while(TI==0)这条语句就相当于while(0);于是程序跳出while()循环往下执行。
另外需要注意的是,只有while(TI==0);才行, 后面的分号不能省略,没有分号编译时,默认while(TI==0)这条语句后面的那条程序对坐while()循环的对象了。那就错了!

当发送结束T1=1;这表明结束。
所以 while(TI==0);
这里没错。

发送结束后把TI设置为0,表明下次继续发
因为是在while(1)里,当 while(trdata[i]!=0x00) 里的I到达0xx,既跳出此循环
回到while(1),所以I又为0.。。这循环不会中断~
当i 又回到0, while(trdata[i]!=0x00) 又开始这个循环。。

你难道没发现你这个地方就错了,
while(TI==0);
TI=0;
把while(TI==0)改为while(TI!=0)试试


一个很简单 单片机IO口控制与门问题,上拉电阻。
你这个电路有两个无法调和的矛盾,不解决电路无法正常工作。问题一二三也就不用问了:因为现实中没有15V工作电压的单片机(常见的是3~5V),所以要么将U1和R13的电源电压改为5V,要么通过一个足够耐压的电子开关(晶体三极管,场效应管或其他开关器件)取代D2位置。如图:按上图,U1和R13可以使用15V电压...

单片机怎么赋值1给io口
单片机如何给寄存器赋值1 单片机中在给寄存器赋值时,常常写data|=0x03不直接写data=0x03,是因为前者可以保护寄存器上其它位的值,io口只改变想要改变的位

单片机的一个问题
答:表示此IO口有第二功能,第二功能为AD功能。2. P2口后面是A,比如P2.7\/A15,那个A什么意思呢?答:表示此端口具备地址总线功能。3 假如要外接驱动,比如7407 TTL集电极开路六正相高压驱动器,一般接哪个口?答:哪个都可以。只要电路进行正确的匹配就行了。一般把单片机IO口设置为双向IO口...

单片机IO通信问题
一直循环检测IO口状态,检测到起始信号边缘(如51单片机IO口一直是高电平,当检测到出现低电平即为启动信号),然后利用延时程序延时0.5ms,读取每个数据位的中间位置,判断是0还是1。根据你的实际要求,第一次读取肯定是高电平,第二次读取为低电平,你需要再判断第三次和第四次,如果第三、四次均为...

c51单片机 的普通io口为什么要加一个上拉电阻呢 P0的开漏io口为什么也要...
老51 P0口,没有上拉,是作为总线用,若作为输出口,没有上拉,将没有高电平。其他口,上拉电流只能达到160微安,不能推动较大负载,所以有时要加上拉电阻。若低电平有效,可以不加。(如带LED显示)PCB设计,为了方便,往往留有上拉电阻位置。现在的51,口多有4种设置。设成推挽输出,就不用上...

单片机P1——P3口作为输入口的时候 为什么要先向该口写1呢?
这是因为51单片机的独特IO口设计造成的,四个并行I\/o口在输出低电平时,有一只晶体管导通,这样输出低电平,当再读入时,这个晶体管如果仍然是导通状态,则外部的信号会因为它读入不正确,因此,需要读入前先写一个1(高电平)将这只晶体管截止才能读入正确。具体参照51单片机的I\/O口的原理图。

我想问问关于51单片机I\/O口的问题!!
--但是电阻很大,几百K,上拉作用有限。那我接低电平的外围器件不就会输出电流了吗?--P1P2P3,都有输出电流。--很小的电流。但这是输入状态啊!不矛盾吗?--谁说是输入状态?他是瞎说。--此时是输出1。--但是引脚内部的上拉能力有限,因此,这时就可以当输入使用。而且单片机的Io口的...

PIC单片机的I\/O口输出电流问题???
除非当面谈,不然网上就没有扯的清的时候。如果各位是搞研发的,都是实际用过的,更难说动。所以,千言万语总结下来:我坚持我的观点不变。不用的IO口设置为输入。不能设为模拟输入。ASM白痴 的“整形电路”理论是胡说八道。本人关于模拟通道的观点不变,有异议的自己去发贴求证。既然dhlfan同意...

单片机的I\/O口具体问题关于输出电流求高人
呵呵……高中物理电路部分没好好学吧。这个类似于电源的内阻。输出电流越大,消耗在内部的电压压降就越大。输出电压=5V-内部压降。51单片机的上拉管典型阻值20k,若外部开路,在内部的压降=0,输出就是5V,如果IO接个5k电阻到GND,那么外部电阻的电压=5V÷(5+20)×5=1V,而外部5V电阻上的...

单片机io口
一般没有问题,开漏输出就是为了方便使用不同的电压,一般12V都没有问题 小功率三极管耐压也有30V 但作为输入如果没有说明允许5V,那么只能是3·3伏,最多加3·8伏的样子

秀城区19142339015: 51单片机io口问题,while(TI==0);里面条件一直成立,应该是死循环吧,还有while(1),所以一直发送字符? -
祗薇十味: 当发送结束T1=1;这表明结束.所以 while(TI==0); 这里没错.发送结束后把TI设置为0,表明下次继续发 因为是在while(1)里,当 while(trdata[i]!=0x00) 里的I到达0xx,既跳出此循环 回到while(1),所以I又为0...这循环不会中断~ 当i 又回到0, while(trdata[i]!=0x00) 又开始这个循环..

秀城区19142339015: 51单片机怎么初始化io口为低电平? -
祗薇十味: 1、首先注意51单片机上电的时候会有个复位的操作,复位的时候不执行单片机内部程序,复位之后51单片机的所有IO口都为高电平;2、在单片机复位之后在main函数里执行程序,如果要使Io口初始化为低电平,就要在while循环的上方把IO置...

秀城区19142339015: 51单片机上电后io口怎么置低电平??? -
祗薇十味: 51单片机上电后io口置低电平很简单,直接赋值就好. MOV P0,#0 MOV P1,#0 MOV P2,#0 MOV P3,#0

秀城区19142339015: 51单片机的IO口问题 -
祗薇十味: 1)首先要确定你的单片机型号. 虽然传统的51单片P2口漏极开路的,但目前部分单片机的所有IO为了增大电流,都采用了内部上拉方式.如STC的51类.2)传统单片机的51,P2口, 不对它操作,状态是不定的,有可能是0,也可能是1. 内部有上拉电阻的,不对它操作,默认为1.

秀城区19142339015: 单片机IO口输出问题 -
祗薇十味: 我来给你正宗的答案吧! 51的口,都有一个特性, 那就是:当输出5V时,可对外输出约二十几微安电流 当输出0V时,可吸收约十几毫安电流. 当然,P0口比其它口要稍微大一点,理论上讲是两倍关系 但他们都有一个共性,那就是,当输出为0V时, 可对外输出的电流太小了,这个电流不足以让LED亮, 所以,为了让LED能亮,就只能用输出0的状态来驱动, 那时候,十几毫安电流,肯定能用, 当然,此时CPU只能吸收电流,所以,在LED的正极要串 一限流电阻并接到5V电源上,以提供电流.

秀城区19142339015: 关于51单片机的I/O的电平不能改变的问题,跪求! -
祗薇十味: 高电平的时间太短了!while(1) { P1=0x00; delay(500); P1=0xff; delay(500);} 在P1=0xff;后加上500延时就OK了.

秀城区19142339015: 单片机IO口的问题 -
祗薇十味: 可以,但是不能同时.作输出的原理很简单,你给它赋值0它就是0,你给它赋值1它就是1,端口上的电平随之改变 作输入的原理差不多,你给它1,这个时候按照输出来说它就是1,但是此时你可以通过电路把这个输出1的端口和地线(0电位)连接起来,此时它就变成了0,程序里去读它的值,能读出0.

秀城区19142339015: 51单片机的io口默认是高电平还是低电平 -
祗薇十味: 51的端口寄存器默认值是0xFF,因此默认的IO状态为高.

秀城区19142339015: 51单片机I/O口的问题 -
祗薇十味: 就是P0口输出的电压值高低,把P0口作为一般IO口使用的话,要在硬件电路上接上拉电阻,因为单片机内部结构决定了P0口恒为低电平,只有在外部接上上拉电阻才能控制其为高或低

秀城区19142339015: c语言51 io口程序设计 -
祗薇十味: //下列程序基本正确,剩下一些脉冲宽度定时,可自行完成.#include #define uchar unsigned char#define uint unsigned int sbit P00 = P0^0; sbit P01 = P0^1; sbit P02 = P0^2; sbit k_1 = P3^0; //第一个输入 uchar t_10ms, k3;//-----------------------------...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网