51单片机与PC机串行通信

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-06-29
单片机与PC机串行通讯

#include

#define uchar unsigned
uchar dat[]={0,1,2,3,4,5,6,7,8,9};
uchar num,times=0;
bit flag=0;
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
times++;
if(times>=20)
{
times=0;
flag=1;
}
}
main()
{
TMOD=0x21;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
SCON=0x40;
TH1=0xfd;
TL1=0xfd;
TR1=1;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(flag)
{
flag=0;
for(num=0;num<10;num++)
{
SBUF=dat[num];
while(!TI);
TI=0;
}
}
}
}

51机串口低电平位0.7V以下,高电平5V以下0.7V以上,PC机串口低电平-12V,高电平+12V,51机和PC机串口通讯要加电平转换IC
,通讯协议是一样的。

SERIALS:
; 加上关总中断
MOV A,#55H ;给PC机发送字符55H
MOV SBUF,A
JNB TI,$
CLR TI
; 这里加上,等待RI=1的语句
MOV A,SBUF ; 等待PC机发送字符AAH,接到AA后,给PC机发送字符K
CJNE A,#0AAH,$ ;这一句要换掉,不然,你接收的不是0aaH,你就死在这了
MOV A,#'K' ; 汇编中表示字符是这样吗?#'K' 请查证后再写
MOV SBUF,A
;为什么不加上等待发送结束?
CLR RI
reti
END

加上的:

1,为什么要加上关总中断?
答:就怕在中断程序中又触发其它优先级更高的中断。

2,CJNE A,#0AAH,$ ;这一句要换掉,不然,你接收的不是0aaH,你就死在这了 这我也不明白,为什么会死掉?要换的话换成什么?看我改过的程序,换成那样行不?
答:CJNE A,#0AAH,$ 判断A里,如果不是你要的值0aaH 那程序就一直在原处,并且,程序是不会响应串口再次发送的数据,换成你写的这样,就可以:一直到上位机发AAH,才往下执行。可以的。

3,MOV A,#'K' 这句话没问题的,就是把K的ASCII码发到A上
我按照你的意思,把程序改了下。不过调试的时候还是不行,麻烦你再看看

另外,我多嘴一句,你这个程序很容易就死在中断程序里,汇编我不常用,看看是可以。
做双方通信,你要确定以下内容:
1、电路是否正常工作
2、波特率、起始位、停止位是否一致
3、用上位机小软件时,是否选择是字符发送接收还是十六进制数发送接收。

串口中断程序中,不要加入太多程序,建议:
串口中断程序中,写,判断是接收中断还是发送中断,是发送中断,执行空语句,是接收中断,接收到什么置相应标志位,然后主程序中判断标志位,作相应的处理,可以理解吗?

28



怎么没有数据保护

  • 51单片机与pc通信,波特率是2400倍增的可以准确的发送和收回数据,其他波 ...
    答:串行通信的波特率一般都取2400的整数倍。PC机上串口的波特率也是按这个取值的。如下图,这是超级终端的波特率取值。而对于单片机,需要串口通信时,晶振频率通常取11.0592MHz,或者2倍。取这个值的目的就是计算出的串口通信的波特率误差几乎为0。而取其它频率就有误差。同时,晶振取这个值,波特率也要取240...
  • 51单片机与PC机之间的硬件如何串口连接?
    答:单片机和微机通信的电气标准要一致,微机串口一般是RS232电气标准,所以要加电平转换芯片,大多用MAX232,一般单片机实验板上都提供这样的标准串口。要分别编写上位机和下位机软件程序,单片机程序参照例程、教科书进行编写;上位机微机可采用VB,组态软件,Labview等软件编写,一般若是简单的通信,上位机程序编...
  • 51单片机怎么把多个传感器(比如3个)采集到的数据传给PC
    答:51单片机和PC机通讯一般是通过RS232串行通讯接口来实现的,多个传感器检测到的信号可以分别传送到PC机。1,传感器是数字量,那么每一个IO口都可以接受其输入,这样的话,少于8个的传感器可以组合成一个字节通过串口传给PC。2、传感器是模拟量,,那么需要进行AD转换,STC系列单片机大部分型号都带AD功能,不...
  • ...51单片机(AT89S51)之间串行通讯,51与PC机串行通讯,有何不同?_百度...
    答:另外pc机上串口的电平是232的。需要485转换器。如果说非要有差别,那就是pc机数据处理量大,可以通过通信来存储数据,监视单片机系统的状态,设置单片机系统的设备。一般而言都是pc机作为主机和多个单片机系统来通信。
  • ms51单片机与pc通信,中间需要什么部件,求原理图
    答:PC机一般使用8250或16550作为串行通讯的控制器,使用9针或25针的接插件将串行口的信号送出。该插座的信号定义如下:DB-25 DB-9 信号名称 方向 含 义 2 3 TXD 输出 数据发送端 3 2 RXD 输入 数据接收端 4 7 RTS 输出 请求发送(计算机要求发送数据)5 8 CTS 输入 清除发送(MODEM准备接收数...
  • 51单片机与PC机串行通信
    答:SERIALS:; 加上关总中断 MOV A,#55H ;给PC机发送字符55H MOV SBUF,A JNB TI,CLR TI ; 这里加上,等待RI=1的语句 MOV A,SBUF ; 等待PC机发送字符AAH,接到AA后,给PC机发送字符K CJNE A,#0AAH,$ ;这一句要换掉,不然,你接收的不是0aaH,你就死在这了 MOV A,#'K' ; 汇编中表示...
  • 怎样将51单片机实验板的按键信号传给PC啊。比如按一个键,51给PC发送...
    答:同学你好,我来帮你,你可以使用串口啊,比如:1:给你一个从PC发给单片机数据后,单片机再原样发给PC的参考代码:2:将51某一个(引脚)按键0,1状态,发给PC;1:::include <REG52.H> bit Flag;unsigned int R_D,S_D;unsigned char i;void usart_init(void); ///串口初始化 void ...
  • C51单片机如何从PC机串口接收字符串?
    答:ES = 1; //串行接口中断 EA = 1; //系统中断允许 TR0 = 1; //启动定时器0 TR1 = 1;...//串口接收中断处理程序 //发送采用查询处理 void SerialComm(void) interrupt 4 { _pReceive[_cReceive] = SBUF;_cReceive ++;if(_cReceive >= RecBuffSize) _cReceive = 0;RI =...
  • 51单片机实战:与计算机异步串行通信
    答:并口传输的例子: 《51单片机实战:液晶显示器のLCD1602》除此之外,串行传输分同步和异步。同步除了传输数据外,还要传输时钟信号,以保持双方同步。另一种,异步,就没这么麻烦了,也是本例中要讲到的,各自走各自的时钟就好,只要帧格式和波特率都商量好是一样的就好。电平之前在文章 《51单片机实战:...
  • PC机与单片机之间的串口通信的程序
    答:利用汇编语言编写PC机与单片机之间的串口通信的程序,以PC机作为上位机,单片机作为下位机。单片机为51系列,PC机具有RS-232-C接口,利用芯片MAX232实现电平转换。利用串口通信调试小... 利用汇编语言编写PC机与单片机之间的串口通信的程序,以PC机作为上位机,单片机作为下位机。单片机为51系列,PC机具有RS-232-C接口,利用...