zoukankan      html  css  js  c++  java
  • 串口通讯

    /*
                                      串口发送端(还需要接受端)
    程序说明:每按一下按钮,P2.0端口的LED闪烁一次,数码管加一,当加到
    9时,再按一下就重复为零
    
    知识点:外部中断1
            定时器1
    寄存器:中断允许寄存器IE,定时器控制寄存器TCON,定时器方式寄存器TMOD,串口控制寄存器SCON
    */
    #include<reg52.h>
    unsigned int i,j; 
    int duan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//在数码管显示的0~9数字的十六进制代码
    /*
    //步骤一:串口配置
    //步骤二:波特率配置
    //步骤三:写数据
    */
    sbit LED = P2^0;//端口位声明
    void main()//主函数
    {
        LED = 0;
        EX1 = 1;//外部中断1分开关
        IT1 = 1;//触发方式:下降沿
        PX1 = 1;//设置为高优先级
        
        //步骤一:波特率配置,由定时器1的益处率决定
        TMOD = 0x20;//0010 0000 = 0x20,定时器1设置为工作方式2,8位自动装载的定时器
        TH1 = 0xF4;//初值
        TL1 = 0xF4;//波特率4800
        ET1 = 1;//定时器1允许分开关
        TR1 = 1;//启动定时器
    
        
        //设置串口工作方式
        SCON = 0x50;//等同于TMOD,方式一,允许接收 0101 0000
        //PCON = 0x00;
        //TI = 0;发送中断标志位
        //RI = 0;接收中断标志位
        ES = 1;//IE寄存器第四位,串口中断允许位
        EA = 1;//外部中断总开关
        while(1);
    }
    
    void button() interrupt 2 //2为中断号,
    { 
        //当发生中断时LED灯从灭到亮
        LED = ~LED;//中断一次
        for(j=0;j<33000;j++);//延时,让亮一段时间
        LED = ~LED;//再灭
        i++;
        SBUF = duan[i];//依次把数组的数字送到SBUF
        if(i == 9)//判断,i=9时就回到0,依次循环
            i = 0;
        /*
        这些是每中断一次就让数码管从0到9展现
        for(i=0;i<=9;i++)
        {
            SBUF = duan[i];//把数据发送到串口
            for(j=0;j<30000;j++);
        }
        */    
    }
    #include <reg52.h>
    #define OUT P1//把串口接收的数据发送到P1端口
    /*
    //步骤一:串口配置
    //步骤二:波特率配置
    //步骤三:写数据
    */
    void main()
    {
        //步骤一:波特率配置,由定时器1的益处率决定
        TMOD = 0x20;//0010 0000 = 0x20,定时器1设置为工作方式2,8位自动装载的定时器
        TH1 = 0xF4;//初值
        TL1 = 0xF4;//波特率4800
        ET1 = 1;//定时器1允许分开关
        TR1 = 1;//启动定时器
    
        
        //设置串口工作方式
        SCON = 0x50;//等同于TMOD,方式一,允许接收 0101 0000
        PCON = 0x00;
        TI = 0;//发送中断标志位,在方式0中,当串口发送完8位数据时,由硬件配置1,表明发送中断有请求;注意:该位必须由软件来清0
        RI = 0;//接收中断标志位,同上
        ES = 1;//IE寄存器第四位,串口中断允许位
        EA = 1;//外部中断总开关
        while(1);
    }
    
    void receive() interrupt 4 //4是串口中断号
    {
        EA = 0;//关闭中断总开关,防止有其他中断发生进来
        OUT = SBUF;//把串口接收的数据发送到P1端口
        RI = 0;//RI是接受中断标志位,执行中断后要自动清0
        EA = 1;
    }

  • 相关阅读:
    spoj 694 求一个字符串中不同子串的个数
    Qt for Android 开发大坑
    HDUOJ A Mathematical Curiosity 1017
    Node.js开发入门—HelloWorld再分析
    GTK入门学习:布局容器之固定布局
    彻底领悟javascript中的exec与match方法
    JQuery中attr属性和jQuery.data()学习笔记
    正则表达式-验证带千分号的,带任意位小数的数字类型
    JQuery EasyUI 动态改变表单项的验证守则
    JavaScript计算两个日期的时间差
  • 原文地址:https://www.cnblogs.com/kinson/p/6913763.html
Copyright © 2011-2022 走看看