标题: STC89C52单片机串口通迅程序+3个定时器 合适新手学习 [打印本页]

作者: ssk7793    时间: 2019-3-19 19:43
标题: 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)






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1