📄 pc机与单片机的通讯.htm
字号:
<TR>
<TD align=middle height=16
width="21%">Bit5:3=011</TD>
<TD align=middle height=16 width="54%">偶校验</TD></TR>
<TR>
<TD align=middle height=16
width="21%">Bit5:3=101</TD>
<TD align=middle height=16
width="54%">奇偶保持为1</TD></TR>
<TR>
<TD align=middle height=16
width="21%">Bit5:3=111</TD>
<TD align=middle height=16
width="54%">奇偶保持为0</TD></TR>
<TR>
<TD align=middle height=16 width="21%">Bit2=0</TD>
<TD align=middle height=16 width="54%">1位停止位</TD></TR>
<TR>
<TD align=middle height=16 width="21%">Bit2=1</TD>
<TD align=middle height=16
width="54%">2位停止位(数据位6-8位),1.5位停止位(5位数据位)</TD></TR>
<TR>
<TD align=middle height=16
width="21%">Bit1:0=00</TD>
<TD align=middle height=16 width="54%">5位数据位</TD></TR>
<TR>
<TD align=middle height=16
width="21%">Bit1:0=01</TD>
<TD align=middle height=16 width="54%">6位数据位</TD></TR>
<TR>
<TD align=middle height=16
width="21%">Bit1:0=10</TD>
<TD align=middle height=16 width="54%">7位数据位</TD></TR>
<TR>
<TD align=middle height=16
width="21%">Bit1:0=11</TD>
<TD align=middle height=16
width="54%">8位数据位</TD></TR></TBODY></TABLE></CENTER></DIV>
<P align=left>
LCR用来设定通讯所需的一些基本参数。Bit7为1指定波特率因子寄存器有效,为0则指定发送/接收及IER有效。Bit6置1会将发送端置为0,这将会使接收端产生一个“间断”。Bit3-5用来设定是否使用奇偶校验以及奇偶校验的类型,Bit3=1时使用校验,Bit4为0则为奇校验,1为偶校验,而Bit5则强制校验为1或0,并由Bit4决定具体为0或1。Bit2用来设定停止位的长度,0表示1位停止位,为1则根据数据长度的不同使用1.5-2位停止位。Bit0:1用来设定数据长度。</P>
<P align=left> MODEM控制寄存器(MCR):</P>
<DIV align=center>
<CENTER>
<TABLE border=1 borderColorLight=#0000ff cellPadding=0
cellSpacing=0 height=171 width="81%">
<TBODY>
<TR>
<TD align=middle height=25 width="21%"><B>位</B></TD>
<TD align=middle height=25
width="54%"><B>注 释</B></TD></TR>
<TR>
<TD align=middle height=16 width="18%">Bit7</TD>
<TD align=middle height=16 width="57%">未使用</TD></TR>
<TR>
<TD align=middle height=16 width="18%">Bit6</TD>
<TD align=middle height=16 width="57%">未使用</TD></TR>
<TR>
<TD align=middle height=16 width="18%">Bit5</TD>
<TD align=middle height=16
width="57%">自动流量控制(仅16750)</TD></TR>
<TR>
<TD align=middle height=16 width="18%">Bit4</TD>
<TD align=middle height=16 width="57%">环路测试</TD></TR>
<TR>
<TD align=middle height=16 width="18%">Bit3</TD>
<TD align=middle height=16 width="57%">辅助输出2</TD></TR>
<TR>
<TD align=middle height=16 width="18%">Bit2</TD>
<TD align=middle height=16 width="57%">辅助输出1</TD></TR>
<TR>
<TD align=middle height=16 width="18%">Bit1</TD>
<TD align=middle height=16 width="57%">设置RTS</TD></TR>
<TR>
<TD align=middle height=16 width="18%">Bit0</TD>
<TD align=middle height=16
width="57%">设置DSR</TD></TR></TBODY></TABLE></CENTER></DIV>
<P align=left>
MCR寄存器可读可写,Bit4=1进入环路测试模式。Bit3-0用来控制对应的管脚。</P>
<P align=left> 线路状态寄存器(LSR):</P>
<DIV align=center>
<CENTER>
<TABLE border=1 borderColorLight=#0000ff cellPadding=0
cellSpacing=0 height=171 width="81%">
<TBODY>
<TR>
<TD align=middle height=25 width="21%"><B>位</B></TD>
<TD align=middle height=25
width="54%"><B>注 释</B></TD></TR>
<TR>
<TD align=middle height=16 width="18%">Bit7</TD>
<TD align=middle height=16
width="57%">FIFO中接收数据错误</TD></TR>
<TR>
<TD align=middle height=16 width="18%">Bit6</TD>
<TD align=middle height=16
width="57%">发送移位寄存器空</TD></TR>
<TR>
<TD align=middle height=16 width="18%">Bit5</TD>
<TD align=middle height=16
width="57%">发送保持寄存器空</TD></TR>
<TR>
<TD align=middle height=16 width="18%">Bit4</TD>
<TD align=middle height=16 width="57%">间断</TD></TR>
<TR>
<TD align=middle height=16 width="18%">Bit3</TD>
<TD align=middle height=16 width="57%">帧格式错</TD></TR>
<TR>
<TD align=middle height=16 width="18%">Bit2</TD>
<TD align=middle height=16 width="57%">奇偶错</TD></TR>
<TR>
<TD align=middle height=16 width="18%">Bit1</TD>
<TD align=middle height=16 width="57%">超越错</TD></TR>
<TR>
<TD align=middle height=16 width="18%">Bit0</TD>
<TD align=middle height=16
width="57%">接收数据就绪</TD></TR></TBODY></TABLE></CENTER></DIV>
<P align=left>
LSR为只读寄存器,当发生错误时Bit7为1,Bit6为1时标示发送保持及发送移位寄存器均空,Bit5为1时标示仅发送保持寄存器空,此时,可以由软件发送下一数据。当线路状态为0时Bit4置位为1,帧格式错时Bit3置位为1,奇偶错和超越错分别将Bit2及Bit1置位为1。Bit0置位为1表示接收数据就绪。</P>
<P> MODEM状态寄存器(MSR):</P>
<DIV align=center>
<CENTER>
<TABLE border=1 borderColorLight=#0000ff cellPadding=0
cellSpacing=0 height=171 width="81%">
<TBODY>
<TR>
<TD align=middle height=25 width="21%"><B>位</B></TD>
<TD align=middle height=25
width="54%"><B>注 释</B></TD></TR>
<TR>
<TD align=middle height=16 width="18%">Bit7</TD>
<TD align=middle height=16 width="57%">载波检测</TD></TR>
<TR>
<TD align=middle height=16 width="18%">Bit6</TD>
<TD align=middle height=16 width="57%">响铃指示</TD></TR>
<TR>
<TD align=middle height=16 width="18%">Bit5</TD>
<TD align=middle height=16
width="57%">DSR准备就绪</TD></TR>
<TR>
<TD align=middle height=16 width="18%">Bit4</TD>
<TD align=middle height=16 width="57%">CTS有效</TD></TR>
<TR>
<TD align=middle height=16 width="18%">Bit3</TD>
<TD align=middle height=16
width="57%">DCD已改变</TD></TR>
<TR>
<TD align=middle height=16 width="18%">Bit2</TD>
<TD align=middle height=16 width="57%">RI已改变</TD></TR>
<TR>
<TD align=middle height=16 width="18%">Bit1</TD>
<TD align=middle height=16
width="57%">DSR已改变</TD></TR>
<TR>
<TD align=middle height=16 width="18%">Bit0</TD>
<TD align=middle height=16
width="57%">CTS已改变</TD></TR></TBODY></TABLE></CENTER></DIV>
<P align=left>
MSR寄存器的高4位分别对应MODEM的状态线,低4位表示MODEM的状态线是否发生了变化。</P>
<P align=left>
以上我们详细介绍了PC机的串行通讯硬件环境,以下将分别给出使用查询及中断驱动的方法编写的串行口驱动程序。这些程序仅使用RXD/TXD,无需硬件握手信号。</P>
<P align=left>(2)<A
name=polling></A>使用查询方法的串行通讯程序设计: <A
href="http://www.ewbbs.com/Admin_ArticleShow.asp?ArticleID=128#0">返回页首</A></P>
<P align=left><FONT
color=#ff0000><I>polling.c
</I></FONT></P>
<P align=left><FONT color=#0000ff>#include
<DOS.H><BR>#include <STDIO.H><BR>#include
<CONIO.H><BR>#define PortBase 0x2F8<BR><BR>void
com_putch(unsigned char);<BR>int
com_chkch(void);<BR><BR>main()<BR>{<BR> int
c;<BR> unsigned char
ch;<BR><BR> outportb(PortBase + 1 , 0); /* Turn off
interrupts - Port1 */<BR><BR> /* Set COM1:
9600,8,N,1*/<BR> outportb(PortBase + 3 ,
0x80);<BR> outportb(PortBase + 0 ,
0x0C);<BR> outportb(PortBase + 1 ,
0x00);<BR> outportb(PortBase + 3 ,
0x03);<BR><BR> clrscr();<BR><BR> while(1)
{<BR></FONT></P>
<P align=left><FONT color=#0000ff> c =
com_chkch();<BR> if(c!=-1) {<BR>
c &= 0xff; putch(c);<BR> if(c=='\n')
putch('\r');<BR> }<BR> </FONT></P>
<P align=left><FONT color=#0000ff> if(kbhit())
{<BR> ch = getch(); com_putch(ch);<BR>
}<BR> }<BR><BR>}<BR><BR><BR>void com_putch(unsigned
char ch) {<BR> unsigned char
status;<BR><BR> while(1) {<BR> status =
inportb(PortBase+5);<BR> if(status&0x01)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -