51单片机 (6)串口中断通信+定时器2串口中断

发布者:shiwanyongbing最新更新时间:2018-05-19 来源: eefocus关键字:51单片机  串口中断通信  定时器 手机看文章 扫描二维码
随时随地手机看文章

51单片机默认使用定时器1作为串口通信的波特率发生器、定时器1中断通信,串口与定时器1冲突,在遇到定时器不够用的时候可以用定时器2


  1. #include   

  2.  

  3. void DelayMs(unsigned int i);  

  4. void SerialInit();  

  5. void SendByte(unsigned char sbyte);  

  6. void SendString(unsigned char *pstr);  

  7.   

  8.   

  9. void main(void)  

  10. {  

  11.         SerialInit();  

  12.         while(1);     //注:必需要无限循环  

  13. }  

  14.   

  15.   

  16. /* 

  17. //单片机时钟周期:11.0592MHz   以时钟1作为波特率发生器 

  18. void SerialInit(){ 

  19.  TMOD=0x20;   //设置T1工作方式为方式2 

  20.  TH1=0xfd; //给定时器高位装初值 

  21.  TL1=0xfd; //给定时器低位装初值 

  22.  TR1=1;  //开定时器 

  23.              //以上是设置波特率 

  24.  SM0=0;  //设置串口通讯方式为方式1 

  25.  SM1=1;   

  26.  REN=1;  //串口是否接收数据的开关 

  27.  

  28.  EA=1; //总中断打开,采用查询法时不用打开中断 

  29.  ES=1; //串口中断开关,采用查询法时不用打开中断 

  30. */  

  31. //单片机时钟周期:11.0592MHz       以时钟T2作为波特率发生器  

  32. void SerialInit(){  

  33.      PCON &= 0x7F;      //波特率不倍速 SMOD=0  

  34.      SCON = 0x50;       //方式1,8位数据,可变波特率,接收允许  

  35.      T2CON  = 0x34;     

  36.      RCAP2H = 0xFF;      

  37.      RCAP2L = 0xDC;    

  38.      TH2    = 0xFF;    

  39.      TL2    = 0xDC;  

  40.          

  41.      EA=1; //总中断打开,采用查询法时不用打开中断   

  42.      ES = 1;          //串口中断开关,采用查询法时不用打开中断  

  43.   

  44. }  

  45.   

  46.   

  47. //串口中断函数:  

  48. void SerialPortInte(void) interrupt 4 //采用串口中断法收发数据  

  49. {  

  50.      unsigned char rbyte;  

  51.      if(RI){     //RI=1,判定为串口接收到了数据,RI要清零,  

  52.          RI=0;  

  53.          rbyte=SBUF;   

  54.          if(rbyte==0x0A){       

  55.             SendString("换行");  

  56.          }else if(rbyte==0x0D){  

  57.             SendString("回车");  

  58.          }else{  

  59.             SendByte(rbyte);   

  60.          }  

  61.               

  62.      }  

  63.   

  64. }  

  65.   

  66. //串口发送一个字节:  

  67. void SendByte(unsigned char sbyte)  

  68. {   

  69.      SBUF=sbyte; //发送数据  

  70.      while(!TI); //等待发送完成  

  71.      TI=0; //清零发送标志位  

  72. }  

  73.    

  74. //串口发送一个字符串:  

  75. void SendString(unsigned char *pstr) //定义指针  

  76. {  

  77.      while(*pstr!='\0') //字符串是否发完  

  78.      {  

  79.          SendByte(*pstr);//发送字符串数据  

  80.          pstr++; //指向下一个字符  

  81.      }  

  82. }  

  83.   

  84. void DelayMs(unsigned int i)  //延时i ms  

  85. {  

  86.     unsigned int j;  

  87.     while(i--)  

  88.     {  

  89.         for(j = 0; j < 125; j++);  

  90.     }  


关键字:51单片机  串口中断通信  定时器 引用地址:51单片机 (6)串口中断通信+定时器2串口中断

上一篇:51单片机几种精确延时
下一篇:51单片机 (5) C51实现单片机串口通信仿真

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

51单片机DS18B20温度计制作 带仿真和源码
1、温度可通过调整DS18B20“+”“-”进行调整。 2、当温度超出范围,会有声光报警 3、因为在proteus中找不到三极管8550,所以拿了NPN管MSP8098代替,其原理是相同的,但程序稍做修改,位选本来用低电平,现在高电平位选。 4、如何装载程序?双击单片机—program file—找到相应的hex文件。 仿真原理图如下(proteus仿真工程文件可到本帖附件中下载) 单片机源程序如下: #include reg52.h //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #include math.h #include INTRINS.H #define uchar unsigne
[单片机]
<font color='red'>51单片机</font>DS18B20温度计制作 带仿真和源码
数模转换器DAC7724与AT89S51单片机的接口及程序设计
摘要:介绍了一种性能优良的低功耗4通道12位并行D/A转换器DAC7724的功能特点和工作过程,给出了DAC7724与51单片机的接口电路及其汇编语言应用程序,最后提出了一种利用DAC输出大范围电压(-20V~+20V)的实现方法。 关键词:数/模转换;单片机;汇编语言;DAC7724 0 引言 在微计算机电机控制的机电设备中,常常需要把数字信号变成模拟信号,以驱动机电设备的运行。在这个过程中,D/A转换是一个十分重要的环节,同时也是微计算机电机控制系统重要的组成部分。 1 DAC7724的主要特点 DAC7724是TI公司生产的12位并行输入4通道D/A转换器,该转换器具有以下特征: ◇±15V以内的双电源工作;
[单片机]
数模转换器DAC7724与AT89S<font color='red'>51单片机</font>的接口及程序设计
MSP430F5438 看门狗实验
简介: 1,学会在定时器和看门狗模式下操作 WDT,了解 WDT 寄存器的配置 2,编程实现WDT 定时功能,WDT 时钟源来自 ACLK,且 ACLK 无失效来自 XT1 晶体 3,实现功能:250ms 定时,每 250ms LED1 亮灭交替闪烁 1,看门狗介绍 看门狗定时器是一个32位的定时器它可以作为看门狗或定时器使用所有F5XX系列的器件中都有增强型看门狗定时器—WDT_A。 什么是看门狗? 从字面的意思理解,看门狗帮我的系统看门,防止我的系统到处乱跑。在实际嵌入式系统中看门狗也是充当这个角色的。看门狗,简称WDT,很明显它实际上是一个定时器,就如同我们所讲的Timer_A3亦或是Timer_B7系统一样,
[单片机]
MSP430F5438 看门狗实验
MCS-51单片机指令系统“读-改-写”方式指令
51 单片机有四个 8 位的并行接口。由于内部结构的特点,并行接口在输出 0、1 的时候,能力是不一样的。输出 0 的时候,能力较强,但输出 1 的时候,能力就很差了,而 P0 口,则要外接上拉电阻才能输1。 单片机从端口读入数据的通道有两个,一个是从锁存器引入,一个是从输出引脚处引入,分别叫做“读锁存器”和“读引脚”。单片机在进行端口输出时,经常要参考其上一次的输出状态。 Example:使一个LED灯闪烁。编程序时需要从输出引脚读前一次的输出状态,然后将其求反输出。如果上次是输出“1”使LED点亮,这时候虽然端口上输出逻辑是“1”,但是由于LED的二极管作用将输出高电平拉至“0”电平(0.7V左右),通过引脚读进来就是
[单片机]
51单片机——共阳数码管的动态显示
数码管的原理图及基本原理 原理图 怎么工作的我就不介绍了 基本原理 动态显示实质上就是轮流点亮单个数码管实现多位数码管整体显示的效果。在轮流显示过程中,每位数码管点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。 例题(附代码) 代码如下 #include reg52.h sbit HC138_A = P2^5; sbit HC138_B = P2^6; sbit HC138_C = P2^7; //相当于时
[单片机]
<font color='red'>51单片机</font>——共阳数码管的动态显示
20-基于51单片机的遥控开关仿真
具体实现功能 实现功能: 本课题研究的是一款遥控开关,采用51单片机进行发射电路与接收电路的设计,发射电路由单片机最小系统及四个按键构成, 接收电路由单片机最小系统、继电器及LED灯构成。 由于仿真无法模拟无线模块通信,故利用单片机RXD、TXD端口,通过发射电路的开关实现对接收电路LED灯的控制, 仿真实现LED灯的远程点亮及熄灭。 单片机介绍 51单片是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C51为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具有以下标准功能:8k字节Flash,
[单片机]
20-基于<font color='red'>51单片机</font>的遥控开关仿真
51单片机实现多级液晶显示中文菜单
  一、引言   目前小型的显示器主要有LCD和LED,LED显示器只能显示数字和有限个英文字符,不能显示汉字,显示内容不直观,操作人员只能根据约定格式了解显示内容。而LCD则可显示各种汉字和图形,尤其能实现中文菜单显示,为操作者提供方便友好的操作界面,并且功耗低,因此LCD得到广泛应用。而现在市面上带中文字库的LCD比比皆是,价格适中,且大部分具有与MCU统一的标准接口,为使用LCD实现中文菜单操作提供了很大的方便。相信更多的 电子 产品在提升性能的同时,设计更加人性化的中文菜单交互界面,将会使产品具有更广阔的前景。   二、YM12864液晶显示模块简介   YM12864汉字图形点阵液晶显示模块,可显示汉字及图形
[单片机]
<font color='red'>51单片机</font>实现多级液晶显示中文菜单
基于51单片机的调光控制器设计
1 调光控制器设计 在日常生活中,我们常常需要对灯光的亮度进行调节。本调光控制器通过单片机控制双向可控硅的导通来实现白炽灯(纯阻负载)亮度的调整。双向可控硅的特点是导通后即使触发信号去掉,它仍将保持导通;当负载电流为零(交流电压过零点)时,它会自动关断。所以需要在交流电的每个半波期间都要送出触发信号,触发信号的送出时间就决定了灯泡的亮度。 调光的实现方式就是在过零点后一段时间才触发双向可控硅开关导通,这段时间越长,可控硅导通的时间越短,灯的亮度就越低;反之,灯就越亮。 这就要求要提取出交流电压的过零点,并以此为基础,确定触发信号的送出时间,达到调光的目的。 1.1 硬件部分 本调光控制器的框图如下:
[单片机]
基于<font color='red'>51单片机</font>的调光控制器设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

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