單片機和PC端的串口通信例程,有需要的同學可以參考,單片機為STC15W4K32S4系列
單片機源程序如下:
- /************* 功能說明 **************
- 串口1全雙工查詢方式收發通訊程序。先進行握手聯系,雙方準備好之后,
- 通過PC向MCU發送數據, MCU收到后通過串口把收到的數據原樣返回.
- 數據顯示保留
- ******************************************/
- #include "STC15F.H"
- u8 segcode ; //對應鍵碼顯示段碼
- u8 code dsply_code[]={ //標準字庫
- // 0 1 2 3 4 5 6 7 8 9 A B C D E F H
- 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x76};
- sbit P_HC595_SER = P4^0; //pin 14 SER data input
- sbit P_HC595_RCLK = P5^4; //pin 12 RCLk store (latch) clock
- sbit P_HC595_SRCLK = P4^3; //pin 11 SRCLK Shift data clock
- bit flag=0; //握手成功標志 =1握手成功,=0沒有成功
- void Send_595(u8 dat); //發送一個字節數據到595
- void mcu_ini(); //初始化單片機
- //========================================================================
- // 函數: void main(void)
- // 描述: 主函數。
-
- //========================================================================
- void main(void)
- { u8 dat_recivd;
- mcu_ini();
- //監控接收狀態
- while(!flag)
- { while(RI)
- { RI=0;
- if (SBUF==0x55) //是否握手信號
- { SBUF=0xAA; //是,則發送應答信號
- while(!TI); //等待發送完畢
- TI=0; //發送完畢,清除中斷位
- flag=1; //握手成功,跳出循環
- segcode=dsply_code[5];
- Send_595(0xFC);
- Send_595(segcode);
- P_HC595_RCLK = 0;
- P_HC595_RCLK = 1;
- }
- }
- }
- //握手成功之后,進入接收、發回狀態
- while(1)
- { if (RI)
- { RI=0; //清除中斷標志
- dat_recivd=SBUF; //接收
- SBUF=dat_recivd; //發回
- while (!TI);//等待發送完畢
- TI=0; //清除中斷標志
- //顯示收到的字符
- segcode=dsply_code[dat_recivd];
- Send_595(0x7f);
- Send_595(segcode);
- P_HC595_RCLK = 0;
- P_HC595_RCLK = 1;
- }
- }
- }
-
- void Send_595(u8 dat) // 向HC595發送一個字節函數/
- {
- u8 i;
- for(i=0; i<8; i++)
- {
- dat <<= 1;
- P_HC595_SER = CY;
- P_HC595_SRCLK = 0;
- P_HC595_SRCLK = 1;
- }
- }
- void mcu_ini()
- {//端口初始化
- P0M1 = 0; P0M0 = 0; //設置為準雙向口
- P1M1 = 0; P1M0 = 0; //設置為準雙向口
- P2M1 = 0; P2M0 = 0; //設置為準雙向口
- P3M1 = 0; P3M0 = 0; //設置為準雙向口
- P4M1 = 0; P4M0 = 0; //設置為準雙向口
- P5M1 = 0; P5M0 = 0; //設置為準雙向口
- P6M1 = 0; P6M0 = 0; //設置為準雙向口
- P7M1 = 0; P7M0 = 0; //設置為準雙向口
- //串口初始化: //9600bps@11.0592MHz
- TH2 = 0xFE;
- TL2 = 0xE0;
- AUXR=0x15; //串口1選擇定時器2為波特率發生器,啟動定時器2
- SCON=0x50; //8位數據,可變波特率
- TI=0;
- RI=0;
- //P_SW1 |= 0x80; //切換到P1.6 p1.7引腳上去
- P_SW1=0;
- }
復制代碼- /************* 功能說明 **************
- 串口1全雙工查詢方式收發通訊程序。先進行握手聯系,雙方準備好之后,
- 通過PC向MCU發送數據, MCU收到后通過串口把收到的數據原樣返回.
- 數據顯示保留
- ******************************************/
- #include "STC15Fxxxx.H"
- u8 segcode ; //對應鍵碼顯示段碼
- u8 code dsply_code[]={ //標準字庫
- // 0 1 2 3 4 5 6 7 8 9 A B C D E F H
- 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x76};
- sbit P_HC595_SER = P4^0; //pin 14 SER data input
- sbit P_HC595_RCLK = P5^4; //pin 12 RCLk store (latch) clock
- sbit P_HC595_SRCLK = P4^3; //pin 11 SRCLK Shift data clock
- bit flag=0; //握手成功標志 =1握手成功,=0沒有成功
- void Send_595(u8 dat); //發送一個字節數據到595
- void mcu_ini(); //初始化單片機
- //========================================================================
- // 函數: void main(void)
- // 描述: 主函數。
-
- //========================================================================
- void main(void)
- { u8 dat_recivd;
- mcu_ini();
- //監控接收狀態
- while(!flag)
- { while(RI)
- { RI=0;
- if (SBUF==0x55) //是否握手信號
- { SBUF=0xAA; //是,則發送應答信號
- while(!TI) //等待發送完畢
- {}
- TI=0; //發送完畢,清除中斷位
- flag=1; //握手成功,跳出循環
- segcode=dsply_code[5];
- Send_595(0xFC);
- Send_595(segcode);
- P_HC595_RCLK = 0;
- P_HC595_RCLK = 1;
- }
- }
- }
- //握手成功之后,進入接收、發回狀態
- while(1)
- { if (RI)
- { RI=0;
- dat_recivd=SBUF; //接收
- SBUF=dat_recivd; //發回
- while (!TI)
- {}//等待發送完畢
- TI=0;
- //顯示收到的字符
- segcode=dsply_code[dat_recivd];
- Send_595(0x7f);
- Send_595(segcode);
- P_HC595_RCLK = 0;
- P_HC595_RCLK = 1;
-
-
- }
- }
-
- }
-
- void Send_595(u8 dat) // 向HC595發送一個字節函數/
- {
- u8 i;
- for(i=0; i<8; i++)
- {
- dat <<= 1;
- P_HC595_SER = CY;
- P_HC595_SRCLK = 0;
- P_HC595_SRCLK = 1;
- }
- }
- void mcu_ini()
- {//端口初始化
- P0M1 = 0; P0M0 = 0; //設置為準雙向口
- P1M1 = 0; P1M0 = 0; //設置為準雙向口
- P2M1 = 0; P2M0 = 0; //設置為準雙向口
- P3M1 = 0; P3M0 = 0; //設置為準雙向口
- P4M1 = 0; P4M0 = 0; //設置為準雙向口
- P5M1 = 0; P5M0 = 0; //設置為準雙向口
- P6M1 = 0; P6M0 = 0; //設置為準雙向口
- P7M1 = 0; P7M0 = 0; //設置為準雙向口
- //串口初始化
- TH2 = 0xFE;
- TL2 = 0xE0;
- AUXR=0x15;
- SCON=0x50;
- TI=0;
- RI=0;
- //P_SW1 |= 0x80; //切換到P1.6 p1.7引腳上去
- P_SW1=0;
- }
復制代碼
所有資料51hei提供下載:
MCU2PC串口1.rar
(58.83 KB, 下載次數: 63)
2019-5-29 17:59 上傳
點擊文件名下載附件
單片機和CP端串口通信例程
|