迅维网

查看: 769|回复: 0
打印 上一主题 下一主题

单片机与电脑串口通信控制

[复制链接]
跳转到指定楼层
1#
发表于 2016-2-22 08:19:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式 来自: 山东青岛 来自 山东青岛

马上注册,获取阅读精华内容及下载权限

您需要 登录 才可以下载或查看,没有帐号?注册

x
/******单片机与电脑串口通信控制,附带遥控控制********/
/****** 单片机接收电脑串口发出的指令并执行相应动作。同时,也接收无线遥控发出的信号,并执行动作**************/
#include <REG51.H>
#define uchar unsigned char
#define uint unsigned int
uchar code SEG7[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管编码,预留    
uchar code ACT[4]={0xfe,0xfd,0xfb,0xf7};//数码管显示相关,预留
/*************************************************************/
uchar code as[]=" shoudao zhiling :\0";
uchar a=0x30,b;
sbit  D1=P2^3;
sbit  D2=P2^4;   
//****************************************************
void init(void)   
{

TMOD=0x20;   
TH1=0xfd;   
TL1=0xfd;   
SCON=0x50;   
TR1=1;   
ES=1;   
EA=1;
}   
//************************
void delay(uint k)  
{   
uint data i,j;  
for(i=0;i<k;i++)
{   
for(j=0;j<121;j++){;}  
}   
}
//**************************************
void main(void)   
{
uchar i,temp;
P2=0xff;
delay(3000);/******因为单片机上电后IO脚成高电平状态,所以延时一下,下面把需要的引脚清0******、
P1=0x00;
D1=0;//要控制的引脚,清0.防止上电动作后不能复原
D2=0;
init();  
    while(1)
    {
if(P1!=0x00)   //无线遥控接收脚状态扫描
{delay(10);
if(P1!=0x00)
    temp=P1;
}

switch(temp )//遥控接收处理
{
case 0x011=1;break;
case 0x021=0;break;
case 0x042=1;break;
case 0x08:D2=0;break;
default:break;
}  
switch(b)//串口接收数据处理

{
case 0x31:D1=1;break;
case 0x32:D1=0;break;
case 0x33:D2=1;break;
case 0x34:D2=0;break;
case 0x35:D1=0;D2=0;break;
default:break;
}
     delay(1);
  if(RI)  
  {
  RI=0;i=0;
  while(as[i]!='\0'){SBUF=as[i];while(!TI);TI=0;i++;} //串口发送数据
  SBUF=b;while(!TI);TI=0;   //回应串口指令内容
  EA=1;
  }
    }     
}  
//*****************************************
void serial_serve(void) interrupt 4 //串口中断
{     
a=SBUF;
b=a;  
EA=0;   
}  


您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表
附近
店铺
微信扫码查看附近店铺
维修
报价
扫码查看手机版报价
信号元
件查询
点位图 AI维修
助手



芯片搜索

快速回复