单片机双机串口通信程序设计

发布者:码农创想家最新更新时间:2012-12-05 来源: 51hei 关键字:单片机  双机  串口通信 手机看文章 扫描二维码
随时随地手机看文章
    利用方式1实现单片机双机通信,主频为6M,波特率为2400bps,电路见图5-10。当两个单片机距离较近时,甲、乙两机的发送端与接收端分别直接相联,两机共地。执行程序,甲机将亮灯信号发送给乙机,若通信正常,乙机接收到信号后点亮20个发光二极管。乙机采用查询与中断两种工作方式。当然20个LED乙机可单独控制,也可接受甲机的控制,并执行甲机指令,还需要进一步完善程序.
甲机发送程序:
org 0000h          
sta:  mov tmod,#20h      ;设置波特率 
        mov tl1,#0FAh 
        mov th1,#0FAh       
        setb tr1
mov scon,#40h      ;置工作方式1
clr ti
mov a,#00h
mov sbuf,a         ;发送亮灯信号
wait: jbc ti,cont          ;发送成功清标志
  ajmp wait           ;等待发送完毕
cont: sjmp sta            ;重复发送
       end

乙机查询工作方式接收:

org 0000h          
       mov tmod,#20h     ;设置通信波特率
       mov tl1,#0FAh
       mov th1,#0FAh      
       setb tr1
mov scon,#40h
clr ri
setb ren           ;允许接收
wait: jbc ri,read          ;接收成功清标志
ajmp wait           ;接收未完等待
read: mov a ,sbuf
mov p1,a            ;接收亮灯信号送P1口
sjmp $
       end

乙机中断工作方式接收
org 0000h          
ajmp main
org 0023h
ajmp zd           ;转串口中断程序
START:   MOV TMOD,#20h      
                mov tl1,#0FAh
                mov th1,#0FAh      
                setb tr1
   mov scon,#50h
   clr ri
   mov ie,#90h        ;开中断

   MAIN:sjmp $     主程序      
zd:    clr ri               ;清接收标志
;==============中断程序还要再完善==============
  mov a ,sbuf         ;读接收信号
mov p1,a
MOV R1,A           ;将收到的信号送缓存  
reti              ;中断返回
end 
           点击浏览下一页
<单片机双机串口通讯原理图>

采用方式2 通信,数据帧格式是11位的,TB8为奇偶校验位,接收过程要求判断RB8,若出错置F0标志为1,正确则置F0标志为0,然后返回。发送波特率375kbps,晶振为12MHz,所以SMOD=l。由于传送数据的波特率与定时器无关,所以程序中无需对定时器编程. 以下程序出自http://www.51hei.com一位单片机大侠之手,借来用用,如果什么什么错误或者需要改进的地方请大家指出,不过我这里基本测试通过了。
send:
          MOV    SCON,#80H    ;设置串行口为方式2 
          MOV    PCON,#80H    ;SMOD=l 
          MOV     R0,#50H      ;设数据块指针 
          MOV     R7,#20       ;设数据块长度
  STA:  MOV    A,@R0        ;取数据给A 
                MOV     C,P 
                MOV     TB8,C       ;奇偶位P送给TB8,              
                MOV     SBUF,A     ;启动发送
;====================================================
WAIT: JBC      TI,CONT     ;若发完一帧数据,清标志后发下一帧数据
                 AJMP     WAIT         ;未完等待
;=======================================================
CONT:INC      R0           ;修改数据指针 
                DJNZ     R7,STA      ;循环发送至结束
               RET
;================      
;乙机接收程序如下:
;    在进行双机通信时,两机应采用相同的工作方式和波特率。          
;=============================================
            MOV  SCON,#90H          ;设置串行口为方式2,REN为1,允许接收
            MOV  PCON,#80H          ;SMOD=1
            MOV  R0,#50H                ;设置数据块首址
            MOV  R7,#20                   ;置数据块长度
;=========================================================
     WAIT:JBC    RI,READ        ;接收完一帧数据则RI清零并读入数据
            AJMP   WAIT                      ;未完等待
;==========================================
READ:MOV   A,SBUF         ;读入数据
        JNB     PSW.0,PZ          ;收到数为偶数则转
        JNB     RB8,ERR           ;收到数为奇数,发端为偶数则通信出错
        SJMP    RIGHT                  ;相符则正确
PZ:JB     RB8,ERR         ;收到数为偶数,发端为奇数则出错
;========================================
RlGHT:MOV    @R0,A         ;通信正确,存放数据
        INC     R0                            ;更改地址指针
        DJNZ    R7,WAIT            ;数据块接收完否,未完继续
        CLR     PSW.5                    ;通信正确,置F0为0
        RET                     ;返回
ERROR:SETB    PSW.5          ;通信出错,置F0为l
        RET                     ;返回
关键字:单片机  双机  串口通信 引用地址:单片机双机串口通信程序设计

上一篇:听技术达人细说51单片机系列
下一篇:浅谈51单片机的RETI指令

推荐阅读最新更新时间:2024-03-16 13:14

STC单片机在KEIL编译器中的头文件
  STC单片机在 keil 编译器里找不到头文件如何处理。首先在网络上找到一个关于STC单片机的升级包。安装上去以后,就可以看到有STC型号的单片机可以选择了。但是此时,它的头文件却无法调用。也没有在keil的安装文件下找到这个升级包应该附带的STC单片机头文件。   解决办法就是打开一个AT89S52的头文件,在此头文件的基础上假如STC独有的一些SFR声明,然后把文件名改为STC89S52.H,然后放入工程所在文件夹,就可以进行正常调用了。   STC的特殊SFR声明如下:   /* After is STC additional SFR */   /* sfr AUXR = 0x8e; */   /* sfr
[单片机]
用C语言编程使51单片机的数码管左移循环显示
高手支招:请问用C语言编程使51单片机的数码管左移循环显示0-7的程序怎么编呀 由于我不懂得用中断和定时,请程序里不要用那两个函数,谢谢(*^__^*) 嘻嘻…… 悬赏分:0 - 解决时间:2010-7-31 18:09 问题补充:这个是我自己编的,可是运行起来就是不移动,麻烦你们帮修改一下,我没有编左移循环部分的程序。 //========================================================== 最佳答案: //--------------------------------------------------- #include REG51.H #define uint unsig
[单片机]
用C语言编程使51<font color='red'>单片机</font>的数码管左移循环显示
SPCE061A型单片机在土木工程测温仪中的应用与设计
1 引言   在土木工程中,许多大型的桥梁和大坝都是采用现场浇注的钢筋混凝土结构。在此类工程中混凝土浇注以后,由于水泥的水化热作用,混凝土内温度将逐渐上升,混凝土厚度的差异导致不同的温升,形成温度梯度并产生温度应力。与外力作用于结构时引起的应力不同,混凝土的温度应力是由变形引起的;混凝土的导热性能较差,浇注初期其强度和弹性模量都较低,温度变化引起的变形不明显。随着龄期的增长,混凝土的强度和弹性模量提高,对混凝土变形的约束越来越大,以致产生很大的拉应力,当混凝土的抗拉强度不足以抵抗这种拉应力时,开始出现温度裂纹。这将严重影响土木工程的质量,所以很有必要对混凝土浇注后的一段时期内的温度参数进行监测,可为其合理的浇注和养护提供可靠的数据
[单片机]
SPCE061A型<font color='red'>单片机</font>在土木工程测温仪中的应用与设计
单片机能运行操作系统吗
先直接上答案:可以! 但是操作系统 不是刚需 ,上操作系统比较占用单片机的资源,比如占用比较多的FLASH和RAM,间接增加了硬件成本,哪怕成本增加1毛钱,对于上量的产品,分分钟是一个工程师的工资。 我做了单片机开发10几年,大多数产品其实还是裸机编程,用到操作系统的比较少。 当然,这个跟产品功能有关,一般产品功能复杂、实时性要求苛刻的就会上操作系统。 目前用的比较多的就是 实时操作系统 ,比如主流有uC/OS-II、FreeRTOS、rt-thread。 下面,简单给大家说下3个系统各自优缺点,如有不对,请指正! 一、uC/OS-II uC/OS-II 是 Micrium 公司开发的商业实时操作系统,它的内核设计非常稳定和
[单片机]
单片机外围电路设计攻略(2)
单片机外围电路设计之二:电容 电容,作为电子电路的又一基本元器件,大家也是熟悉不过的了。下面我们谈谈电容的一些基本应用及注意事项。但是,由于电容的应用非常广泛,未必能面面俱到,如果有网友觉得没有谈到的地方,希望公共完善。 1概念 电容(Capacitance)亦称作“电容量”,是指在给定电位差下的电荷储藏量,记为C,国际单位是法拉(F)。一般来说,电荷在电场中会受力而移动,当导体之间有了介质,则阻碍了电荷移动而使得电荷累积在导体上,造成电荷的累积储存,储存的电荷量则称为电容。电容是电子设备中大量使用的电子元件之一,广泛应用于隔直、耦合、旁路、滤波、调谐回路、能量转换、控制电路等方面。 电容(或称电容量)是表现电容器容纳
[单片机]
<font color='red'>单片机</font>外围电路设计攻略(2)
基于51单片机的自动门设计
一.硬件方案 本设计是用STC89C52单片机作为控制器,步进电机、热释电型红外传感器、led指示灯、蜂鸣器相结合的系统。热释电红外传感器给单片机传输检测信号,通过单片机控制电机驱动,从而控制电机转动,实现门的自动开关。 主要由51单片机+5线4相步进机+人体感应模块+发光二极管+按键设计而成;如图: 二.设计功能 (1)具有自动开门和手动开门两种模式的功能。 (2)采用两个红外人体感应传感器,一个是安装在进门口,一个安装在出门口,自动模式下:任意一个感应到人都会自动打开门步进电机正转一圈,开门后当没有感应人系统会自动延时3秒自动关门,如果在关门的时候感应人到,门就会自动打开,防止误伤到人。优点:安全可靠。 (3)手动模式
[单片机]
基于51<font color='red'>单片机</font>的自动门设计
串口通信 校验码_8051单片机串口通信中的检错方法
对于基于flash控制器的8051的芯片结构,一般在进行数据传输时,都是先通过串口将数据传送到flash控制器的buffer中。由于buffer的大小为512 bytes,所以每次传输的最大数据量为512bytes。本文中所讨论的三种检错方法的传输数据量均为512 bytes。 1 检错方式 基于8051的串口数据通信系统的硬件开发平台框图如图1所示。利用该平台进行数据传输时,通常有三种数据检错方式。 1.1 奇偶校验 奇偶校验是检错中比较常见的一种方法。它利用数据中的1的个数作为检错的标志位,若1的个数为奇数个,则错误检测的标志位为1,若1的个数为偶数,则错误检测的标志位为0。在发送端和接收端同时检测奇偶位,若得到相同
[单片机]
<font color='red'>串口通信</font> 校验码_8051<font color='red'>单片机</font><font color='red'>串口通信</font>中的检错方法
51单片机P0口的特性及使用方法解析
一、P0口特性: P0口为三态双向I/O口。对于内部有程序存贮器的单片机基本系统(如定制的8051),P0口可以作为输入/输出口使用,直接连外部的输入/输出设备;也可以作为系统扩展的地址/数据总线口。对于内部没有程序存贮器的单片机(如8031),P0口只能作为地址/数据总线口使用。 1、P0口的输出驱动器中也有一个多路电子开关。输出驱动器转接至口锁动器的Q端时,P0口作为双向I/O口使用。 这时,CPU发来的控制信号为低电平,使输出驱动电路的上拉场效应管T1截止。P0口的锁存器为“1”时,输出驱动器中的两个场效应管均截止,引脚浮空;由于P0口输出电路是漏极开路的电路,必须外接10kΩ拉高电阻才能有高电平输出。而写入“0”时,下
[单片机]
51<font color='red'>单片机</font>P0口的特性及使用方法解析
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved