单片机和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)
|