1. <em id="3qmea"><ol id="3qmea"></ol></em>
    2. <em id="3qmea"></em>
      (玩电子) 电子技术学习与研究
      当前位置单片机教程网 >> 基础教程 >> 浏览文章

      22课:单片机串行口通信程序设计

      作者:佚名   来源:本站原创   点击数:x  更新时间2007年08月14日   字体

      1串行口方式0应用编程 8051单片机串行口方式0为移位寄存器方式外接一个串入并出的移位寄存器就能扩展一个并行口


      <单片机串行口通信程序设计硬件连接图>

         例用8051单片机串行口外接CD4094扩展8位并行输出口如图所示8位并行口的各位都接一个发光二极管要求发光管呈流水灯状态 串行口方式0的数据传送可采用中断方式也可采用查询方式无论哪种方式都要借助于TI或RI标志串行发送时能靠TI置位发完一帧数据后引起中断申请在中断服务程序中发送下一帧数据或者通过查询TI的状态只要TI为0就继续查询TI为1就结束查询发送下一帧数据在串行接收时则由RI引起中断或对RI查询来确定何时接收下一帧数据无论采用什么方式在开始通信之前都要先对控制寄存器SCON进行初始化在方式0中将将00H送SCON就能了

      -----------------单片机串行口通信程序设计列子--------------------------

      ORG 2000H

      START: MOV SCON,#00H ;置串行口工作方式0

      MOV A,#80H ;最高位灯先亮

      CLR P1.0 ;关闭并行输出避象传输过程中各LED的"暗红"现象

      OUT0: MOV SBUF,A ;开始串行输出

      OUT1: JNB TI,OUT1 ;输出完否

      CLR TI ;完了清TI标志以备下次发送

      SETB P1.0 ;打开并行口输出

      ACALL DELAY ;延时一段时间

      RR A ;循环右移

      CLR P1.0 ;关闭并行输出

      JMP OUT0 ;循环

      说明DELAY延时子程序能?#20204;?#38754;我们讲P1口流水灯时用的延时子程序这里就不给出了

      二串行口异步通信

      org 0000H

      AJMP START

      ORG 30H

      START:

      mov SP,#5fh ;

      mov TMOD,#20h ;T1: 工作模式2

      mov PCON,#80h ;SMOD=1

      mov TH1,#0FDH ;初始化波特率参见表

      mov SCON,#50h ;Standard UART settings

      MOV R0,#0AAH ;准备送出的数

      SETB REN ;允许接收

      SETB TR1 ;T1开始工作

      WAIT:

      MOV A,R0

      CPL A

      MOV R0,A

      MOV SBUF,A

      LCALL DELAY

      JBC TI,WAIT1 ;如果TI等于1则清TI并转WAIT1

      AJMP WAIT

      WAIT1: JBC RI,READ ;如果RI等于1则清RI并转READ

      AJMP WAIT1

      READ:

      MOV A,SBUF ;将取得的数送P1口

      MOV P1,A

      LJMP WAIT

      DELAY: ;延时子程序

      MOV R7,#0ffH

      DJNZ R7,$

      RET

      END

          将程序编译通过写入芯片插入实验板用通读电缆将实验板与主机的串行口相连就能实验了上面的程序功能很简单就是每隔一段时间向主机轮流送数55H和AAH并把主机送去的数送到P1口能在PC端用串行口精灵来做实验串行口精灵在我主页上有下载运行串行口精灵后按主界面?#31995;ġ?#35774;置参数按钮进入设置参数对话框按下面的参数进行设置注意我的机器上用的是串行口2如果你不是串行口2请自行更改串行口的设置

         设置完后按确定返回主界面注意右边有一个下拉列表应当选中按16进制然后?#30784;?#24320;始发送开始接收?#26412;?#33021;了?#21019;?#35774;置实验板上应当有两只灯亮6只灯灭大家能自行更改设置参数中的发送字符如5500FF等等观察灯的亮灭并分析原因也能在主界面上更改下拉列表中的按16进制为按10进制或按ASCII字符来观察现象并仔细分析这对于大家理解16进制10进制ASCII字符也是很有?#20040;?#30340;程序本身很简单又有注释这里就不详加说明了

      三上述程序的中?#20064;?#26412;

      org 0000H

      AJMP START

      org 0023h

      AJMP SERIAL ;

      ORG 30H

      START:

      mov SP,#5fh ;

      mov TMOD,#20h ;T1: 工作模式2

      mov PCON,#80h ;SMOD=1

      mov TH1,#0FDH ;初始化波特率参见表

      mov SCON,#50h ;Standard UART settings

      MOV R0,#0AAH ;准备送出的数

      SETB REN ;允许接收

      SETB TR1 ;T1开始工作

      SETB EA ;开总中断

      SETB ES ;开串行口中断

      SJMP $

      SERIAL:

      MOV A,SBUF

      MOV P1,A

      CLR RI

      RETI

      END

      本程序没?#34892;?#20837;发送程序大家能自行添加

      发表评论告诉好友收藏此文关闭窗口

      文章评论

      ຣ11ѡ5app

        
        
        1. <em id="3qmea"><ol id="3qmea"></ol></em>
        2. <em id="3qmea"></em>

            
            
            1. <em id="3qmea"><ol id="3qmea"></ol></em>
            2. <em id="3qmea"></em>