请教一个串行通信的问题。

2019-07-15 13:56发布

我要接收5个字节的数据,每个字节间隔20ms,一个字节8位,这部分该怎么写程序啊,C语言的。谁能给个C语言的程序啊,不胜感激。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
张*猛
2019-07-15 19:32
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define jingzhen     11059200UL             /*使用11.0592M晶体*/         
#define botelv   9600UL                         /*波特率定义为9600*/
uchar table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
sbit key=P3^1;
sbit flag=P3^3;   
uint count = 0, count_old = 0;
uint  qian,bai,shi,ge;

void delay(uint i)
{
        uint j,k;
        for(j=i;j>0;j--)
          for(k=114;k>0;k--);
}

void UART_init()
{
EA=0;                              //暂时关闭中断
TMOD&=0x0F;                        //定时器1模式控制在高4位
TMOD|=0x20;                        //定时器1工作在模式2,自动重装模式
SCON=0x50;                         //串口工作在模式1
TH1=256-jingzhen/(botelv*12*16);   //计算定时器重装值
TL1=256-jingzhen/(botelv*12*16);
PCON|=0x80;                       //串口波特率加倍
TR1=1;                            //启动定时器1
REN=1;                            //允许接收
EA=1;
// EX0=1;                             //允许中断
EX1=1;
// IT0=0;                                                                              
IT1=1;
}


void keyscan(void)
{
        if(flag == 0)
        {
                delay(1);
                if(flag == 1)
                {
                        delay(1);
                        if(flag == 1)
                                count++;
                }
        }
}

void Display_CountValue(void)
{
        count_old = count;
        qian=count/1000;
        bai=count%1000/100;
        shi=count%100/10;
        ge=count%10;

        SBUF=0x02;
        delay(100);       //ASCII[disbuf[3]];
        SBUF=0x01;
        delay(100);
        SBUF=0x04;
        delay(100);       //ASCII[disbuf[3]];
        SBUF=0xa1;
        delay(100);
        SBUF=table[qian];
        delay(100);       //ASCII[disbuf[3]];
        SBUF=table[bai];
        delay(100);
        SBUF=table[shi];
        delay(100);
        SBUF=table[ge];
        delay(100);
        SBUF=0x03;
        delay(100);
}

void main(void)
{
        UART_init();
        while(1)
        {
                keyScan();

                if(count != count_old)
                {
                        Display_CountValue();
                }                          
        }
}

//void int0() interrupt 0
//{
//  count=0;
//  //beep=0;
//}


           这是我最近写的一个项目的程序    RS232的   希望对你有帮助

一周热门 更多>