AT89C51雙機(jī)通信C程序
- /***********************************************
- 文件名:8051串口發(fā)送
- 描 述:串口發(fā)送函數(shù) void Uart_sent(char uart_ch)
- 握手協(xié)議,主機(jī)發(fā)送AA,收到BB
- 時 間:2011年3月1日
- 【 】:羅志勇
- ************************************************/
- #include
- voiduart_init(void)// X = 256 - f*2(SMOD+1)/384*BAUD
- {
- SCON=0x50;//REN=1允許串行接受狀態(tài),串口工作模式1
- TMOD|=0x20;//定時器工作方式2
- PCON|=0x80;
- //TH1 = 0xFD; //baud*2 /* reload value 19200、數(shù)據(jù)位8、停止位1。效驗(yàn)位無 (11.0592)
- TH1=0xF3;// //baud*2 /* 波特率4800、數(shù)據(jù)位8、停止位1。效驗(yàn)位無 (12M)
- TL1=0xF3;
- TR1=1;
- }
- voidUart_Send(charuart_chm)//發(fā)送字符
- {
- TI=0;
- SBUF=uart_chm;
- while(TI==0);// 等特數(shù)據(jù)傳送(TI發(fā)送中斷標(biāo)志)
- TI=0;// 清除數(shù)據(jù)傳送標(biāo)志
- }
- voidUart_sent(charuart_ch)
- {
- /*握手程序(主機(jī)發(fā)送AA,從機(jī)回答B(yǎng)B)*/
- do{
- SBUF=0xAA;//發(fā)送聯(lián)絡(luò)信號
- while(TI==0);
- TI=0;//清除發(fā)送標(biāo)志
- while(RI==0);//等待回答
- RI=0;//清除接收標(biāo)志
- }while((SBUF^0xBB)!=0);//有誤,繼續(xù)聯(lián)絡(luò)
- Uart_Send(uart_ch); //發(fā)送字符函數(shù)
- }
- voidmain(void)
- {
- uart_init();//初始化串口
- while(1)
- {
- Uart_sent(P1);
- }
- }
- /***********************************************
- 文件名:8051串口接收(中斷)
- 描 述:使用串口中斷接收數(shù)據(jù)
- 握手協(xié)議,從機(jī)收到AA,發(fā)送BB
- 時 間:2011年3月1日
- 【 】:羅志勇
- ************************************************/
- #include
- charuart_chm;
- voiduart_init_r(void)// X = 256 - f*2(SMOD+1)/384*BAUD
- {
- SCON=0x50;//REN=1允許串行接受狀態(tài),串口工作模式1
- TMOD|=0x20;//定時器工作方式2
- PCON|=0x80;
- //TH1 = 0xFD; //baud*2 /* reload value 19200、數(shù)據(jù)位8、停止位1。效驗(yàn)位無 (11.0592)
- TH1=0xF3;// //baud*2 /* 波特率4800、數(shù)據(jù)位8、停止位1。效驗(yàn)位無 (12M)
- TL1=0xF3;
- TR1=1;
- ES=1;//開串口中斷
- EA=1;// 開總中斷
- }
- voidUart_receive(void)
- {
- while(RI==0);// 接收數(shù)據(jù)
- RI=0;//清除RI接受中斷標(biāo)志
- P1=SBUF;//讀出數(shù)據(jù)
- }
- voidmain(void)
- {
- uart_init_r();
- while(1)
- {
- }
- }
- voidint_Uart_resive(void)interrupt 4
- {
- /*握手程序(主機(jī)發(fā)來AA,從機(jī)回答B(yǎng)B) */
- do{
- while(RI==0);//等待回答
- RI=0;//清除接收標(biāo)志
- }while((SBUF^0xAA)!=0);//判斷是否可正常接收
- SBUF=0xBB;//發(fā)送聯(lián)絡(luò)信號
- while(TI==0);
- TI=0;
- Uart_receive();//接收函數(shù)
- }
評論