㈠ C51编程 串口通信,要求,在编写串行通信基本驱动函数的基础上,调用这些函数,

//发送机
#include<reg51.h>
#include<INTRINS.h>
#defineu16unsignedint
#defineu8unsignedchar

#defineUART_RX_SIZE10
u8uartRx_buf[UART_RX_SIZE];
u8uartRx_count=0;
u8uartRx_outtime=0;

voidUART_Init(){
SCON=0X50;
TMOD&=0x0F;
TMOD|=0x20;
TH1=TL1=0XFD;
ES=1;
EA=1;
TR1=1;
}
voidSend_byte(u8val){
SBUF=val;
while(!TI);
TI=0;
}
voidSend_Uart(u8*p,u8size){
while(size-->0){
Send_byte(*p);
p++;
}

}
voidUART_Protocol(){
if(uartRx_outtime>=10&&uartRx_count>=3){

}
}sbitl1=P1^4;
sbitl2=P1^5;
sbitl3=P1^6;
sbitl4=P1^7;

u8key(){
staticu8ms;
P1=0xf0;
if(P1!=0xf0){
if(ms<20)ms++;
if(ms==5){
u8a=0;
u8b;
for(b=0x01;b<0x10;b<<=1){
P1=~b;
if(!l1)break;a++;
if(!l2)break;a++;
if(!l3)break;a++;
if(!l4)break;a++;
}
returna;
}
}
else{
ms=0;
}
return0xff;
}

voidk(){
u8i=key();
if(i!=0xff){
u8buf[3]={0xAA,0x01};
buf[2]=i;
Send_Uart(&buf,3);
}
}
voidinit() //初始化函数
{TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
ET0=1;

}

voidmain()//主函数
{

init();
UART_Init();
TR0=1;
while(1){
UART_Protocol();
k();
}

}voidtimer0()interrupt1//定时器,实现倒计时
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;

if(++uartRx_outtime>=100){
uartRx_outtime=0;
uartRx_count=0;
}
}

voiart0()interrupt4
{
if(RI){
u8t=SBUF;RI=0;
uartRx_outtime=0;
if(uartRx_count<UART_RX_SIZE){
uartRx_buf[uartRx_count++]=t;
}
}
}
//接收机
#include<reg51.h>
#include<INTRINS.h>
#defineu16unsignedint
#defineu8unsignedchar

#defineUART_RX_SIZE10
u8uartRx_buf[UART_RX_SIZE];
u8uartRx_count=0;
u8uartRx_outtime=0;

voidUART_Init(){
SCON=0X50;
TMOD&=0x0F;
TMOD|=0x20;
TH1=TL1=0XFD;
ES=1;
EA=1;
TR1=1;
}
voidSend_byte(u8val){
SBUF=val;
while(!TI);
TI=0;
}
voidSend_Uart(u8*p,u8size){
while(size-->0){
Send_byte(*p);
p++;
}

}
u8ds[8];//数码管显示缓存
codeu8w[]={~0x01,~0x02,~0x04,~0x08,~0x10,~0x20,~0x40,~0x80,}; //位码
codeu8d[]={~0xc0,~0xf9,~0xa4,~0xb0,~0x99,~0x92,~0x82,~0xf8,~0x80,~0x90,
~0X88,~0X83,~0XC6,~0XA1,~0X86,~0X8E,~0XBF,~0xFF,
};//断码
voiddispaly(){//显示函数

staticu8a;
if(++a>=4)a=0;
P2=0xff;
P0=d[ds[a]];
P2=w[a];
}voidinit() //初始化函数
{TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
ET0=1;

}

voidUART_Protocol(){
if(uartRx_outtime>=10&&uartRx_count>=3){
ds[0]=ds[1];
ds[1]=ds[2];
ds[2]=ds[3];
ds[3]=uartRx_buf[2];
uartRx_count=0;
}
}

voidmain()//主函数
{
init();
UART_Init();
TR0=1;
while(1){
UART_Protocol();
}

}voidtimer0()interrupt1//定时器,实现倒计时
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
dispaly();
if(++uartRx_outtime>=100){
uartRx_outtime=0;
uartRx_count=0;
}
}

voiart0()interrupt4
{
if(RI){
u8t=SBUF;RI=0;
uartRx_outtime=0;
if(uartRx_count<UART_RX_SIZE){
uartRx_buf[uartRx_count++]=t;
}
}
}


㈡ 计算机的两种基本通信方式是什么

计算机的两种基本通信方式是串行通信和并行通信。

串行通信是指在计算机总线或其他数据通道上,每回次传输一个位元数据,并连续进行以上单次过程的通信方式。串答行通信被用于长距离通信以及大多数计算机网络

并行通信是在串行端口上通过一次同时传输若干位元数据的方式进行通信。多比特数据同时通过并行线进行传送,这样数据传送速度大大提高,但并行传送的线路长度受到限制,因为长度增加,干扰就会增加,数据也就容易出错。

(2)串行通信基础扩展阅读:

两种通信方式的特点:

串行通信:

1、节省传输线,这是显而易见的。尤其是在远程通信时,此特点尤为重要。这也是串行通信的主要优点。

2、数据传送效率低。与并行通信比,这也这是显而易见的。这也是串行通信的主要缺点。

3、每次传输一个位元数据。

并行通信:

1、各数据位同时传输,传输速度快、效率高,多用在实时、快速的场合。

2、并行传递的信息不要求固定的格式。

3、并行接口的数据传输率较快,比串行接口快8倍。

4、并行传输的传输的成本较高。

5、并行通信抗干扰能力差。

6、适合外部设备与微机之间进行近距离、大量和快速的信息交换,通常传输距离小于30米。

㈢ 我想做pc机与单片机的串行通信及数据采集需要什么基础知识

串行通信的基本知识,RS232协议
MAX232芯片和单片机的USART模块
采样定理
AD转换原理
抗混叠滤波方法

㈣ 异步串行通信的基本原理

异步串行通信的数据格式
异步通信数据帧的第一位是开始位,在通信线上没有数版据传送时处于权逻辑'1'状态。当发送设备要发送一个字符数据时,首先发出一个逻辑“0”信号,这个逻辑低电平就是起始位。起始位通过通信线传向接收设备,当接收设备检测到这个逻辑低电平后,就开始准备接收数据位信号。因此,起始位所起的作用就是表示字符传送开始。
当接收设备收到起始位后,紧接着就会收到数据位。数据位的个数可以是5,6,7或8位的数据。在字符数据传送过程中,数据位从最低位开始传输。数据发送完之后,可以发送奇偶校验位。奇偶校验位用于有限差错检测,通信双方在通信时需约定一致的奇偶校验方式。就数据传送而言,奇偶校验位是冗余位,但它表示数据的一种性质,这种性质用于检错,虽有限但很容易实现。在奇偶位或数据位之后发送的是停止位,可以是1位、1.5位或2位,停止位一直为逻辑'1'状态。停止位是一个字符数据的结束标志。
在异步通信中,字符数据以图所示的格式一个一个地传送。在发送间隙,即空闲时,通信线路总是处于逻辑“1”状态,每个字符数据的传送均以逻辑“0”开始。