找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3516|回复: 0
打印 上一主题 下一主题
收起左侧

STC89C52单片机串口通迅程序+3个定时器 合适新手学习

[复制链接]
跳转到指定楼层
楼主
合适新手学习的51单片机串口收发及定时器, 多文件结构, 我尽量备注详细
方便在此基础上开发跟串口相关的应用




单片机源程序:
  1. /***********************************
  2. *       STC89/90 系列              *
  3. ***********************************/
  4. //定时器相当于电脑的多任务,多线程

  5. #include "config.h"        //公共变量
  6. #include "command.h" //公共函数
  7. #include "UART.h" //串口文件

  8. //****************** 主程序 *******************
  9. void main()
  10. {
  11.         //打开串口
  12.         SCON  = 0x50;        // SCON: 模式 1, 8-bit UART, 使能接收         
  13.         
  14.         //定时器0 对应interrupt 1
  15.         TMOD |= 0x01;          //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响                     
  16.         TH0=0x00;              //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出        
  17.         ET0=1;           //定时器0中断打开
  18.         TR0=1;           //定时器0开关打开
  19.         
  20.         //定时器1 对应interrupt 4
  21.     TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit reload        
  22.     TH1 = 0xFD;                                        // TH1:  reload value for 9600 baud @ 11.0592MHz        
  23.     TR1 = 1;                                        //定时器1开关打开

  24.         //定时器2 对应interrupt 5
  25.         RCAP2H = (65536-50000)/256;
  26.         RCAP2L = (65536-50000)%256;
  27.         ET2 = 1;                                        //定时器2中断打开
  28.         TR2 = 1;                                        //定时器2开关打开
  29.         
  30.         EA = 1;                                                //打开总中断
  31.     ES = 1;                                                //打开串口中断
  32.         
  33.    
  34.         i1=0,i2=0;i3=0;cmd1=0;

  35.     while (1) {                                                        //无限循环
  36.         UART_main();                                        //串口接收发送
  37.     }
  38. }
  39. //********** 定时器0 ***********
  40. void time0() interrupt 1
  41. {
  42.         TH0=0x00;TL0=0x00;                        //重新赋值,必需

  43.         /*i3++;
  44.         if(i3>20){
  45.                 LED1=~LED1;
  46.                 i3=0;
  47.         }*/      
  48. }

  49. //********** UART的定时器1中断程序 ***********
  50. void time1() interrupt 4
  51. {   
  52.         if(RI) {                                                //判断是接收中断产生
  53.                 RI=0;                                                //标志位清零               
  54.                 if(SBUF!='~'){                                //如果结尾不是~符号
  55.                         Tbuf1[i1]=SBUF;                        //值存到数组
  56.                 }
  57.                 i1++;                                                //累加
  58.                 if(SBUF=='~'){                                //如果值为~符号         
  59.                         cmd1=1;                                        //设结束标志
  60.                 }
  61.         }
  62.         if(TI) {                        //如果是发送标志位,清零
  63.                 TI=0;
  64.         }
  65. }

  66. //********** 定时器2 ***********
  67. void time2() interrupt 5
  68. {
  69.         TF2=0;

  70.         i3++;
  71.         if(i3>10){
  72.                 LED1=~LED1;
  73.                 i3=0;
  74.         }      
  75. }



复制代码

全部资料51hei下载地址:
STC89C52串口通迅+3个定时器.zip (29.36 KB, 下载次数: 52)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表