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

//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;//清零发送标志位
}

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

求一个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完成的,单片机根本不考虑,你这里,单片机只完成一个简单的数据双向传递功能,没什么难度。

#19263935031# 求一80C51单片机的C程序 - ******
#魏李# #include unsigned char flag,num,keyn;sbit KEY=P3^0;sbit LED1=P3^4;sbit LED2=P3^5void delay(unsigned int a){ unsigned int i,j; for(i=0;i<125;...

#19263935031# 求一个简单的51单片机c语言程序设计~ - ******
#魏李# 机的外部结构 :1.DIP40 双列直插;2.P0 ,P1 ,P2 ,P3 四个8 位准双向 I/O 引脚;(作为 I/O 输入时,要先输出高电平)3.电源 VCC ( PIN40 )和地线 GND ( PIN20 );4.高电平复位 RESET ( PIN9 );(10uF 电容接 VCC 与 RESET ,即可实现上电复位...

#19263935031# 一道51单片机的C语言程序,关于串口通讯的,很简单...... - ******
#魏李# #include<reg52.h> //增强型52寄存器的定义 #define uchar unsigned char //用uchar代替unsigned char #define uint unsigned int //用uint代替unsigned int unsigned char flag,a,i; //定义变量flag,a,i uchar code table[]="I receive,thanks"; //定义一个...

#19263935031# 急求简单51单片机控制电路C语言程序 ******
#魏李# 【2011-3-8已更新,有结果吱一下】 砖头如下: #inlcude &lt;reg51.h&gt; sbit OUT=P2^0; sbit Key=P3^3; #define DELAYCONST 50000// #define DELAYCONST2 20//简单的定时参数设定. void Delay(char j) { unsigned int k,l; for(j=0;j&lt;60;j++) ...

#19263935031# 求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=...

#19263935031# 用c语言编写阶梯波(51单片机的),求这个程序,各位高手帮帮忙!谢谢! - ******
#魏李# #你的wave接到哪个io上就可以了 int i,wave = 0,timeout = 1000; for(;;){ wave = wave == 0? 1:0; for(i = 0; i; }

#19263935031# 急求51单片机计数器的C程序!!! - ******
#魏李# #include "reg51.h" unsigned char time; void main() { EX0=1; //开外部中断 IT0=1;//设置边沿触发 EA=1; //开放全局中断 while(1) { P0=~time; // 通过P0口的LED显示出计数值(二进制形式) } } void INT_0() interrupt 0 { while(INT0==0); time++;//每按下一次计数加1.}

#19263935031# 求一份51单片机控制直流电动机的c或者汇编的程序,最好能配有原理图,感激不尽 - ******
#魏李# //直流电机正反转#include<reg52.h> sbit Key_UP=P3^2; //正转按键 对应实验板上的K1 sbit Key_DOWN=P3^3;//反转按键 对应实验板上的K2 sbit Key_STOP=P3^4;//停止键 对应实验板上的K3 sbit ZZ=P1^0;//控制端 sbit FZ=P1^1;//控制端...

#19263935031# 求解 51单片机C语言程序 - ******
#魏李# void int1() interrupt 0 //这里是0,因为你好像用的是外部中断0,而不是定时器中断0 { KEY1=1; P0 = table1[10];Delay(10); }

#19263935031# 求一份51单片机1602时钟的c程序.最好不用到ds1302.从通电计时就可以了,不用显示时时时间 - ******
#魏李# #include #define uint unsigned int#define uchar unsigned char#define lcd1602 P2sbit rs=P3^0;sbit rw=...

  • 求一51系列单片机C程序,最好是简单易懂,有注释。 程序目的:通过串口...
  • 答: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); //等待发...

  • 很简的51单片机C语言流水灯程序
  • 答:1、51单片机C语言实现循环8个流水灯左移三次,后右移三次。例程:include<reg51.h> //51单片机头文件#include <intrins.h> //包含有左右循环移位子函数的库#define uint unsigned int //宏定义#define uchar unsigned char //宏定义sbit beep=P2^3;void delay(uint z) //延时函数,z...

  • 求51单片机的C程序,就是键盘控制这个一位七段数码管,按键按1按下数码管...
  • 答:int key1,key,disbuf;// 此表为 LED 的字模 0 1 2 3 4 5 6 7 8 9 a b c d e f unsigned char code LED7Code[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};unsigned char ledx[8];bit s0,s1;void delay(uchar z...

  • 求一段简单的51单片机c程序
  • 答:P3=0xff; //初始化端口 while(1) //无限循环 //假定 数码管从左到右依次是DS0-DS7 { P3=0xfe; //P3.0引脚输出低电平,DS0点亮 P0=0xf9; //数字1的段码 delay();P3=0xfd; //P3.1引脚输出低电平,DS1点亮 P0=0xa4; //数字2的段码 delay();P3=0xfb; ...

  • 简单的51单片机键盘C程序
  • 答:if((keyvalue|=0xfb)!=0xff)这一判断,其中的“keyvalue|=0xfb”就把keyvalue变成0xff了,后面的判断条件自然不会满足。把这里的一些等于号再去掉试试看。另外,建议你对于按键扫描程序使用switch case 语句,这样条理更清晰。/*按键获取程序*/ unsigned int Key(){ uchar keyvalue;keyvalue=P3;...

  • 大家帮忙找一些51单片机的基本C语言程序例子,最好带说明,谢啦
  • 答:port_state=port_state>>1;flowlight=~port_state;} } 串口通信程序:主机程序:include <AT89X52.H> define NODE_ADDR 3 //目的节点地址 define COUNT 10 //发送缓冲区buffer大小 typedef unsigned char uchar;uchar buffer[COUNT]; //定义buffer int pt; //设置指针 main()///发...

  • 大神,求51单片机做简易计算器的那个c语言程序
  • 答:uchar d1=16,d2=16,d3=16,d4=16,d5=16;uchar f1=16,f2=16,f3=16,f4=16,f5=16,f6=16,f7=16,f8=16,f9=16,f10=16;uchar key,keyval,c,temp;void Delay1ms(uint i) //1ms延时程序 { uint j;for(;i>0;i--){ for(j=0;j<125;j++){;} } } void write_com(uchar com...

  • 急求简单51单片机控制电路C语言程序
  • 答:【2011-3-8已更新,有结果吱一下】砖头如下:inlcude <reg51.h> sbit OUT=P2^0;sbit Key=P3^3;define DELAYCONST 50000// define DELAYCONST2 20//简单的定时参数设定。void Delay(char j){ unsigned int k,l;for(j=0;j<60;j++)for(k=0;k<DELAYCONST2;k++)for(l=0;l<DELAYCO...

  • c51单片机c语言交通灯的程序
  • 答://主程序 void main(){ TMOD=0X01;TH0=0XD8;TL0=0XF0;EA=1;ET0=1;TR0=1;EX0=1;EX1=1;logo();P2=0Xc3;// 开始默认状态,东西绿灯,南北黄灯 sec_nb=sec_dx+5;while(1){ key(); //调用按键扫描程序 display(); //调用显示程序 Buzzer();} } //函数的定义部分 void key()...

  • 求一个51单片机C语言程序编程
  • 答:单片机甲、乙进行双机串行通信,甲机通过串口控制乙机LED闪烁(如下图所示,要求利用芯片MAX232),双方的晶振频率均为11.0592MHz(波特率为9600kb/s)要求:甲机按开关K1一次,发送字符“A”给乙机,点亮灯D1与D2;按开关K1两次,发送字符“B”给乙机,点亮灯D3与D4;按开关K1三次,发送字符“C...

    为传递更多家电数码信息,若有事情请联系
    数码大全网