Keil C51学习 7 串口控制

时间:2021-02-02 10:47:55   收藏:0   阅读:0

串口流水灯

发送HEX 01 可以控制第一盏灯点亮,再次发送可以控制熄灭

技术图片
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar i;

sbit D0=P1^0;
sbit D1=P1^1;
sbit D2=P1^2;
sbit D3=P1^3;
sbit D4=P1^4;
sbit D5=P1^5;
sbit D6=P1^6;
sbit D7=P1^7;
//波特率 19200
void init_uart(void)
{
    TMOD=0X20;
    TH1=0XFD;//19200
    TL1=0XFD;
    TR1=1;
    SCON=0X50;
    EA=1;
    ES=1;    
}

void main (void)
{
    init_uart();
    while(1)
    {
        while(!RI);
        RI=0;
        i=SBUF;
        switch(i)
        {
            case 0x01 :D0=~D0;break;
            case 0x02 :D1=~D1;break;
            case 0x03 :D2=~D2;break;
            case 0x04 :D3=~D3;break;
            case 0x05 :D4=~D4;break;
            case 0x06 :D5=~D5;break;
            case 0x07 :D6=~D6;break;
            case 0x08 :D7=~D7;break;
        }
    }

}
串口流水灯

技术图片

发送接收

技术图片
#include<reg52.h>
#define uchar unsigned char
uchar a,flag;
void main()
{
    TMOD=0x20;//设置定时器1为模式2
    TH1=0xfd;//装初值设定波特率19200
    TL1=0xfd;
    TR1=1;//启动定时器
    SM0=0;//串口通信模式设置
    SM1=1;
    REN=1;//串口允许接收数据
    EA=1;//开总中断
    ES=1;//开串中断
    PCON=0x80;
    while(1)
    {
        if(flag==1)//如果有数据则进入这个语句
        {
            ES=0;//进入发送数据时先关闭串行中断
            flag=0;
            SBUF=a;//将数据原样发回
            while(!TI);//等待数据发完
            TI=0;
            ES=1;//退出再开串行中断
        }
    }
}

void serial() interrupt 4//串行中断函数
{
    P1=SBUF;//将数据发送给P1口显示(测试用)
    a=SBUF;//收取数据
    flag=1;//标志置位
    RI=0;
}
发送接收

技术图片

 

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!