|  | 
 
| #i nclude "reg51_STC.H" #define uchar unsigned char
 #define uint unsigned int
 
 //--------------------------------------------------------------------------
 //函数名称:????? UART_Init()
 //函数功能:????? 串口初始化函数,在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s
 //其他说明:????? 串口接收中断允许,发送中断禁止
 //--------------------------------------------------------------------------
 
 void UART_Init(void)
 {
 SCON = 0x50 ; //SCON: serail mode 1, 8-bit UART, enable ucvr?
 TMOD |= 0x20 ; //TMOD: timer 1, mode 2, 8-bit reload?
 PCON |= 0x80 ; //SMOD=1;?
 TH1 = 0xFA ; //Baud:9600 fosc="11".0592MHz?
 ES=1;
 TR1 = 1 ;??? // timer 1 run?
 EA=1;
 }
 
 
 //--------------------------------------------------------------------------
 //函数名称:????? main(void)
 //函数功能:????? 主函数
 //其他说明:????? 无
 //--------------------------------------------------------------------------
 
 void main(void)
 {
 UART_Init();
 while(1);
 }
 
 
 //--------------------------------------------------------------------------
 //函数名称:????? Uart_SendData()
 //函数功能:????? 串口发送一个字节的数据
 //其他说明:????? 此程序供中断调用
 //--------------------------------------------------------------------------
 
 void Uart_SendData(uchar dat)
 {
 SBUF=dat; //写SBUF,开始发送
 while(TI==0); //等待发送
 TI="0";?? //清发送标志位?
 }
 
 
 //--------------------------------------------------------------------------
 //函数名称:????? INT_UartRcv()
 //函数功能:????? 串口接收中断函数
 //其他说明:????? 无
 //--------------------------------------------------------------------------
 
 void INT_UartRcv(void) interrupt 4
 {
 uchar Rcv;
 if(RI)
 {
 RI=0;???? //
 Rcv=SBUF;
 Uart_SendData(Rcv); //返回接收数据,可以改为其他函数?
 }
 }
 NO。2
 #i nclude
 #i nclude
 #define INBUF_LEN 4 //数据长度?
 unsigned char inbuf1[INBUF_LEN];?
 unsigned char checksum,count3;?
 bit read_flag= 0 ;?
 void init_serialcomm( void )?
 {?
 ?SCON = 0x50 ; //SCON: serail mode 1, 8-bit UART, enable ucvr?
 ?TMOD |= 0x20 ; //TMOD: timer 1, mode 2, 8-bit reload?
 ?PCON |= 0x80 ; //SMOD=1;?
 ?TH1 = 0xF4 ; //Baud:4800 fosc=11.0592MHz?
 ?IE |= 0x90 ; //Enable Serial Interrupt?
 ?TR1 = 1 ; // timer 1 run?
 ??EA=1;
 }
 //向串口发送一个字符?
 
 
 
 
 void send_char_com( unsigned char ch)?
 {?
 ?SBUF=ch;?
 ?while (TI== 0 );?
 ?TI= 0 ;?
 }
 //向串口发送一个字符串,strlen为该字符串长度?
 void send_string_com( unsigned char *str, unsigned int strlen)?
 {?
 ?unsigned int k= 0 ;?
 ?do?
 ?{?
 ??send_char_com(*(str + k));?
 ??k++;?
 ?} while (k
 }
 
 //串口接收中断函数?
 void serial () interrupt 4 using 3?
 {?
 ?if (RI)?
 ?{?
 ??unsigned char ch;?
 ??RI = 0 ;?
 ??ch=SBUF;?
 ??if (ch> 127 )?
 ?{?
 ??count3= 0 ;?
 ??inbuf1[count3]=ch;?
 ??checksum= ch- 128 ;?
 ?}?
 ??else?
 ??{?
 ??count3++;?
 ??inbuf1[count3]=ch;?
 ??checksum ^= ch;?
 ??if ( (count3==(INBUF_LEN- 1 )) && (!checksum) )?
 ??{?
 ??read_flag= 1 ; //如果串口接收的数据达到INBUF_LEN个,且校验没错,?
 ??//就置位取数标志?
 ??}?
 ?}?
 }?
 }
 
 main()?
 {?
 ?init_serialcomm(); //初始化串口?
 ?while ( 1 )?
 ?{?
 ??if (read_flag) //如果取数标志已置位,就将读到的数从串口发出?
 ??{?
 ??read_flag= 0 ; //取数标志清0?
 ??send_string_com(inbuf1,INBUF_LEN);?
 ??} ???????
 ?}
 }
 
 
 
 
 | 
 |