51单片机io口问题,while(TI==0);里面条件一直成立,应该是死循环吧,还有while(1),所以一直发送字符? 单片机中:while(TI==0)怎么能实现等待功能?困惑了...

\u8bf7\u6559\u5355\u7247\u673a\u9ad8\u624b\uff0cMODE 0\u7684\u4e32\u53e3\u53d1\u9001\u3002while(!TI) \u662f\u4ec0\u4e48\u610f\u601d\uff1f\u5b83\u91cc\u9762\u7684_nop_(); \u4f1a\u662f\u6b7b\u5faa\u73af\u5417\uff1f

\u5355\u7247\u673a\u4e32\u53e3\u53d1\u9001\u8fc7\u7a0b\u4e2d TI \u7f6e 1\uff0c\u76f4\u5230\u53d1\u9001\u5b8c\u6bd5\uff0c\u786c\u4ef6\u81ea\u52a8\u5c06 TI \u7f6e 0
while(!TI) \u5c31\u662f \u76f4\u5230\u4e32\u53e3\u53d1\u9001\u5b8c\u6bd5\u5c31\u505c\u6b62\uff0c\u7531\u4e8e _nop_() \u53ea\u662f\u4e00\u4e2a\u77ed\u5ef6\u65f6\uff0c\u6240\u4ee5\u4e0d\u4f1a\u662f\u6b7b\u5faa\u73af

\u9996\u5148\uff0c\u4f60\u8981\u901a\u8fc7\u8f6f\u4ef6\u8bbe\u7f6e\u597dTI=0\uff1b
\u5f00\u59cb\u6267\u884c\u7a0b\u5e8f\u540e\uff0cTI==0 \u8fd9\u4e2a\u6761\u4ef6\u4e3a\u771f\uff0c\u4e5f\u5c31\u662fwhile(1); \u4e00\u76f4\u6267\u884c\u8fd9\u6761while(TI==0)\u7a0b\u5e8f\uff0c\u4e5f\u5c31\u662f\u6240\u8c13\u7684\u7b49\u5f85\uff0c\u76f4\u5230\u4f60\u8981\u53d1\u9001\u7684\u6570\u636e\u53d1\u9001\u5b8c\u6bd5\uff0cCUP\u4ea7\u751f\u4e00\u4e2a\u4e2d\u65ad\uff0c\u5185\u90e8\u5bc4\u5b58\u5668\u7528\u4e8e\u6807\u8bc6\u53d1\u9001\u4e2d\u65ad\u7684TI\u4f4d\u81ea\u52a8\u7f6e1\uff0c\u6b64\u65f6\uff0cTI\u7684\u7f6e\u4e3a1\uff0c\u4e5f\u5c31\u662fTI==0 \u8fd9\u4e2a\u6761\u4ef6\u4e0d\u518d\u6210\u7acb\uff0cwhile(TI==0)\u8fd9\u6761\u8bed\u53e5\u5c31\u76f8\u5f53\u4e8ewhile(0);\u4e8e\u662f\u7a0b\u5e8f\u8df3\u51fawhile()\u5faa\u73af\u5f80\u4e0b\u6267\u884c\u3002
\u53e6\u5916\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u53ea\u6709while(TI==0)\uff1b\u624d\u884c\uff0c \u540e\u9762\u7684\u5206\u53f7\u4e0d\u80fd\u7701\u7565\uff0c\u6ca1\u6709\u5206\u53f7\u7f16\u8bd1\u65f6\uff0c\u9ed8\u8ba4while(TI==0)\u8fd9\u6761\u8bed\u53e5\u540e\u9762\u7684\u90a3\u6761\u7a0b\u5e8f\u5bf9\u5750while()\u5faa\u73af\u7684\u5bf9\u8c61\u4e86\u3002\u90a3\u5c31\u9519\u4e86\uff01

当发送结束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)试试

  • 51鍗曠墖鏈鍏堣鍓4涓伅浜,浜7绉,璁╁悗鍐嶈鍚4涓伅浜11绉,鐒跺悗寰幆
    绛旓細鐢佃矾鍘熺悊鍥惧挶涓嶈锛屽鏋鍗曠墖鏈篒O鍙鎷変綆鐏寒銆佹媺楂樼伅鐏紝鍒欒缃竴涓畾鏃舵ā鍧楋紝涓涓鏁版ā鍧 while(1){ for锛坕=0;i<=18;i++锛// for璁℃暟妯″潡.7+11=18绉 { 瀹氭椂妯″潡鍑芥暟锛堬級//姣忔1绉 P0=0xF0; //4涓伅浜 if锛坕=7锛墈P0=0x=0x0F锛泒 //鍚4涓伅寮濮嬩寒 } if锛坕=18锛墈i=0锛泒 ...
  • 51鍗曠墖鏈涓涓io鍙杈撳嚭涓嶅悓鐨4涓笉鍚岀殑pwm
    绛旓細1銆侀鍏堣鏄庣櫧PWM鐨勫惈涔夛紝PWM灏辨槸杈撳嚭涓嶅悓鍗犵┖姣旂殑鑴夊啿锛2銆佹櫘閫51鍗曠墖鏈篒O鍙杈撳嚭PWM鐨勮瘽锛屽彲浠ョ敤瀹氭椂鍣ㄥ幓璁℃椂锛屾瘮濡傝杈撳嚭100HZ鐨勫崰绌烘瘮50%鐨凱WM銆傚彲浠ラ厤缃1ms鐨勫畾鏃跺櫒涓柇锛屽湪涓柇涓鏁帮紝涓涓腑鏂氨鏄1ms锛100HZ鐨勮剦鍐诧紝鍛ㄦ湡鏄10ms锛50%鐨勫崰绌烘瘮锛屽彲浠ヨ鏁板埌5鐨勬椂鍊欐妸Io鍙e彇鍙嶏紱绋嬪簭濡備笅 void ...
  • 51 鍗曠墖鏈妯℃嫙涓插彛鐨勯棶棰 鐩墠鍙戦佹暟鎹病鏈闂,鎺ユ敹鏁版嵁鏃跺彧鑳芥帴鏀跺墠涓...
    绛旓細鎶婂嚱鏁皍char RByte()涓殑鏈鍚庝竴涓猈aitTF0();鍒犻櫎锛岀▼搴忓氨鑳借繛缁帴鏀舵暟鎹簡銆備笅闈㈡槸鎴戠殑绋嬪簭锛屼綘鐪嬩竴涓嬪氨鏄庣櫧浜嗐/ 妯℃嫙涓插彛鏀跺彂绋嬪簭 鏀圭▼搴忓彂閫佸彛閲囩敤浠讳竴IO鍙o紝鎺ユ敹鍙i噰鐢ㄥ閮ㄤ腑鏂0鍙o紝瀹炵幇浜9600bit/s鐨勪覆鍙i氫俊 淇″彿浜х敓涓庢帴鏀堕噰鐢ㄥ畾鏃跺櫒瀹氭椂婧㈠嚭鏍囧織鏉ヨ繘琛屾帶鍒 娉ㄦ剰闂锛1銆佷腑鏂殑涓柇鏍囧織瑕佷繚璇...
  • 51鍗曠墖鏈虹殑IO鍙i棶棰
    绛旓細1锛夐鍏堣纭畾浣犵殑鍗曠墖鏈鍨嬪彿銆傝櫧鐒朵紶缁熺殑51鍗曠墖P2鍙f紡鏋佸紑璺殑锛屼絾鐩墠閮ㄥ垎鍗曠墖鏈虹殑鎵鏈IO涓轰簡澧炲ぇ鐢垫祦锛岄兘閲囩敤浜嗗唴閮ㄤ笂鎷夋柟寮忋傚STC鐨51绫汇2锛変紶缁熷崟鐗囨満鐨51锛孭2鍙o紝 涓嶅瀹冩搷浣滐紝鐘舵佹槸涓嶅畾鐨勶紝鏈夊彲鑳芥槸0锛屼篃鍙兘鏄1.鍐呴儴鏈変笂鎷夌數闃荤殑锛屼笉瀵瑰畠鎿嶄綔锛岄粯璁や负1....
  • 浣跨敤51鍗曠墖鏈鐨刬/o鍙f椂瑕佹敞鎰忓摢浜闂
    绛旓細澶栫數璺彲灏嗛珮鐢靛钩鎷変綆锛屼絾涓嶈兘寮鸿灏嗕綆鐢靛钩鎷夐珮 IO绔彛楂樼數骞宠緭鍑虹數娴佸彧鏈300UA宸﹀彸锛屼綆鐢靛钩杈撳嚭鐢垫祦锛堢亴鐢垫祦锛夊彲杈10ma浠ヤ笂 鐜颁粖鐨勫寮哄瀷51鍗曠墖鏈鏈塈O绔彛閰嶇疆瀵勫瓨鍣紝鍙互閰嶇疆涓哄急涓婃媺 鎺ㄦ尳 娴┖ 寮婕忓洓绉嶆ā寮,P0鍙d篃鏄繖鏍 鍙﹀锛屽崟涓鑴 楂樹綆鐢靛钩杈撳嚭鑳藉姏鍙揪20mA锛屼絾澶氫釜IO鍙鎬荤數娴佽闄愬埗涓200ma...
  • iic鎬荤嚎 51鍗曠墖鏈篿o鍙妯℃嫙 浣嗘槸璇诲彇鎬绘湁闂
    绛旓細define uint unsigned int define uchar unsigned char unsigned char sec; //瀹氫箟璁℃暟鍊硷紝姣忚繃1绉掞紝sec鍔1 unsigned int tcnt; //瀹氭椂涓柇娆℃暟 bit write=0; //鍐24C08鐨勬爣蹇楋紱sbit sda=P2^0; //IO鍙瀹氫箟 sbit scl=P2^1;sbit dula=P2^6;sbit wela=P2^7;unsigned char j,...
  • 姹傞珮鎵 51鍗曠墖鏈篒O鍙杈撳嚭2.57HZ鏂规尝鍗犵┖姣旀槸40%绋嬪簭
    绛旓細interrupt 1 { flag=~flag;if(flag){ TH0=(65536-155642)/256;TL0=(65536-155642)%256;pluse=1;} else { TH0=(65536-233463)/256;TL0=(65536-233463)%256;pluse=0;} } main(){ TMOD=0x01;TH0=(65536-155642)/256;TL0=(65536-155642)%256;TR0=1;ET0=1;EA=1;while(1);} ...
  • 闂ぇ瀹朵竴涓51鍗曠墖鏈绋嬪簭鐨闂銆
    绛旓細while ((OSCXCN & 0x80) == 0); //妫娴嬪閮ㄦ尟鑽″櫒鏄惁鏈夋晥 OSCICN = 0x08; //閫夋嫨澶栭儴鎸崱鍣ㄤ綔涓虹郴缁熸椂閽燂紝绂佹鍐呴儴鏃堕挓 } //瀹氭椂鍣1鍒濆鍖栧嚱鏁帮紝瀹氭椂鍣1浣滀负娉㈢壒鐜囧彂鐢熷櫒 void Timer_Init(){ CKCON = 0x10; //C/T1鐩存帴浣跨敤绯荤粺鏃堕挓浣滀负鏃堕挓婧 TCON = 0x40; //C/...
  • 鍏充簬51鍗曠墖鏈篒O鍙椹卞姩鑳藉姏鐨闂
    绛旓細51鍗曠墖鏈篒O鍙涓洪泦鐢垫瀬涓婃媺杈撳嚭鏂瑰紡锛岄珮鐢靛钩杈撳嚭鐢垫祦绛変簬涓婃媺鐢甸樆鐨勭數娴侊紝杩欎釜鐢垫祦姣旇緝灏忥紝浣庣數骞宠緭鍑烘槸鍐呴儴鏅朵綋绠″惛鏀剁殑鐢垫祦锛屾渶澶у彲浠ヨ揪鍒10mA锛屼絾鏄暣涓鍙g殑鎬荤數娴佷笉鑳借秴杩24mA銆傜數骞充綆浜0.7V灏辨槸浣庣數骞筹紝楂樹簬1.8V灏辨槸楂樼數骞炽傚湪杩欎釜涔嬮棿涓嶇‘瀹氥
  • 鍏充簬51鍗曠墖鏈鐨勫閮ㄤ腑鏂娇鐢ㄦ柟娉
    绛旓細//鐢变簬鍗曠墖鏈涓婄數涔嬪悗锛屾墍鏈鐨処O鍙榛樿鏄珮鐢靛钩锛岃岃姹傛槸寮濮嬩笉浜紝鎵浠ヨ灏哖1.0鍙e紑濮嬭缃负浣庣數骞炽while(1){ for(i=0;i<3;i++)鍔ㄦ佹暟鐮佺闂儊 { P2=wei[i];P0=duan[i];delay(35);} } } void led_()interrupt 0 //澶栭儴涓柇0鍑芥暟锛屼腑鏂嚱鏁颁笉闇瑕佺敵鏄 { uchar i;led=1;//鍦...
  • 扩展阅读:51同城交友 ... 单片机io口有哪些功能 ... 51单片机p0口的地址 ... 51单片机io同时输入输出 ... 51job ... 51单片机双向io扩展 ... 基于51单片机的智能小车 ... io接口图 ... 51单片机io口不够用怎么办 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网