简单程序,可做改进,实用!
欢迎指教!
#include <reg51.h>
#include <string.h>
#include <intrins.h>
unsigned char ch;
bit read_flag= 0 ;
void delayms(unsigned int ms)
{
unsigned int i;
while(ms--)
{
for(i = 0; i< 250; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
void init_serialcom( void ) //串口通信初始设定
{
EA=1;
ES=1;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
/* SCON = 0x50 ; //UART为模式1,8位数据,允许接收
TMOD |= 0x20 ; //定时器1为模式2,8位自动重装
PCON |= 0x80 ; //SMOD=1;
TH1 = 0xFD ; //Baud:9600 fosc="11.0592"MHz
// TL1 = 0xfD;
IE |= 0x90 ; //Enable Serial Interrupt
TR1 = 1 ; // timer 1 run
TI=1; */
}
//向串口发送一个字符
void send_char_com( unsigned char ch)
{
SBUF=ch;
while (TI== 0);
TI= 0 ;
}
void sendStrings(char *dat)
{
while(*dat!='\0')
{
send_char_com(*dat++);
delayms(10);
}
}
//串口接收中断函数
void serial () interrupt 4 using 3
{
if (RI)
{
RI = 0 ;
ch=SBUF;
read_flag= 1 ; //就置位取数标志
}
}
main()
{
init_serialcom(); //初始化串口
delayms(10);
send_char_com( 0X11);
sendStrings("Hello,world!");
while ( 1 )
{
if (read_flag) //如果取数标志已置位,就将读到的数从串口发出
{
read_flag= 0 ; //取数标志清0
delayms(10);
send_char_com(0x22);
delayms(10);
P2=ch;
// Sel_SIM(ch) ;
read_flag=0;
}
}
}