caoxiaolin 发表于 2020-11-19 11:18

51 单片机 串口通讯方式1

/*
        2020年11月19日10:37:04
       
        功能:
                串口方式1 波特率 9600 @11.0592
                采用中断方式
               
                接收一个字符或者发送一个字符
               
                可以在此基础上 传输字符串
               
                接收字符 或者 发送 字符两不误
*/
#include <reg52.h>

void init();

char rec_buff = '\0'; //接收缓存
char sen_buff = '\0'; //发送缓存

void main()
{
       
        init();
       
        sen_buff = 'k'; //上电 发送一个 k
        SBUF = sen_buff;
        //sen_buff = '\0'; //发送内容 清空 写在中断里面了 也可以不再中断清空 操作完后再清空
       
       
        while(1)
        {
                sen_buff = rec_buff; //不断检测 当接收中断之后 rec_buff 将不再是'\0' 进入下面的控制中
               
                if(sen_buff)
                {
                        switch(sen_buff)
                        {
                                case '1':
                                        P1 = 0xFE;
                                        break;
                                case '2':
                                        P1 = 0xFC;
                                        break;
                                case '3':
                                        P1 = 0xF8;
                                        break;
                        }
                       
                        SBUF = '@'; //接收到之后返回一个@ 可自行修改
                        //sen_buff = '\0';
                        rec_buff = '\0'; //防止不断发送 , 发送之后清空接收到的内容 如果想保留可以 在整个变量
                }
               
                /*
                if(sen_buff != '\0')
                {
                       
                        SBUF = sen_buff;
                        sen_buff = '\0';
                        rec_buff = '\0';
                }
                */
               
        }
}
void init()
{
        //设置 定时器 TMOD
        TMOD = 0x20;
        TH1 = 0xFD;
        TL1= 0xFD;
       
        //设置SCON
        SM0 = 0;
        SM1 = 1;
        SM2 = 1; //串口方式1 当确实收到 停止位 REN才置1
       
        //设置中断 IE
        EA = 1;
        ES = 1;
       
        //开启定时器 允许接收数据 TMOD SCON
        TR1 = 1;
        REN = 1;
}

void ser() interrupt 4 //串行口中断
{
        // 判断是 接收还是发送引起的中断
        if(RI == 1)
        {
                RI = 0;
                rec_buff = SBUF; //将接收到的数据保存在 rec_buff中
        }
        if(TI == 1)
        {
                TI = 0;
                sen_buff = '\0'; //将发送的数据清空
        }
       
}





wangpaishi 发表于 2021-3-17 08:10

四年前,自己用51单片机+纸币验证器+继电器+改造饭卡出纳机+红外计数传感模块,开发了一个饭卡自助充值机,对于奇偶校验,由于默认不支持,自己自行多发数据实现了校验,觉得自己棒棒哒:lol

sundeheng 发表于 2020-11-19 12:18

stc89c51?上学时还用这个做过幻灯片

暮光绮子 发表于 2020-11-19 12:24

支持一下,刚入门学习

qq734928657 发表于 2020-11-19 12:39

学习了    谢谢            

isver2 发表于 2020-11-19 12:56

好久没看过了

zxco9999 发表于 2020-11-19 12:58

:Dweeqw 51入门

chendaxia666 发表于 2020-11-19 13:29

很久没玩过单板了

YouthGT 发表于 2020-11-19 14:56

最近学习了

masker_k 发表于 2020-11-19 15:06

突然发现那些用单片机做流水灯的日子,已经离我过去很久了

ZZGS-KIWI 发表于 2020-11-19 15:09

学习了,多谢
页: [1] 2
查看完整版本: 51 单片机 串口通讯方式1