单片机串口接收多字节问题
时间:10-02
整理:3721RD
点击:
我想通过串口发送一个1000,然后继电器延时工作1000ms,但是我的程序发送时间没作用,以下是我的程序
#include <reg52.h> //包含单片机寄存器的头文件
#define uchar unsigned char
#define uint unsigned int
/* 变量定义 -----------------------------------------------*/
sbit relay=P0^1; //定义P0^1位为继电器relay的控制位
uchar num,count;
uint nms;
uchar xms[1];
/* 函数申明 -----------------------------------------------*/
void delay(uint xms);
void main()
{
TMOD=0x20; //用定时器设置串口波特率 9600
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1; //串口初始化
SM0=0;
SM1=1;
EA=1; //开启总中断
ES=1;
relay=0;
while(1)
{
if(num==1) //判断是否有串口数据的传送
{
RI=0;
xms[0]<<=8;
nms=xms[0]+xms[1];
relay=1; //打开继电器
delay(nms);
relay=0; //关闭继电器
num=0;
}
}
}
void delay(uint nms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void ser() interrupt 4
{
static unsigned char count;//串口接收计数的变量
RI=0 ;
xms[count++]=SBUF;
if(count==1)
num=1 ;
}
#include <reg52.h> //包含单片机寄存器的头文件
#define uchar unsigned char
#define uint unsigned int
/* 变量定义 -----------------------------------------------*/
sbit relay=P0^1; //定义P0^1位为继电器relay的控制位
uchar num,count;
uint nms;
uchar xms[1];
/* 函数申明 -----------------------------------------------*/
void delay(uint xms);
void main()
{
TMOD=0x20; //用定时器设置串口波特率 9600
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1; //串口初始化
SM0=0;
SM1=1;
EA=1; //开启总中断
ES=1;
relay=0;
while(1)
{
if(num==1) //判断是否有串口数据的传送
{
RI=0;
xms[0]<<=8;
nms=xms[0]+xms[1];
relay=1; //打开继电器
delay(nms);
relay=0; //关闭继电器
num=0;
}
}
}
void delay(uint nms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void ser() interrupt 4
{
static unsigned char count;//串口接收计数的变量
RI=0 ;
xms[count++]=SBUF;
if(count==1)
num=1 ;
}
