常用的方法有:
接收数据时,使用“中断方式”,清除 RI 后,用一个变量通知主函数,收到新数据。
发送数据时,也用“中断方式”,清除 TI 后,用另一个变量通知主函数,数据发送完毕。
这样一来,收、发两者基本一致,编写程序也很规范、易懂。
更重要的是,主函数中,不用在那儿死等发送完毕,可以有更多的时间查看其它的标志。
PC与单片机串口通信的程序,要求如下:
1、如果在电脑上发送以$开始的字符串,则将整个字符串原样返回(字符串长度不是固定的)。
2、如果接收到1,则将P00置高电平,接收到0,P10置低电平。(用来控制一个LED)
单片机是STC89C52RC/晶振11.0592/波特率要求是9600或4800。
注意:调试软件我选择“串口猎人”,串口猎人中选择“字符格式发送” 。当然STC-ISP也是可以的
*********************************************************************************/
#include <reg52.h>
sbit LED=P0^0;
unsignedcharUART_buff;
bit New_rec = 0, Send_ed = 1, Money = 0;
void main ()
{
SCON = 0x50; //串口方式1, 10位UART(一个起始位“0”八个数据位一个停止位“1”), 允许接收.
TMOD = 0x20; //T1方式2
TH1 = 0xFD; //装入自动重加载的处置,9600bps@11.0592MHz
TL1 = 0xFD; //装入初值
TR1 = 1; //启动定时器T1
ES = 1; //开串口中断,但不开定时器中断,不允许定时器中断
EA = 1;
while(Money == 0); //等着交费,呵呵,等着接收$.
while(1)
{
if ((New_rec == 1) && (Send_ed == 1))
{ //如果收到新数据及发送完毕
SBUF = UART_buff; //那就发送.
New_rec = 0;
Send_ed = 0;
}
}
}
//----------------------------------------------
void ser_int (void) interrupt 4
{
if(RI == 1) //如果收到.
{
RI = 0; //清除标志.
New_rec = 1;
UART_buff = SBUF; //接收.
if(UART_buff == ‘1‘) LED = 1;
if(UART_buff == ‘0‘) LED = 0;
if(UART_buff == ‘$‘) Money = 1;
}
else //如果送毕.
{
TI = 0; //清除标志.
Send_ed = 1;
}
}
IT软件开发精英承接上位机软件开发,承接物联网软件开发,承接嵌入式软件开发,承接工控软件开发,承接网站开发,承接办公软件开发。
承接软件开发项目,IT精英承接上位机软件开发,承接物联网软件开发,承接嵌入式软件开发,承接网站开发,承接办公软件开发,
承接zigbee软件开发,承接工控软件开发。
联系电话:15652887489 QQ: 2303614459 Email:vip8089@qq.com
承接VB,C++,C#,Java,android,ios等各种BS或CS软件开发服务,拥有众多的成功案例。对老客户的小项目可以免费或适当收取部分费用进行开发。
精英团队 品质保证 软件开发 中关村 价格合理
我们的RS232-RS485转换器 RS485中继器,传输距离能达到3000米以上(三公里以上)
RS232/RS485--光纤转换器,传输20公里,速率0到2000kbps (0到2000000bps)
济南伦渠自动化公司专业生产1:各种PLC编程电缆 人机编程电缆
下载线 西门子MPI编程电缆 三菱编程电缆 TCP转换器 以太网转换器
2:专业生产rs232-rs485/422/can/lon/光纤/以太网转换器 隔离器 中继器 远程驱动器
串口扩展器 串口服务器 光纤 交换机 RS485转换器 协议转换器 接口转换器 串口转换器
3:光纤收发器 光纤转换器 光端机 光缆光纤MODEM 视频光端机
温湿度传感器,可以设定通讯地址0-255和波特率1200-19200bps;
可与组态软件 PLC等通讯联网
9:豪克能量焊接应力消除设备 冲击枪 振动时效 增强疲劳强度
手机13o75348421 座机0531-88348421 网站http://www.fucan.com