标题: 请教个单片机串口通信和定时器问题 [打印本页]

作者: jiesz185    时间: 2024-5-26 17:09
标题: 请教个单片机串口通信和定时器问题
本人小白一枚,如图这个题请问流水闪烁各1s用定时器这一步和两机串口通信怎么联系到一块,谢谢大佬,麻烦详细点谢谢(求求详细点代码)

51hei图片20240526170935.png (58.88 KB, 下载次数: 22)

51hei图片20240526170935.png

作者: jiesz185    时间: 2024-5-26 17:11
用的Proteus仿真的
作者: cy009    时间: 2024-5-27 10:42
U1发送按键标志码,U2接收标志码,定时器+流水灯。各个击破,难度不大。
作者: jiesz185    时间: 2024-5-27 14:31
cy009 发表于 2024-5-27 10:42
U1发送按键标志码,U2接收标志码,定时器+流水灯。各个击破,难度不大。

哥不会写了帮忙改一下呗谢谢

1.png (10.68 KB, 下载次数: 28)

1.png

2.jpg (60.32 KB, 下载次数: 26)

2.jpg

3.png (10.59 KB, 下载次数: 27)

3.png

作者: yzwzfyz    时间: 2024-5-27 16:22
这是两码事。
两机串行通讯,只要开启双方的串行中断,通讯时,约几ms中断一次,完成一个字节的交流。
流水闪烁中人用定时器,每间隔1S处理一下显示就行了。

作者: lkc8210    时间: 2024-5-27 23:16


作者: xiaobendan001    时间: 2024-5-28 07:23
就两个状态,用啥串口啊,两个脚各自表示一个状态就行了啊。把两个按键传递到P30和P31就行了吧
作者: 炸掉的电容    时间: 2024-5-30 17:04
第一个ic发送控制信息  0x01 0x02 第二个ic收到后执行 定时器里设定1秒标志位 用for循环
作者: cy009    时间: 2024-5-30 21:25
jiesz185 发表于 2024-5-27 14:31
哥不会写了帮忙改一下呗谢谢

流水灯程序不要放在U1,U1只负责发送按键信息,流水灯程序由U2负责。
作者: xianfajushi    时间: 2024-6-13 14:24
昨天写了一个非定时的串口实现运行如上图

1.gif (226.07 KB, 下载次数: 19)

1.gif

作者: xianfajushi    时间: 2024-6-13 14:27
void CKSZ()
{
        SCON=0X50;//串口模式1允许接收
        TMOD=0X21;//T1工作模式2
        PCON=0X00;//波特率不倍增
        TH1=TL1=0XFD;//波特率9600
        TI=RI=0;
        TR1=1;
        IE=0X90;//允许串口中断
        TH0+=0Xdc;//定时器赋初值,定时10ms触发中断,自动补偿方式
        TL0+=0X00;
        TR0=1; //启动定时器T0。
        ET0=1; //开启定时器
        EA=1; //全局中断开关
}
void ZhongDuan() interrupt 1
{
        ++Js;
        TH0+=0Xdc;
        TL0+=0X00;
}

————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/xianfajushi/article/details/139632525
作者: xianfajushi    时间: 2024-6-13 14:34
想要看就干脆看个明白从非定时转定时代码基本一样。
#include "reg52.h"
unsigned char code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0,64}; //共阴0~F消隐减号
sbit k1=P3^4;
sbit k2=P3^5;
sbit k3=P3^6;
sbit k4=P3^7;
bit k=0,kk=0;
void CKF(unsigned char C)
{//向串口发送数据
        SBUF=C;
        while(!TI);
        TI=0;
}
void CKS() interrupt 4
{//串口接收数据
        if(RI)
        {
                RI=0;
                if(SBUF=='S'){k=1;kk=0;}
                if(SBUF=='X'){k=0;kk=1;}
                if(SBUF=='L'){k=kk=0;}
        }
}
void CKSZ()
{
        SCON=0X50;//串口模式1允许接收
        TMOD=0X20;//T1工作模式2
        PCON=0X00;//波特率不倍增
        TH1=TL1=0XFD;//波特率9600
        TI=RI=0;
        TR1=1;
        IE=0X90;//允许串口中断
}
void main()
{//缘由https://ask.csdn.net/questions/8117223
        unsigned char Xd=0,ls=0,ys=0,sy=0,sm=0;
        CKSZ();
        while(1)
        {
                if(++ys==0)
                {
                                if(++sy==0)
                                {
                                        if(k)
                                        {
                                                if(ls)ls*=2;else ls=1;
                                                if(sm<9)++sm;else sm=0;
                                        }
                                        if(kk)
                                        {
                                                if(ls)ls/=2;else ls=128;
                                                if(sm)--sm;else sm=9;
                                        }
                                        if(k==kk)ls=k;
                                }
                        P1=ls;//流水灯
                        P2=smgduan[sm];//静态数码管
                }
                if(!k1&&!++Xd)
                {
                        CKF('S');
                        while(!k1);
                }
                if(!k2&&!++Xd)
                {
                        CKF('X');
                        while(!k2);
                }
                if(!k3&&!++Xd)
                {
                        CKF('L');
                        while(!k3);
                }
        }
}
https://blog.csdn.net/xianfajushi/article/details/139620581




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1