找回密码
 立即注册

QQ登录

只需一步,快速开始

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

分享一个2无线串口通讯同频景观灯程序

[复制链接]
跳转到指定楼层
楼主
ID:360000 发表于 2019-7-11 11:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
功能描述:PIC12f1822单片机,串口模块通讯,无线控制灯具同频闪烁。

单片机源程序如下:
  1. //同步闪烁 红绿双色
  2. //无线模块每10ms开一次,开启1ms
  3. //发射每10S发一个同步脉冲
  4. //红绿切换信号每次发送1S最少1000个数据,以保证都收到
  5. #include<pic.h>//12f1822
  6. #define uchar unsigned char
  7. #define uint  unsigned int
  8. #define  Led1 RA0
  9. #define  Led2 RA2
  10. #define  Com_on RA1
  11. __CONFIG(FOSC_INTOSC & WDTE_OFF & PWRTE_OFF & MCLRE_OFF & CP_ON & CPD_ON & BOREN_OFF & CLKOUTEN_OFF & IESO_OFF & FCMEN_OFF);
  12. __CONFIG(WRT_OFF & PLLEN_OFF & STVREN_OFF & BORV_LO & LVP_OFF);

  13. void Delay(uchar x);
  14. void init();
  15. void LED();
  16. void interrupt com();
  17. uchar M;
  18. uchar N;
  19. uchar h;
  20. //uchar k;
  21. void Delay(uchar x)
  22. {
  23.         uchar a,b;
  24.         for(a=x;a>0;a--)
  25.         for(b=100;b>0;b--);
  26. }

  27. void init()
  28. {
  29.     OSCCON=0X6A;  //1MHz(0X58)16MHz(0X78)4M(0X6A)配置字决定内部振荡器
  30.     OSCTUNE=0X00;  //内部振荡器校正
  31.     ANSELA=0X00;  //定义为数字IO口
  32.     APFCON=0XA4; //脚位复用设置RA5=RX RA4=TX
  33.     PORTA=0x00;  //端口状态00000000
  34.         TRISA=0xF0;  //端口方向00100000 RA5必须置1
  35.         TXSTA=0x24;  //使能发送;异步模式;高速波特率
  36.         RCSTA=0x90;  //使能串口
  37.     BRG16=0;     //8位波特率发生器
  38.         SPBRGL=25;    //波特率变量,设置为9600(25)
  39.     OPTION_REG=0xC5; //定义定时器0时钟源,分频比1:64
  40.     GIE=1;        //总中断开关
  41.         PEIE=1;        //外设中断开启
  42.         RCIE=1;        //接收中断开启
  43.     TMR0IE=1;     //定时器中断开启
  44.     TMR0IF=0;     //定时器0中断标志清零
  45.     TMR0=0x64;       //初值设置,10ms溢出
  46. }
  47. void main()
  48. {   
  49.    init();
  50.    while(1)
  51.   {
  52.     if(M==0X25)   //同步复位
  53.       {
  54.       TMR0IF=0;
  55.       N=0;
  56.       M=0;
  57.       TMR0=0x64;
  58.       }
  59.      
  60.     if(M==0X24||M==0X26)
  61.       {
  62.        h=M;
  63.       }
  64.     if(N>0&&N<15)  //LED置1时间0-100ms
  65.       {
  66.       if(h==0X24)   //绿灯时间
  67.        {
  68.         Led1=1;
  69.        }
  70.       if(h==0X26)   //红灯时间
  71.        {
  72.         Led2=1;
  73.        }
  74.       }
  75.     else
  76.       {
  77.        Led1=0;
  78.        Led2=0;
  79.       }
  80.     if(N>50&&N<60)   //500ms-600ms期间红灯亮
  81.       {
  82.        if(h==0X26)   //红灯闪第二次
  83.        {
  84.         Led2=1;
  85.        }
  86.       }
  87.     else
  88.       {
  89.       Led1=0;
  90.       Led2=0;
  91.       }
  92.     if(N>99)    //1S后清零N
  93.       {
  94.       N=0;
  95.       PIE1&=0xdf;
  96.       RCSTA&=0x7f;//关闭   关开一次com确保接收无误
  97.       PIE1|=0x20;
  98.       RCSTA|=0x80;//开启
  99.       }
  100.    }  
  101. }  

  102. void interrupt com()       //中断入口
  103. {
  104.         if(RCIF==1&&RCIE==1)
  105.         {
  106.         M=RCREG;
  107.         }
  108.     if(TMR0IF==1)      //每10ms一次
  109.     {
  110.         N++;
  111.         Com_on=1;         //开启1ms
  112.         TMR0IF=0;
  113.         TMR0=0x64;
  114.         Com_on=0;
  115.     }
  116. }
复制代码

所有资料51hei提供下载:
12F1822OSC.rar (1.29 KB, 下载次数: 5)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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