1653|0

3836

帖子

19

TA的资源

纯净的硅(中级)

楼主
 

单片机的串口通讯原理是什么? [复制链接]

SBUF是数据缓冲寄存器,发送和接收用的是一个地址,但是不用担心冲突,读只能从接收缓冲区,写只能在发送缓冲区里。
下图是串口的结构图

  寄存器SCON(SM0 SM1 SM2 REN TB8 RB8  RI)
  SM0和SM1: 工作方式选择(0-3),方式1和方式3使用T1产生波特率,方式0和方式2是固定速率。
  SM2 :在方式2和方式3的多级通信控制位
  REN:允许串行接收控制位,0禁止接收
  TB8:对于方式2和方式3,是发送的第9位
  RB8:对于方式2和方式3,是接收的第9位;对于方式1,是接收到的停止位
  :发送中断标志,发送完一帧后置位,必须由软件清零
  RI:发送中断标志,接收完一帧后置位,必须由软件清零
  寄存器PCON(最高位SMOD)
  SMOD=1时,波特率加倍
  程序:PC与单片机通信,PC发送字符,单片机接收后返回给PC
  PC端程序,VB编写,使用MSCOMM控件
  Private Sub Command1_Click()
  MSComm1.Output = Text1.Text ‘发送数据
  End Sub
  Private Sub Form_Load()
  MSComm1.CommPort = 4 ’设置串口的端口号
  MSComm1.Setngs = ‘9600,n,8,1’ ‘设置串口的波特率等参数
  MSComm1.RThreshold = 1 ’设置最小接收的字节数
  MSComm1.PortOpen = True ‘打开串口
  End Sub
  Private Sub MSComm1_OnComm()
  Select Case MSComm1.CommEvent
  Case comEvReceive
  Text2.Text = Text2.Text & MSComm1.Input ’接收数据
  End Select
  End Sub
  单片机程序:
  #include
  void Uarnit();
  void UartSendchar(unsigned char ch);
  void main(void)
  {
  UarTInit();
  while(1);
  }
  void UartInit()
  {
  SCON = 0x50; // SCON: 模式1
  TMOD = 0x20; // TMOD: 定时器1 模式2
  PCON = 0x00; // SMOD=0;
  TH1 = 0xFD; // Baud:9600 波特率=2SMOD×fosc/(32×12×(256-TH1))
  TL1 = 0xFD;
  IE = 0x90;
  TR1 = 1;
  EA = 1;
  }
  void UartSendChar(unsigned char ch)
  {
  SBUF = ch;
  while(TI==0);
  TI=0;
  }
  void UartRec() interrupt 4
  {
  unsigned char ch;
  ch = SBUF;
  if(RI)
  {
  RI = 0;
  UartSendChar(ch);
  }

 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表