AT89C51双机通信C程序
- /***********************************************
- 文件名:8051串口发送
- 描 述:串口发送函数 void Uart_sent(char uart_ch)
- 握手协议,主机发送AA,收到BB
- 时 间:2011年3月1日
- 【 】:罗志勇
- ************************************************/
- #include
- voiduart_init(void)// X = 256 - f*2(SMOD+1)/384*BAUD
- {
- SCON=0x50;//REN=1允许串行接受状态,串口工作模式1
- TMOD|=0x20;//定时器工作方式2
- PCON|=0x80;
- //TH1 = 0xFD; //baud*2 /* reload value 19200、数据位8、停止位1。效验位无 (11.0592)
- TH1=0xF3;// //baud*2 /* 波特率4800、数据位8、停止位1。效验位无 (12M)
- TL1=0xF3;
- TR1=1;
- }
- voidUart_Send(charuart_chm)//发送字符
- {
- TI=0;
- SBUF=uart_chm;
- while(TI==0);// 等特数据传送(TI发送中断标志)
- TI=0;// 清除数据传送标志
- }
- voidUart_sent(charuart_ch)
- {
- /*握手程序(主机发送AA,从机回答BB)*/
- do{
- SBUF=0xAA;//发送联络信号
- while(TI==0);
- TI=0;//清除发送标志
- while(RI==0);//等待回答
- RI=0;//清除接收标志
- }while((SBUF^0xBB)!=0);//有误,继续联络
- Uart_Send(uart_ch); //发送字符函数
- }
- voidmain(void)
- {
- uart_init();//初始化串口
- while(1)
- {
- Uart_sent(P1);
- }
- }
- /***********************************************
- 文件名:8051串口接收(中断)
- 描 述:使用串口中断接收数据
- 握手协议,从机收到AA,发送BB
- 时 间:2011年3月1日
- 【 】:罗志勇
- ************************************************/
- #include
- charuart_chm;
- voiduart_init_r(void)// X = 256 - f*2(SMOD+1)/384*BAUD
- {
- SCON=0x50;//REN=1允许串行接受状态,串口工作模式1
- TMOD|=0x20;//定时器工作方式2
- PCON|=0x80;
- //TH1 = 0xFD; //baud*2 /* reload value 19200、数据位8、停止位1。效验位无 (11.0592)
- TH1=0xF3;// //baud*2 /* 波特率4800、数据位8、停止位1。效验位无 (12M)
- TL1=0xF3;
- TR1=1;
- ES=1;//开串口中断
- EA=1;// 开总中断
- }
- voidUart_receive(void)
- {
- while(RI==0);// 接收数据
- RI=0;//清除RI接受中断标志
- P1=SBUF;//读出数据
- }
- voidmain(void)
- {
- uart_init_r();
- while(1)
- {
- }
- }
- voidint_Uart_resive(void)interrupt 4
- {
- /*握手程序(主机发来AA,从机回答BB) */
- do{
- while(RI==0);//等待回答
- RI=0;//清除接收标志
- }while((SBUF^0xAA)!=0);//判断是否可正常接收
- SBUF=0xBB;//发送联络信号
- while(TI==0);
- TI=0;
- Uart_receive();//接收函数
- }
评论