串口通信 向51单片机发送16bit数据 但不知道错哪,请指点下
时间:10-02
整理:3721RD
点击:
#include <REG52.H>
#include <stdio.h>
sbit BEEP = P1^4;
unsigned char b,i,a[2],flag;
unsigned long int redate, sendate;
void uart_init(void)
{
SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1
TMOD|= 0x20; //定时器工作方式2
PCON|= 0x80;
//TH1 = 0xFD; //baud*2 /* reload value 19200、数据位8、停止位1。效验位无 (11.0592)
TH1 = 0xFA; // //baud*2 /* 波特率9600、数据位8、停止位1。效验位无 (12M)
TL1 = 0xFA;
TR1 = 1;
ES = 1; //开串口中断
EA = 1; // 开总中断
// IE = 0x0;
}
/********串口发送数据中断******************/
void ser(char c)
{
SBUF=c;
while(!TI);
TI=0;
}
void delay(unsigned int i)
{
unsigned char j;
for(i; i > 0; i--)
for(j = 110; j > 0; j--) ;
}
/****************************************************
串口中断程序
******************************************************/
void ser_int (void) interrupt 4 using 1
{
if(RI == 1) //RI接受中断标志
{
for(i=0;i<2;i++)
{
RI = 0; //清除RI接受中断标志
a[i] = SBUF;
P1=~a[i];
delay(1000);
ser(a[i]);
redate=(a[0]<<8)+a[1];
//RI = 0; //清除RI接受中断标志
} //SUBF接受/发送缓冲器
/* for(i=2;i>0;i--)
{
//ser(a[i]);
a[i]=0;
}*/
flag=1;
}
}
void main (void)
{
uart_init();
while(1)
{
switch(redate)
{
case 0x0100: P1=0x01;break;
case 0x0200: P1=0x03;break;
case 0x0300: P1=0x07;break;
case 0x0400: P1=0x0f;break;
case 0x0101: P1=0xff; break;
case 0x0203: P1=0x88;break;
case 0x0fe1 : P1=0xaa;break;
}
}
}
#include <stdio.h>
sbit BEEP = P1^4;
unsigned char b,i,a[2],flag;
unsigned long int redate, sendate;
void uart_init(void)
{
SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1
TMOD|= 0x20; //定时器工作方式2
PCON|= 0x80;
//TH1 = 0xFD; //baud*2 /* reload value 19200、数据位8、停止位1。效验位无 (11.0592)
TH1 = 0xFA; // //baud*2 /* 波特率9600、数据位8、停止位1。效验位无 (12M)
TL1 = 0xFA;
TR1 = 1;
ES = 1; //开串口中断
EA = 1; // 开总中断
// IE = 0x0;
}
/********串口发送数据中断******************/
void ser(char c)
{
SBUF=c;
while(!TI);
TI=0;
}
void delay(unsigned int i)
{
unsigned char j;
for(i; i > 0; i--)
for(j = 110; j > 0; j--) ;
}
/****************************************************
串口中断程序
******************************************************/
void ser_int (void) interrupt 4 using 1
{
if(RI == 1) //RI接受中断标志
{
for(i=0;i<2;i++)
{
RI = 0; //清除RI接受中断标志
a[i] = SBUF;
P1=~a[i];
delay(1000);
ser(a[i]);
redate=(a[0]<<8)+a[1];
//RI = 0; //清除RI接受中断标志
} //SUBF接受/发送缓冲器
/* for(i=2;i>0;i--)
{
//ser(a[i]);
a[i]=0;
}*/
flag=1;
}
}
void main (void)
{
uart_init();
while(1)
{
switch(redate)
{
case 0x0100: P1=0x01;break;
case 0x0200: P1=0x03;break;
case 0x0300: P1=0x07;break;
case 0x0400: P1=0x0f;break;
case 0x0101: P1=0xff; break;
case 0x0203: P1=0x88;break;
case 0x0fe1 : P1=0xaa;break;
}
}
}