简单串口应用(C源码)

这是一个简单的C语言串口应用程序,用于通过串口接收1-8的数字指令,控制MCU上的1-8个LED灯。代码在Protues 7.5环境下测试通过,使用虚拟串口SerialNull软件。当收到特定数字字符(如'1'-'8')时,程序会打开对应的LED,并在串口输出相应的提示信息。

很简单的一个串口应用的小程序。主要功能是利用上位机,通过串口发送特定指令1-8的数字,来操控MCU进行动作,完成开关LED灯的目的。1-8的数字对应1-8个LED灯。同一时间只有一个LED灯被打开。

此代码在protues7.5下测试通过。用到了串口助手,虚拟串口serialnull软件,并虚拟了COM3,COM4,MCU使用的是COM3,串口助手使用的是COM4。

 

重要:MCU不能直接输出中文。特定指令1-8为数字,发送给MCU后,保存为字符,并不是立即数。所以case 这里写法为'1' 需要单引号。否则得不到相关结果。

------------------------------------------------------------------

 

#include <reg51.h>

#include <stdio.h>

#include <intrins.h>

 

unsigned char flag; //标志位,用来判断是否进入RXD中断

unsigned char data_temp; //SBUF数据转存

 

void init() //串口,波特率初始化9600bps

{

TMOD=0x20;

TH1=0xfd;

TL1=0xfd;

TR1=1;

SCON=0x50;//初始化串口

EA=1;

ES=0;  //防止进入TXD中断,先关闭ES ,为给上位机发送提示信息做准备

TI=1;  

printf("please enter number:1-8,they are contrl 1-8 LED:/n");  //发送上位机提示信息,供用户选择。

while(!TI);

TI=0;

ES=1;

// P2=0xff;

}

 

void main()

{

init();

while(1)

{

if(flag==1)

{

ES=0; //关ES,防止TXD产生中断

flag=0;

TI=1;

switch(data_temp) //根据data_temp内容进行开Led操作。

{

case '1':

  P2=0xfe;   //开Led1

  printf("1# LEd is opened!/n");

  break;

 

  case '2':

  P2=0xfd;  //开led2

  printf("2# LEd is opened!/n");

  break;

 

  case '3':

  P2=0xfb;

  printf("3# LEd is opened!/n");

  break;

 

  case '4':

  P2=0xf7;

  printf("4# LEd is opened!/n");

  break;

 

  case '5':

  P2=0xef;

  printf("5# LEd is opened!/n");

  break;

 

  case '6':

  P2=0xdf;

  printf("6# LEd is opened!/n");

  break;

 

  case '7':

  P2=0xbf;

  printf("7# LEd is opened!/n");

  break;

 

  case '8':

  P2=0x7f;

  printf("8# LEd is opened!/n");

  break;

 

  default:

  printf("ERROR/n");

  break;

}

while(!TI);  //判断是否完成用户操作

TI=0;

ES=1; //开中断,允许RXD产生中断,接收用户命令。

}

}

 

}

 

void s_int() interrupt 4 //RXD中断处理。

{

RI=0;

data_temp=SBUF;

flag=1;

}

------------------------------------------------------------------------

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值