文章首页 | 基础入门 | 电路原理图 | 姊舰鍥惧疄渚� | PLC鍩虹   銆婂鏋滃枩娆㈡湰绔欙紝璇锋寜 Ctrl+D 鎵嬪姩鏀惰棌锛佹劅璋㈡偍鐨勬敮鎸併€�涓€璧峰涔犱竴璧疯繘姝ワ紝鐢靛瓙寮€鍙戠帇娆㈣繋鎮紒.

电子开发网

电子开发网电子设计 | 电子开发网Rss 2.0 会员中心 会员注册

鈽呯數璺叕寮忔墜鍐岋紝鏈€鏂扮増銆婄數瀛愮數璺叕寮忚绠楀櫒銆嬶紝鐢佃矾鍏紡鏌ヨ鎵嬪唽 鐢佃矾鍏紡璁$畻鍣ㄣ€愮數瀛愪粠涓氫汉鍛樺繀澶囨墜鍐屻€�
鈽嗗崄澶╁浼氬崟鐗囨満瀹炰緥100 c璇█ chm鏍煎紡銆傝祫鏂欏唴瀹硅缁嗭紝瑕嗙洊渚嬪瓙澶氾紝鍐呭骞裤€愮數瀛愪粠涓氫汉鍛樺繀澶囨墜鍐屻€�
搜索: 您现在的位置: 电子开发网 >> 电子开发 >> 单片机 >> 正文

单片机串口通讯

作者:佚名    文章来源:本站原创    点击数:1441    更新时间:2011-3-22

通信协议: 第1字节,MSB为1,为第1字节标志,第2字节,MSB为0,为非第一字节标志,其余类推……,最后一个字节为前几个字节后7位的异或校验和。
  测试方法:可以将串口调试助手的发送框写上 95 10 20 25,并选上16进制发送,接收框选上16进制显示,如果每发送一次就接收到95 10 20 25,说明测试成功。


//这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收
//和查询发送,另外我觉得发送没有必要用中断,因为程序的开销是一样的


#include <reg51.h>
#include <string.h>

#define INBUF_LEN 4 //数据长度

unsigned char inbuf1[INBUF_LEN];
unsigned char checksum,count3;
bit read_flag= 0 ;

void init_serialcomm( void )
{
SCON = 0x50 ; //SCON: serail mode 1, 8-bit UART, enable ucvr
TMOD |= 0x20 ; //TMOD: timer 1, mode 2, 8-bit reload
PCON |= 0x80 ; //SMOD=1;
TH1 = 0xF4 ; //Baud:4800 fosc=11.0592MHz
IE |= 0x90 ; //Enable Serial Interrupt
TR1 = 1 ; // timer 1 run
// TI=1;
}

//向串口发送一个字符
void send_char_com( unsigned char ch)
{
SBUF=ch;
while (TI== 0 );
TI= 0 ;
}

//向串口发送一个字符串,strlen为该字符串长度
void send_string_com( unsigned char *str, unsigned int strlen)
{
unsigned int k= 0 ;
do
{
send_char_com(*(str + k));
k++;
} while (k < strlen);
}


//串口接收中断函数
void serial () interrupt 4 using 3
{
if (RI)
{
unsigned char ch;
RI = 0 ;
ch=SBUF;
if (ch> 127 )
{
count3= 0 ;
inbuf1[count3]=ch;
checksum= ch- 128 ;
}
else
{
count3++;
inbuf1[count3]=ch;
checksum ^= ch;
if ( (count3==(INBUF_LEN- 1 )) && (!checksum) )
{
read_flag= 1 ; //如果串口接收的数据达到INBUF_LEN个,且校验没错,
//就置位取数标志
}
}
}
}


main()
{
init_serialcomm(); //初始化串口
while ( 1 )
{
if (read_flag) //如果取数标志已置位,就将读到的数从串口发出
{
read_flag= 0 ; //取数标志清0
send_string_com(inbuf1,INBUF_LEN);
}
}

串行通信虽然有其自身优点:如适合长距离通信,有一定的纠错能力等,但并行通信在短距离(数米范围内)传输过程中的优点是显而易见的。首先串行通信时要设置串口数据,如:串口号(Com1、Com2或者其他串口)、波特率、数据位数、停止位、校验位等等。而且单片机与PC机的串口数据必须一一对等,否则不能传输。而并行传输时,无需上述过程。其次,PC机的串口电平值为+12V~-12V,单片机是TTL电平(0~+5V),两者必须要经过电平转换芯片进行电平间的转换。而进行并行传输时,由于双方都是TTL电平,所以PC的并口可以与单片机或其他芯片直接相连;另外,串行传输速度慢,每次只能传送一位,而并行每次可以传送8位,速度上的差异显而易见。

而对于单片机,串口(UART)是最常用的端口,尤其对于存在两个或多个串口的单片机来说,充分利用串口进行通信是非常重要的。


输出输入接口的扩展


单片机串口实现"并行"通信,其原理就是将PC机传过来的并行数据转换成串行数据,送入单片机的串口再由其进行相应处理。实质上就是一个数据串-并、并-串转换的过程。

PC的并口为一个标准的25针插座,包含一个八位二进制数据端口(地址为378H),即第2脚到第9脚;一个输入控制端口(地址为379H),即第15脚、13脚、12脚、10脚、11脚,其另外低三位无定义;一个输出控制口(地址为37AH),即第1脚、14脚、16脚、17脚,其另外高四位无定义。由此可见后面两个端口都不是完全的8位。

输出接口电路扩展

这里使用常用的移位寄存器74LS164与单片机的RXD口构成输出接口电路。

双列直插式74LS164引脚定义如图1所示。

其中:QA~QH为并行输出的数据,送入PC机并口378H端口(接收数据的8个数据位);单片机串口输出的数据从AB输入;CLR信号用于清除输出数据(通常用在移位完成时);内部数据移位依靠时钟CLK信号上升沿(由单片机TX提供)控制。

表1是该芯片工作的真值表。


输入接口电路扩展


使用常用的移位寄存器74LS165与单片机的RXD口构成输入接口电路。

双列直插式74LS165引脚定义如图2所示。

其中:A~H为并行输入的数据,接PC机并口378H端口(接收数据的8个数据位);单片机串口接收的数据(RXD端口)从QH输入;SH/LD信号用于重新装载数据(通常用在数据完全移出后);SER是用于填充数据移出后的空位的逻辑电平信号(逻辑"1"或"0");而数据是否移动由CLK INH和CLK联合控制;内部数据移位依靠时钟CLK信号(仍由单片机的TXD提供)上升沿控制。

表2是该芯片工作的真值表。

其他软硬件准备工作

输入输出控制端口的连接。将单片机的P3.4、P3.5口分别与PC并口的第15脚、第16脚相连。这样在进行数据通信时,两者的握手信号传输就解决了:当并口的第16脚置高电平时,用来通知单片机接收PC机已准备就绪的数据,单片机收到以后就可以进行相应控制,接收数据;当单片机接收完数据时,会置P3.4为高电平并被379H的第15脚接收,于是PC机准备发送下一个数据……单片机向PC机发送数据时,情况与此类似,由P3.4发送信号给PC机,而由P3.5接收PC机发送过来的信号。

软件方面,由于是用串口进行"并行"通信,因此就不能将串口的工作方式设置为方式0(移位寄存器输入/输出方式)以外的其他方式。还要注意此时串口的波特率固定为单片机外接晶振频率的1/12。串行数据通过RXD输入/输出,TXD用于发送控制输入输出数据移位的时钟脉冲。收发的数据为8位,低位在前。

设计实例

由于这一并行通信实现方法非常简单,所以对于有一定单片机编程经验的开发人员来说,只要硬件电路确定下来,软件方面的问题就非常容易。图3为电路原理图。

需要说明的是:1、单片机与PC机并口要共地;2、由于并行通信存在应答信号(本图中由单片机的P3.4、P3.5实现此功能),所以不会出现RXD端口数据混乱的情况。

小结

现在单片机的应用越来越广泛,单片机与PC之间的通信是一个非常重要的应用。如果单纯的从实现单片机与PC的并行通信的角度来说,该实现方法并不是最简单的。最简单的方法是将PC的并口对应引脚与单片机的P1口和P3口直接相连,然后软件上实现。本文的目的是充分利用单片机的串口资源与PC机进行通信。


Tags:单片机,串口通讯  
责任编辑:admin
请文明参与讨论,禁止漫骂攻击,不要恶意评论、违禁词语。 昵称:
1分 2分 3分 4分 5分

还可以输入 200 个字
[ 查看全部 ] 网友评论
    没有任何评论
鐢靛瓙寮€鍙戠綉锛氭眹闆嗙患鍚堝悇绫荤數瀛愬埗浣滀笌鐢佃矾鍥剧殑缃戠珯锛宲lc宸ユ帶鎶€鏈�,妯$數鏁扮數鐭ヨ瘑,鍗曠墖鏈篍DA绛夌瓑锛佽崯钀冪數璺浘缃戠珯绮惧崕锛屼负宸ョ▼甯堝垱閫犱环鍊笺€傛杩庡叧娉ㄥ井淇″叕浼楀彿锛氱數瀛愬紑鍙戠綉锛�
最新推荐
璧勬枡鍖呬笅杞�
 [闂備礁鎲¢〃鍡椕哄⿰鍕珷闁哄稁鍘肩€氬螖閿曚焦纭堕柕鍫亰閺岋繝宕掗敂钘夘伓]闂備礁鎲¢妵鐐电矆娓氣偓婵″灚寰勭仦绋夸壕婵炴垵纾槐鎵磼閸欐ê宓嗙€规洩绻濆鎾偐瀹割喗姣堥梻浣告惈閻楀棝骞栭锔藉仾闁告洦鍓涢悷褰掓煥閻曞倹瀚�100 c闂佽崵濮村ù鍕箯閿燂拷
 [闂佸搫顦遍崕鎰板垂椤栨埃鏋庨柕蹇嬪灮鐏忕敻鏌ㄩ悤鍌涘]濠电偞鍨堕幐鎼佀囩€圭姰浜圭紒鈧悜鐫犻梺璇插閸愯崵绱撳鍗炲К闁告洦鍓涢々鐑芥偣閹帒濡介柛鈺佸€垮鍫曟倻閸℃浠у┑鐐叉-閺侇煝-TR
 [闂備焦妞垮鈧紒鎻掝煼閹矂鎮欓鍌ゆ祫闁荤姵浜介崝宥夊春閸岀偞鍋eù锝囨嚀缁€鍐┿亜閹垮嫭瀚�]LM324闂佸搫顦弲婊堝礉閺嶎厼妫橀柨鐕傛嫹4~20mA闂佸搫顦遍崕鎴﹀箯閿燂拷1~5V闂備焦鐪归崹褰掓倶濮樿京鐭堥柨鐕傛嫹
 [闂備焦妞垮鈧紒鎻掝煼閹矂鎮欓鍌ゆ祫闁荤姵浜介崝宥夊春閸岀偞鍋eù锝囨嚀缁€鍐┿亜閹垮嫭瀚�]LM386濠碉紕鍋涘﹢杈╁垝椤栫偞鍊垫い鎺嶇劍婵挳鏌熼幑鎰靛殭妞ゆ柨锕弻娑滅疀閹垮啫鍓跺銈冨劜閹瑰洤顕i妸鈺佺畾鐟滃绂嶉敐澶嬬厱闁挎繂鍟俊濂告偨椤栥倖瀚�
 [闂備焦妞垮鈧紒鎻掝煼閹矂鎮欓鍌ゆ祫闁荤姵浜介崝宥夊春閸岀偞鍋eù锝囨嚀缁€鍐┿亜閹垮嫭瀚�]936闂備胶绮敮鎺楁晝閵堝牄浜归柟缁㈠枟閸嬨劌霉閿濆懎鏆熼柣鏂挎嚇閺屾稑螣閻撳孩鐏侀梺璇″枛閿曨亜鐣烽崼鏇熸櫢闁跨噦鎷�
 [闂備礁鎲¢〃鍡椕哄⿰鍕珷闁哄稁鍘肩€氬螖閿曚焦纭堕柕鍫亰閺岋繝宕掗敂钘夘伓]闂佺儵鍓濈敮鎺楀箠鎼淬劍鏅柟閭﹀厴閺嬫牠鏌曡箛銉х?闁靛牊鎸抽幃褰掓偖鐎涙ê顏�+婵犵數鍋為幐鎾疾濞戞埃鍋撻惂鍛婂+闂備胶顢婄紙浼村磿閹绢噮鏁嗛柣鏂垮悑閸庡秹鏌涢弴銊ヤ簻缂佲偓閿燂拷
 [闂傚倷绶¢崑鍛潩閵娾晛鏋侀柕鍫濐槹閸嬨劑姊婚崼鐔恒€掗柟钘夌Ч閹鎷呴悷鎵槰濡炪倖鎸搁幉鈥翅缚椤忓牜鏁嶆繛鍡樺姦閸嬶拷]S7-200PLC闂備焦鐪归崝宀€鈧凹浜為幐鎺楀閵堝棗鍓抽梺缁樻⒐濡叉帡骞忛鈷氬綊鎮崨顔碱伓 S7_2
 [闂佸搫顦遍崕鎰板垂椤栨埃鏋庨柕蹇嬪灮鐏忕敻鏌ㄩ悤鍌涘]S7-200闂佸湱鍘ч悺銊╁箰婵犳艾鍑犻柛鎰ㄦ櫇椤╃兘鎮规担鍛婅础缂佲偓閸曨垱鐓曢煫鍥风悼閸樻粎绱掗幉瀣,STEP7
 [闂佸搫顦遍崕鎰板垂椤栨埃鏋庨柕蹇嬪灮鐏忕敻鏌ㄩ悤鍌涘]ModbusPoll闂備礁鎲$划宀勵敆閻栧獛busSalve闂備胶枪妤犲繘骞忛敓锟�
 [闂佸搫顦遍崕鎰板垂椤栨埃鏋庨柕蹇嬪灮鐏忕敻鏌ㄩ悤鍌涘]STEP7婵犵妲呴崹顏堝礈濠靛牃鍋撳顓犳噰闁哄苯鐭佺粻娑㈠棘鐠恒劍鈻屽┑鐐差嚟婵即宕愰弴鐘哄С闁跨噦鎷� Smart_
 [闂佸搫顦遍崕鎰板垂椤栨埃鏋庨柕蹇嬪灮鐏忕敻鏌ㄩ悤鍌涘]Modbus闂佽崵濮撮鍛村疮閹惰姤鍎婃い鏍ㄧ矊閸ㄦ繈鏌涢幘妤€鍊荤憴锟� v1.024 缂傚倸鍊风欢銈夊箯閿燂拷
 [闂佸搫顦遍崕鎰板垂椤栨埃鏋庨柕蹇嬪灮鐏忕敻鏌ㄩ悤鍌涘]Modscan32闂備礁鎲$划宀勵敆閻栧獛sim32,modb
 [闂備焦妞垮鈧紒鎻掝煼閹矂鎮欓鍌ゆ祫闁荤姵浜介崝宥夊春閸岀偞鍋eù锝囨嚀缁€鍐┿亜閹垮嫭瀚�]89c51闂備胶枪缁绘劙藝闁秵鍋熸繛鎴欏灩濡﹢姊洪锝囶灱闂傚棗缍婇弻锝夘敂閸℃鐝㈢紓浣介哺閻涱槝otues
 [闂備焦妞垮鈧紒鎻掝煼閹矂鎮欓鍌ゆ祫闁荤姵浜介崝宥夊春閸岀偞鍋eù锝囨嚀缁€鍐┿亜閹垮嫭瀚�]濠电偞鍨堕幐绋棵洪妶澶婄濡わ絽鍟崒銊╂煕閻愭潙袨otues濠电偛顕慨鎯р枖閺囩儑鑰块柨娑樺閻瑩鎮楅敐搴濈敖缁炬澘绉电换婵婎槼闁告梹顨婇幃銉╂晸閿燂拷
 [闂備焦妞垮鈧紒鎻掝煼閹矂鎮欓鍌ゆ祫闁荤姵浜介崝宥夊春閸岀偞鍋eù锝囨嚀缁€鍐┿亜閹垮嫭瀚�]51闂備礁鎲¢〃鍡椕哄⿰鍕珷闁哄稁鍘肩€氬鏌涘┑鍡楊仼闁秆冿功缁辨帞鈧綀鍩栫€氾拷 protues濠电偛顕慨鎯р枖閺囩儑鑰块柨鐕傛嫹
鏈€鏂版枃绔�
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 在线帮助 - 文章列表
返回顶部
刷新页面
下到页底
晶体管查询