首页 > 酒店新闻 > 行业动态

AG百家乐- 体验真人娱乐的魅力|C51通信:自定义数据帧

发布时间:2025-10-17 11:25:58    次浏览

一、c51程序功能c51接收特定的数据帧,并执行数据帧定义的功能;二、数据帧自定义:1、定义设备开关量0x02(开始)0x4B(表示开关量)0x01(设备编号)0x10(启动)0x02(开始) 0x4B(表示开关量) 0x01(设备编号) 0x11(停止)2、定义模拟量0x02(开始) 0x53(表示模拟量) 0x01(设备编号) 0x03(数据例如0x03)三、代码/*程序说明:1、c51接收特定数据帧数据帧1:0x02(开始) 0x4B(表示开关量) 0x01(设备编号) 0x10(启动)数据帧2:0x02(开始) 0x4B(表示开关量) 0x01(设备编号) 0x11(停止)数据帧3:0x02(开始) 0x53(表示模拟量) 0x01(设备编号) 0x03(数据例如0x03)2、收到数据帧1,使P1.0=0;信号灯亮收到数据帧2,使P1.0=1;信号灯暗收到数据帧3,使P1=tab[buffer[3]];*/#include reg52.h#define uchar unsigned char//定义接收缓存#define COUNT 4uchar buffer[COUNT];//定义数码管转换表//共阳:uchar tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//记录接收字节数uchar point;//定义开始字符#define start 0x02sbit light=P1^0;//串口设置,void init();void process();//主函数void main(){point=0;init();while(1){//对接收到的数据处理process();}}//初始化工作,//T0、T1 设置为工作方式2,一个作波特率发生器,一个作定时器定时发送控制信号//串口设置,void init(){//----T1 波特率设置//T1,方式2,自动重载作波特率发生器//T0,方式0,16位计数器,作定时器,超时溢出(需要时设置)TMOD=0x21;//T1常数计算,baud=9600,f=11.0592MHZ //晶振-12分频-定时器输入,8位计数,定时器输出-2分频(默认SMOD=0,如SMOD=1不分频)-16分频-波特率//常数TC=2^8-f/12/2/16/baudTL1=0xfd;TH1=0xfd;//串口设置//串口方式1,允许接收SCON=0x50;//中断设置,串口开中断ES=1; //串口开中断//启动定时器,启动波特率TR1=1;//--T0 定时器设置 (根据需要设置)//常数设置,f=11.0592Mhz,定时t=0.0711秒,// TL0=0x00;// TH0=0x00;//开中断// ET0=1;//启动// TR0=1;//开总中断EA=1; //打开 总允许}//处理接收到的数据void process(){//收到数据帧1if( (buffer[1]==0x4B) (buffer[2]==0x01) (buffer[3]==0x10) )light=0;//收到数据帧2if( (buffer[1]==0x4B) (buffer[2]==0x01) (buffer[3]==0x11) )light=1;//收到数据帧3if( (buffer[1]==0x53) (buffer[2]==0x01) )// (buffer[3]==0x03) )P1=tab[buffer[3]];}//串口中断程序void communication() interrupt4{//定义变量uchar receive_buf;//收到数据if(RI){//中断标志清零RI=0;//接收数据receive_buf=SBUF;//if(point==0){//还未接收到数据,检测收到的数据是否“开始”字符if(receive_buf==start)point++;elsepoint=0;}else if(point0 pointCOUNT)//接收指定字节数量的数据buffer[point++]=receive_buf;else//接收到指定数据,point=0,准备重新接收数据point=0;}}//T0 中断程序,(根据需要编写)//TF0 由硬件置1,若开中断,进入中断程序,由硬件自动清0;/*void timer0() interrupt 1{}*/原文链接:http://www.eeworld.com.cn/mcu/article_2016101330439.html