单片机串行通信RS-232.pdfVIP

  • 5
  • 0
  • 约1.49千字
  • 约 4页
  • 2017-06-02 发布于河南
  • 举报
单片机串行通信RS-232

RS-232 RS-232 单片机串行通信RRSS--223322 下面说的程序都是经过实际验证的正确的,照着做就行。 在使用串行接口之前我们先复习一下什么叫串行通信与并行通信的区别 串行通信:是数据的各位依次逐位发送或接收 并行通信:是数据的各位同时发送或同时接收 51单片机串行口:P3.0RXD与P3.1TXD 有几种工作方式,不同的工作方式波特率等会有 所不同,我们要根据实际情况来选择不同的工作方式,那么我们是如何选择工作方式呢? 通过设定串行接口控制寄存器SCON的值,就可以设定工作方式了。SCON有8个位,我们 来看各个位起什么作用。 SM0 SM1 SM2 REN TB8 RB8 TI RI (SM0是最高位,RI是最低位) SM0 SM1值组合对应4种工作方式: 0 0 方式0 0 1 方式1 0 1 方式2 1 1 方式3 各个工作方式都有不同特点,可参考其实资料,基础的东西我就不多说了。 TI 为发送中断标志位,当有数据发送时TI保持为0 发送完成之后TI自动变为1 在发送数据之前先通过TI判断当前是否有数据发送,检测TI=0说明有数据正在发送, 要等待TI=1时(此时信道空闲),才可以发送数据。 RI 为接收中断标志位 接收数据时RI=0 接收完一帧后RI自动变为1 ,要重新接收必须用软件把RI清0 下面我们用方式1来仿真串行通信: 根据方式1的波特率计算方法使波特率=2400 所以使用定时器1工作在方式2 初值为F3 程序: #include const unsigned char mydata[]=my name is xxx!\n\r; unsigned char i; void Delay(unsigned char t) { while(t--); } void main(void) { SCON=0X40; //设串行工作在方式1 TMOD=0X20; //定时器工作在方式2 TH1=0XF3; //初值 对应波特率为2400,在仿真时晶振应设为12M,同时接收设备和串 口的波特率也没为2400 TL1=0XF3; TR1=1; //开定时 while(1) //一直执行 { for(i=0;isizeof(mydata);i++) { SBUF=mydata[i]; //发送 while(!TI); //等待一帧发送完毕 TI=0; //清除标志位 Delay(40000); //DELAY } } } 用proteus下图所示: 51单片机日振为12MHz 接收器和串口都设波特率为2400 其他选项按默认。 串口COMPIM设为COM3 仿真效果如下: proteus仿真可以之后 我们用SerialNull虑拟一个串口COM3连到COM4如下图所示 然后再用串口调试助手,读COM4数据看是否能接收到:my name is xxx 注意波特率为2400 要用到: proteus keil SerialNull 串口调试助手 共四个软件

文档评论(0)

1亿VIP精品文档

相关文档