首先RS232接口电路一般是用在单片机串口与电脑的TTL电平转换上。
RS-232接口有DB25接口和DB9接口两种,现在普通使用的基本上都是DB9接口,DB25接口基本上不再使用。DB9接口定义如下(1.载波检测,2.接收数据,3.发送数据,4.数据终端准备就绪,5.信号地,6.调制解调器就绪,7.请求发送,8.允许发送,9.振铃提示),RS-232串口相互连接分为通过Modem连接和无Modem连接,由于以太网,RS-485总线,CAN总线等总线的普及,通过Modem连接做较长距离通信已经基本上不再使用。无Modem连接即直接连接则分为握手连接和无握手连接,无握手连接直接使用2,3,5三个针脚就可以使用,而握手连接则是必须使用请求发送,允许发送,准备就绪等信号,握手连接又称全信号连接。由于RS-232使用单端非差分电路,多条线路共用一个接地线,长距离传输时,不同节点的接地线电平差异可能会达到几伏,有可能导致信号的误读,从而导致RS-232传输距离不能超过15米,传输速率不能超过110Kbps

RS232接口的电气特性:
RS-232C 对电器特性、逻辑电平和各种信号线功能都作了规定。
在TxD和RxD上:
逻辑1(MARK)=-3V~-15V
逻辑0(SPACE)=+3~+15V
在RTS、CTS、DSR、DTR和DCD等控制线上:
信号有效(接通,ON状态,正电压)=+3V~+15V
信号无效(断开,OFF状态,负电压)=-3V~-15V
以上规定说明了RS-232C标准对逻辑电平的定义。对于数据(信息码):逻辑“1”(传号)的电平低于-3V,逻辑“0”(空号)的电平高于+3V;对于控制信号;接通状态(ON)即信号有效的电平高于+3V,断开状态(OFF)即信号无效的电平低于-3V,也就是当传输电平的绝对值大于3V时,电路可以有效地检查出来,介于-3~+3V之间的电压无意义,低于-15V或高于+15V的电压也认为无意义,因此,实际工作时,应保证电平在±(3~15)V之间。RS-232C 与TTL转换:EIA RS-232C 是用正负电压来表示逻辑状态,与TTL以高低电平表示逻辑状态的规定不同。因此,为了能够同计算机接口或终端的TTL器件连接,必须在EIA RS-232C 与TTL电路之间进行电平和逻辑关系的变换。实现这种变换的方法可用分立元件,也可用集成电路芯片。目前较为广泛地使用集成电路转换器件,如MC1488、SN75150芯片可完成TTL电平到EIA电平的转换,而MC1489、SN75154可实现EIA电平到TTL电平的转换。MAX232芯片可完成TTL←→EIA双向电平转换。
我做的滤波器
#include<reg51.h> #include"math.h" #define?N?25 #define?PI?3.1415926 sbit?da_wr1=P3^6; sbit?da_cs=P2^7;void?InputWave();
float?FIR(); void?da0832(); float?fHn[N]={0.0,0.0,0.001,-0.002,0.01,-0.09,-0.018,0.049,-0.02,0.11,0.28,0.64,0.28,
-0.11,-0.02,0.049,-0.018,-0.009,0.01,
-0.002,-0.002,0.001,0.0,0.0?
};float?fXn[N]={0.0};
float?fInput,fOutput;
float?fSignal1,fSignal2;
float?fStepSignal1,fStepSignal2;
float?f2PI;
int?i;
float?FIN[256],FOUT[256];
int?nIn?,nOut;
main(void)
{
?nIn=0;nOut=0;
?f2PI=2*PI;
?fSignal1=0.0;
?fSignal2=PI*0.1;
?fStepSignal1=2*PI/30;

?fStepSignal2=2*PI*1.4;
?while(1)
?{
?//?fInput=InputWave();
?InputWave();
?//?FIN[nIn]=fInput;
?//?nIn++;nIn%=256;
?fOutput=FIR();
?FOUT[nOut]=fOutput;
?
?nOut++;
?if(nOut>=256)
?{nOut=0;da0832();
}
?}
}
void?InputWave() { int?i; for(i=0;i<=15000;i++)?{
?fXn[i]=(sin(PI*2*i/N*15000)+1)*5;
?}
} float?FIR() { float?fSum; fSum=0; for(i=0;i<N;i++)?fSum+=(fXn[i]*fHn[i]); return(fSum); }void?da0832()
{
unsigned?char?i;
da_cs=0;//da转换输出使能标志置位
da_wr1=0;//输入寄存器的官写选通信号,表示单片机要传送数据了
for (i=0;i<255;i++)
P0=FOUT[i];

da_wr1=1;//数据传送完成,使能锁存
da_cs=1;
}

