求一51系列单片机C程序,最好是简单易懂,有注释。 程序目的:通过串口控制单片机,如发送0x00 0

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-06-25
求一个C51单片机用串口发送代码的程序简单例子,比如发送代码是06 01前面是ID后面是控制码。请大神指点。

#includemain(){TMOD=0x20TH1=0xfd;TL1=0xfd;TR1=1;SBUF=0x06;while(TI==0);TI=0;SBUF=0x01;while(TI==0);TI=0;while(1);}

这个简单,不管用什么通信协议,都可以完成,再说了,你所谓采集信息,那些玩意也是用PLC完成的,单片机根本不考虑,你这里,单片机只完成一个简单的数据双向传递功能,没什么难度。

//11.0592MHz
//9600波特率

#include <reg51.h>
void InitUART(void)//串口初始化
{
TMOD = 0x20;//定时器方式2 8位自动重装
SCON = 0x50;//定时器1为串口提供时钟
TH1 = 0xFD;//初值9600bps
TL1 = TH1;
PCON = 0x00;//波特率不加倍(如果为0x80代表波特率加倍)
EA = 1;//打开总中断
ES = 1;//打开串口中断
TR1 = 1;//定时器1开始计数
}
void SendOneByte(unsigned char c)//发送字节
{
SBUF = c; //赋值给SBUF启动发送
while(!TI); //等待发送完成
TI = 0; //清零发送完成标志位
}
void SendString(unsigned char *p)//发送字符串
{
while(*p) //如果p的内容不等于0
{
SendOneByte(*p++); //从串口发送一字节数据,并且p的地址自增1
}
}
void main(void)//主函数
{
InitUART();//初始化串口
while(1); //死循环(等待串口中断)
}
void UARTInterrupt(void) interrupt 4//串口中断
{
unsigned char temp;//定义临时变量
static unsigned char cont; //定义静态变量(用于保存状态)
if(RI) //串口收到数据
{
RI = 0;//清零接收标志位
temp=SBUF;//获取收到的数据
if(!cont)//如果cont为0 (表示第一次接收数据)
{
if(temp<4)//收到的数据小于4(单片机只有P0-P3所以大于3的不做处理)
{
cont=1;//首先cont赋1
cont=cont<<temp;//进行移位 收到的数据=0代表cont=0x01;收到的数据=1代表cont=0x03;避开0表示收到第一次数据
}
else//如果大于4
{
SendString("选择端口错误!只能为P0-P3\r\n");//向电脑反馈信息 大于4提示选择端口错误
}
}
else//cont不为0代表已经收到第一次数据
{
switch(cont)//选择输出口
{
case 0x01://如果是0x01,P0口输出第二次数据
P0=temp;break;
case 0x02://如果是0x02,P1口输出第二次数据
P1=temp;break;
case 0x04://如果是0x04,P2口输出第二次数据
P2=temp;break;
case 0x08://如果是0x08,P3口输出第二次数据
P3=temp;break;
}
cont=0;//清零cont 准备下一次接收数据
}
}
else//如果不是接收到数据(发送数据完成中断)
TI = 0;//清零发送标志位
}

顺便帮你写个控制软件吧。

  • 一道51单片机的C语言程序,关于串口通讯的,很简单...
    答:ES=1; //重新使能串口中断 flag=0; //清除flag,为了等待下一次接收 } } } void serial() interrupt 4 //串口中断服务程序,优先级为4 { RI=0; //当接收完成之后RI被置一,发生串口中断,清标志位 a=SBUF; //读取收到的字符,并赋给变量a flag=1; //置接收完成标志...
  • 求一个51单片机C语言程序编程
    答:case 1 :P00=0;P03=1;SBUF='A';while(TI==0);TI=0;break;case 2 : P00=1;P03=0;SBUF='B';while(TI==0);TI=0;break;case 3 : P00=0;P03=0;SBUF='C';while(TI==0);TI=0;break;} } for(i=250;i>0;i--){;} //延时 } include<reg51.h> /*乙机*/ sbit ...
  • 求一份关于篮球计分器的51单片机C语言程序
    答:这是一个数码管显示的篮球计分程序,你可以参考一下:#include"reg52.h"#define u8 unsigned char#define u16 unsigned intsbit UP_1 = P1^1; //第一队加分键sbit DOWN_1 = P1^2; //第一队减分键sbit UP_2 = P1^3; //第二队加分键sbit DOWN_2 = P1^4; //第二队减分...
  • 求51单片机C语言编的简易密码锁程序
    答:首先得说明我这个可是自己原创手打的,但是没去仿真了,程序可能有错误,你自己修改下吧 include<reg52.h> typedef unsigned char uchar;typedef unsigned int uint;sbit key1=P0^0;sbit key2=P0^1;sbit key3=P0^2;sbit key4=P0^3;sbit wela=P2^0;//位锁存端 define SMG P1 sbit LED=P3^...
  • 51单片机 串口设计c语言程序简单设计
    答:第一题,已经测试成功:include <reg52.h> define uchar unsigned char define uint unsigned int uchar flag, a;sbit d = P0^0;void init(){ TMOD = 0x20; //设置定时器1为工作方式2 TH1 = 0xfd;TL1 = 0xfd;TR1 = 1; //开定时器1 REN = 1; //开串口通信.SM0 = 0; ...
  • 求一个正确的基于51单片机的函数信号发生器的C程序
    答:0x1e, 0x1c, 0x1a, 0x18, 0x16, 0x14, 0x12, 0x10,0xe, 0xc, 0xa, 0x8, 0x6, 0x4, 0x2, 0x00 },{// 矩形脉冲波代码 0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff,0xff,0xff, 0xff, 0x...
  • 求一个基于51单片机的C语言程序,要求从串口接收一组数据,然后将其通过...
    答:include <AT89X51.H>//单片机51头文件,存放着单片机的寄存器 unsigned char dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容 sbit gewei=P2^2; //个位选通定义 sbit shiwei=P2^3; //十位选通定义 unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07...
  • 求单片机51系列的计数器C语言程序,要求24进制,可进位
    答:include < intrins.h >sbit key = P2^0;const unsigned char LED7Code[]={ 0xC0, // 0 0xF9, // 1 0xA4, // 2 0xB0, // 3 0x99, // 4 0x92, // 5 0x82, // 6 0xF8, // 7 0x80, // 8 0x90, // 9 0x88, // A 0x83, // B 0xC6, // C 0xA1, // D...
  • C语言 51单片机 求程序
    答:sbit input = P3^2; //红外接收输入脚外部中断0 unsigned char m = 0 ; //计数参数 unsigned char t =60 ; //倒数计时参数 unsigned char i=0 ;void delay(unsigned char i){ unsigned char j,k;for(k=0;k<i;k++)for(j=0;j<255;j++);} void main(){ IT0=1; //下降...
  • 求一个51单片机定时闹钟程序。要C语言。能够调时间
    答:我来发一个C语言51单片机时钟程序,希望能帮到你 /* 程序功能:带定时闹铃时钟 */ /*---*/ include <AT89X51.H> /*包含器件配置文件*/ define uchar unsigned char define uint unsigned int char DATA_7SEG[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,};/*...