单片机串行通讯应用程序

发布者:BlissfulHiker最新更新时间:2018-01-15 来源: eefocus关键字:单片机  串行通讯 手机看文章 扫描二维码
随时随地手机看文章

许多数据采集系统都需要用到串口,串口的特点是:占用的硬件投资少,只需要很少的信号线,可以同步传输,也可以异步传送。传输数据的格式、速率可以变化。但是抗干扰性能不好,传输距离不够。本例程主要通过实验,演示串口通信的各种设置,上位机及其 单片机 的软件编程方法,数据的采集与处理等。也可以作为串口调试软件用。是一个非常实用的实验。能够方便地进行代码移植。  
 

       org 00h 
       jmp main


       org 23h           ;串行中断入口地址
       jmp com_int         ;串行中断服务程序

;*********** 主程序开始 ******************* 
       org 30h

     main:mov sp,#30h         ;设置堆栈
       lcall rest         ;初始化
       lcall comm         ;串口初始化 
       jmp $            ;原地等待
; ************* 初始化 *********************
     rest:mov p0,#00h         ;禁止数码管显示
       mov p2,#255
       mov p1,#255         ;禁止LED显示 
       RET             ;返回
;************** 串口初始化 *****************
;设置串行口工作方式1,定时器1作为波特率发生器
;波特率设置为 2400 ;
     comm:mov tmod,#20h        ;设置定时器T1工作方式2
       mov tl1,#0f2h        ;定时器计数初值,波特率 2400 
       mov th1,#0f2h        ;定时器重装值 
       setb ea           ;允许总的中断
       setb es           ;允许串行中断
       mov pcon,#00h        ;波特率不倍增
       mov scon,#50h        ;设置串口工作方式1,REN = 1 允许接收 
       setb tr1          ;定时器开始工作
       ret             ;返回 
;*************** 串口中断服务程序 ***********
; 如果接收 0FF 表示上位机需要联机信号, 单片机 发送 0FFH作为
; 应答信号,如果接收到 数字 1~ n,表示相应的功能;
; 这里,如果收到 1 ,则 单片机 向计算机发送字符 'm'; 
;    如果收到 2 ,则 单片机 向计算机发送字符 'c';
;    如果收到其他的数据,则发送 'u';
   com_int:clr es           ;禁止串行中断 
       clr ri            ;清除接收标志位
       mov a,sbuf         ;从缓冲区取出数据 
       cjne a,#0ffh,in_1      ;检查数据
       mov sbuf,#255        ;收到联机信号,发送联机信号 
       jnb ti,$          ;等待发送完毕
       clr ti            ;清除发送标志
       setb es           ;允许串行中断 
       reti            ;中断返回      
     in_1:cjne a,#01,in_2       ;如果收到1
       mov sbuf,'m'        ;发送 'm'
       jnb ti,$          ;等待发送完毕
       clr ti           ;清除发送中断标志
       setb es           ;允许串行中断 
       reti             ;中断返回 
     in_2:cjne a,#02,in_3       ;接收到 2 
       mov sbuf,'c'        ;发送 'c' 
       jnb ti,$          ;等待发送完毕
       clr ti            ;清除发送中断
       setb es           ;允许串行中断
       reti            ;中断返回 
     in_3:mov sbuf,'u'        ;收到其他数据,发送'u'
       jnb ti,$           ;等待发送完毕 
       clr ti            ;清除发送中断标志
       setb es           ;允许串行中断 
       reti            ;返回
       end


关键字:单片机  串行通讯 引用地址:单片机串行通讯应用程序

上一篇:单片机计数器功能实验程序
下一篇:RS232通信程序

推荐阅读最新更新时间:2024-03-16 15:52

51系列中嵌入式单片机的优缺点分析
51系列是应用最广泛的单片机,由于产品硬件结构合理,指令系统规范,加之生产历史“悠久”,有先入为主的优势。世界有许多著名的芯片公司都购买了51芯片的核心专利技术,并在其基础上进行性能上的扩充,使得芯片得到进一步的完善,形成了一个庞大的体系,直到现在仍在不断翻新,把单片机世界炒得沸沸扬扬。 51系列的另一个优点是乘法和除法指令,这给编程也带来了便利。八位除以八位的除法指令,商为八位,精度嫌不够,用得不多。而八位乘八位的乘法指令,其积为十六位,精度还是能满足要求的,用的较多。作乘法时,只需一条指令即可。很多的八位单片机都不具备乘法功能,作乘法时还得编上一段子程序调用,十分不便。 51系列的I/O脚的设置和使用非常简单,但高电平
[单片机]
avr单片机流水灯的程序
/******************************************************************************/ /*【编写时间】: 2011.07.07 * 【作 者】: 雁翎电子 * 【版 本】: V1.0 * 【编译环境】: ICCAVR * 【函数功能】: 流水灯实验 * 【晶 振】: 8M * 【芯 片】: ATMEGA16A * 【硬件连接】: J1短路帽接上 /******************************************************************************/ #d
[单片机]
51单片机之C语言-4.5基本语句之条件选择语句
1. 条件选择语句之if 语句 前面我们讲了数据类型,运算符及表达式。C语言也是一种语言,既然是语言,一定有连接词。这些连接词可以用来表示假设,循环等等。我们先来看看假设if语句。这些连接词有一定的规则,我们只能按照这些规则来编写,否则编译器无法理解,就出错了。 第一种形式为基本形式: if if(表达式)语句 其语义是:如果表达式的值为真,则执行后面的语句,否则不执行该语句。 这个很好理解,if就是 如果 的意思,如果外面下雨,就带雨伞。在这里 外面下雨 ,就是表达式,如果这个表达式是对的,就执行后面的 带雨伞 这个动作。 第二种形式为: if-else if(表达式) 语句1; else 语句2; 其
[单片机]
51<font color='red'>单片机</font>之C语言-4.5基本语句之条件选择语句
单片机常见的报警方式有几种?基本原理分别是什么?
常见的报警方式有6种 (1)指示灯或数码管显示出数据,以提醒操作人员注意。 (2)采用声、光及语音进行报警。其中,光效果通常取自发光二极管LED或其他光源器件;声效果可取自电铃、电笛、蜂鸣器、或音乐(语音)芯片等。 (3)合成语音报警。采用这种方式进行报警时,单片机应用系统将对语音信号进行采集、处理、合成和识别,使报警系统的功能更加完善,报警信息更加具体、生动、准确,直至给出报警对象的具体信息。 (4)图形、图像报警。这种系统设微型机控制的打印机或CRT显示器,使警卫人员在接受其他报警信号的同时,还能看到报警显示的画面或数据、文字,不但能将报警资料打印成文,而且可方便存档。 (5)具有控制功能的报警。这种报警系统具有控制
[单片机]
PIC中档单片机的中断总结
与51或者其他系列的单片机相比,PIC 单片机的中断机制有其特殊之处,针对我们一些初学者存在的一些问题和疑惑,我在此做一个个人总结,不当的地方,请站友们指正。 先摘引三个对PIC中断理解的回帖,然后我再对中断活动的过程、应该注意的事项、及一个疑惑进行较详细的总结和解释。 --------------- john frank :关于pic中断有些不明白的地方 借用大虾的程序; ;******************** 中断服务代码 btfss INTCON,T0IE ; 判断是否为T0中断 goto other_int btfss INTCON,T0IF ; it ’s the t
[单片机]
51单片机:定时器
定时器:单条指令时间(us) = 1/单片机频率*单条指令时钟周期 TH0和TL0共16位,最多只能表示65535,所以要设定一个Base值,再利用循环多计数几次 比如0.002s:0.02 = (1/11.0592M * 12)*指令个数,指令个数 = 0.02(1/11.0592M * 12) = 0.018432 因为频率用的是M,所以结果0.018432*1000000 = 18432 使用16位寄存器的情况下,TH0和TL初始值:65536 - 18432 = 47104 = 0xB8 00 编写定时器延时函数: #include sbit LED = P0^0; void Delay(un
[单片机]
按键控制单片机改变流水灯速度
/* 程序效果:有三个按键,按下其中任意一个流水灯的速度改变 */ #include reg52.h //52系列单片机的头文件 #define uchar unsigned char//宏定义 #define uint unsigned int uchar count=40,flag=0; //定义刚开始的流水灯的速度,后一个为标志变量 void main() {   uchar i=0;//定义局部变量   EA=1; //打开总中断   ET0=1; //打开定时器   TR0=1; //启动定时器   TH0=(65536-50000)/256; //装初值   TL0=(65536-50000)%256;   P2=
[单片机]
兆易创新推出GD32F5系列Cortex®-M33内核MCU,提供工业高性能应用新选择
中国北京(2024年3月7日)—— 业界领先的半导体器件供应商兆易创新GigaDevice(股票代码 603986)今日宣布,正式 推出基于Arm® Cortex®-M33内核的GD32F5系列高性能微控制器,全面适配于能源电力、光伏储能、工业自动化、PLC、网络通讯设备、图形显示等应用场景。 GD32F5系列高性能MCU具备显著扩容的存储空间、优异的处理能效和丰富的接口资源,该系列MCU符合系统级IEC61508 SIL2功能安全标准,并且提供完整的软硬件安全方案,能够满足工业市场对高可靠性和高安全性的需求。目前,该系列产品已可提供样片,并将于5月正式量产供货。 GD32F5系列Cortex®-M33内核高性能MCU
[嵌入式]
兆易创新推出GD32F5系列Cortex®-M33内核<font color='red'>MCU</font>,提供工业高性能应用新选择
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

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