zoukankan      html  css  js  c++  java
  • 实现串口点灯

    实现串口点灯

    实验要求

    (1) 使用 stc-isp 烧写软件向单片机发送“88 FB AF XX FC FC”6 个字节的命令,其中“88 FB AF”及“FC FC”为数据的帧头和帧尾,“XX”为 00~07 数据。

    (2)单片机使用串口中断进行数据接收,同时需要判断帧头和帧尾的正确性。

    (3)判断帧头和帧尾完毕后,若正确的话再判断“XX” 数据,对应“XX” 数据对LED0~LED7 进行点亮、熄灭控制;若不正确丢掉数据, 转入等待接收。

     实验代码

    #include "reg52.h"             
    
    typedef unsigned int u16;      //对数据类型进行声明定义
    typedef unsigned char u8;
    
    
    /*******************************************************************************
    * 函数名         :UsartInit()
    * 函数功能           :设置串口
    * 输入           : 无
    * 输出              : 无
    *******************************************************************************/
    void UsartInit()
    {
        SCON=0X50;            //设置为工作方式1
        TMOD=0X20;            //设置计数器工作方式2
        PCON=0X80;            //波特率加倍
        TH1=0XF3;                //计数器初始值设置,注意波特率是4800的
        TL1=0XF3;
        ES=1;                        //打开接收中断
        EA=1;                        //打开总中断
        TR1=1;                    //打开计数器
    }
    
    /*******************************************************************************
    * 函数名         : Usart() interrupt 4
    * 函数功能          : 串口通信中断函数
    * 输入           : 无
    * 输出              : 无
    *******************************************************************************/
    u8 i,val;
    u8 arr[6];
    
    /*******************************************************************************
    * 函 数 名       : main
    * 函数功能         : 主函数
    * 输    入       : 无
    * 输    出         : 无
    *******************************************************************************/
    void main()
    {    
        UsartInit();  //    串口初始化
        while(1)
        {
        }        
    }
    
    
    
    void Usart() interrupt 4
    {
         EA=0;
         RI=0;
         arr[i]=SBUF;
         if(arr[i]==0x88)
         {
             arr[0]=    arr[i];
            i=0;
         }
         i++;
         if(i==6)
           {
            i=0;
            if(arr[0]==0x88&&arr[1]==0xfb&&arr[2]==0xAF&&arr[4]==0xfc&&arr[5]==0xfc)
            {
                val=arr[3];
                 switch (val)
                {
                    case 0x00:P0=~0XFE;break;  
                    case 0x01:P0=~0XFD;break;
                    case 0x02:P0=~0XFB;break;
                    case 0x03:P0=~0XF7;break;
                    case 0x04:P0=~0XEF;break;
                    case 0x05:P0=~0XDF;break;
                    case 0x06:P0=~0XBF;break;
                    case 0x07:P0=~0X7F;break;
                } 
            }
         }
          EA=1;
    
    }
  • 相关阅读:
    [EF]vs15+ef6+mysql code first方式
    Asp.net MVC]Asp.net MVC5系列——布局视图
    Asp.net MVC]Asp.net MVC5系列——Routing特性
    Asp.net MVC]Asp.net MVC5系列——Razor语法
    Asp.net MVC]Asp.net MVC5系列——实现编辑、删除与明细信息视图
    Asp.net MVC]Asp.net MVC5系列——在模型中添加验证规则
    Asp.net MVC]Asp.net MVC5系列——在模型中添加
    Django跨域(前端跨域)
    Stark组件
    Admin组件
  • 原文地址:https://www.cnblogs.com/wjw1014/p/10137990.html
Copyright © 2011-2022 走看看