找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5026|回复: 6
收起左侧

STC12C5A60S2串口通迅+1定时器+红外接收+3个软件定时器程序

  [复制链接]
ID:424598 发表于 2019-3-27 21:17 | 显示全部楼层 |阅读模式
之前发了个STC89C52RC单片机的串口+定时器
然后做综合程序时发现,8K存储真心不够用

手头大容量的只有STC12C5A60S2, 移植过程遇到各种问题
首先是定时器, STC12C5A60S2没有定时器2
且用了串口1后, 定时器1会冲突
关键是这句ET1 = 1;   //中断打开
一开就冲突

要么只有串口能用, 要么只有红外能用
花了二天时间才解决并存问题

发给需要的程友, 在此基础上可以加入各种模块


0.png


串口可发送字符串给单片机, 单片机接收后再返回(注: 必需以~号结尾)
1.png


红外接收, 按下遥控器后, 串口会输出相应码值
2.png


20键迷你遥控器码图.jpg


  1. /***********************************
  2. *       STC12C5A60S2               *
  3. ***********************************/
  4. //定时器相当于电脑的多任务,多线程

  5. #include "config.h"                //公共变量
  6. #include "command.h"        //公共函数
  7. #include "UART.h"                //串口文件
  8. #include "PCA.h"                //软件定时器
  9. #include "infrared.h"        //红外接收

  10. //****************** 主程序 *******************
  11. void main()
  12. {
  13.         UART_main();                                //串口+定时器初始化
  14.    
  15.         i1=0,i2=0;i3=0;i4=0;cmd1=0;        //变量初始化

  16.         PCA_Timer0 = 15000*25;                //CCAP0软件定时
  17.         PCA_Timer1 = 15000*50;                //CCAP1软件定时
  18.         PWMn_init();                                //初始化PCA

  19.     while (1) {                                        //无限循环
  20.         UART1_main();                        //串口接收发送
  21.                 if(irok) {              //如果接收好了进行红外处理
  22.                         Ircordpro();
  23.                         irok=0;
  24.                 }
  25.                 if(irpro_ok) {          //如果处理好后进行工作处理,如按对应的按键后显示对应的数字等
  26.                         Ir_work();
  27.                 }
  28.     }
  29. }

  30. void EX0_ISR (void) interrupt 0 //外部中断0服务函数
  31. {
  32.         static uchar i;             //接收红外信号处理
  33.         static bit startflag;       //是否开始处理标志位

  34.         if(startflag) {                        
  35.                 if(irtime<63&&irtime>=33) { //引导码 TC9012的头码,9ms+4.5ms
  36.             i=0;
  37.                 }
  38.                 irdata[i]=irtime;//存储每个电平的持续时间,用于以后判断是0还是1
  39.                 irtime=0;
  40.                 i++;
  41.                 if(i==33) {
  42.                           irok=1;i=0;
  43.                   }
  44.         } else {
  45.                 irtime=0;
  46.                 startflag=1;
  47.         }
  48. }

  49. //********** 定时器0 ***********
  50. void time0() interrupt 1
  51. {
  52.         TR0=0;
  53.         irtime++;  //用于计数2个下降沿之间的时间

  54.         //定时器0,和红外计数共用,注:不能加延时函数,否则会影响红外接收
  55.         i7++;
  56.         if(i7>100){
  57.         LED7=~LED7;
  58.         i7=0;
  59.         }
  60.         TR0=1;   
  61. }

  62. //********** 定时器1 ***********
  63. void time1() interrupt 3  //不能删除,不要添加代码,因为和UART1() interrupt 4冲突
  64. {        
  65.          
  66. }

  67. //********** 串口1中断程序 ***********
  68. void UART1() interrupt 4
  69. {  
  70.         if(RI) {                                                //判断是接收中断产生
  71.                 RI=0;                                                //标志位清零               
  72.                 if(SBUF!='~') {                                //如果结尾不是~符号
  73.                         buf1[i1]=SBUF;                        //值存到数组
  74.                 }
  75.                 i1++;                                                //累加
  76.                 if(SBUF=='~') {                                //如果值为~符号         
  77.                         cmd1=1;                                        //设结束标志
  78.                 }        
  79.         }
  80.         if(TI) {                        //如果是发送标志位,清零
  81.                 TI=0;
  82.         }
  83. }

  84. /******************************
  85. *       PCA中断测试程序
  86. *       CCAP0软件定时
  87. *       CCAP1软件定时
  88. *       PCA计数器(溢出中断)
  89. *******************************/
  90. void PCA_interrupt (void) interrupt 7
  91. {
  92.         PCA_interrupt7();
  93. }
复制代码

全部资料51hei下载地址:
STC12C5A60S2串口通迅+1定时器+红外接收+3个软件定时器.zip (51.38 KB, 下载次数: 163)

评分

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

查看全部评分

回复

使用道具 举报

ID:229821 发表于 2019-3-28 07:39 | 显示全部楼层
不错的东西。很好。收藏了。。
回复

使用道具 举报

ID:229821 发表于 2019-4-1 19:02 | 显示全部楼层
谢谢分享。下载了。
回复

使用道具 举报

ID:148033 发表于 2019-4-6 17:59 | 显示全部楼层
谢谢楼主好好学习
回复

使用道具 举报

ID:81075 发表于 2019-4-9 18:07 | 显示全部楼层
我也正遇到这个问题,正好看看!
回复

使用道具 举报

ID:493097 发表于 2019-4-28 12:06 | 显示全部楼层
正好在找这东东~谢谢lz分享
回复

使用道具 举报

ID:852256 发表于 2020-12-1 14:40 来自手机 | 显示全部楼层
楼主用心啦,谢谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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