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();//接收函數
- }
評論