PC 机与单片机通信(RS232 协议)目录:1、单片机串口通信的应用2、PC 控制单片机 IO 口输出3、单片机控制实训指导及综合应用实例4、单片机给计算机发送数据:[实验任务]单片机串口通信的应用,通过串口,我们的个人电脑和单片机系统进行通信。个人电脑作为上位机,向下位机单片机系统发送十六进制或者 ASCLL 码,单片机系统接收后,用 LED 显示接收到的数据和向上位机发回原样数据。[硬件电路图][实验原理]RS-232 是美国电子工业协会正式公布的串行总线标准,也是目前最常用的串行接口标准,用来实现计算机与计算机之间、计算机与外设之间的数据通讯。RS-232 串行接口总线适用于:设备之间的通讯距离不大于 15m,传输速率最大为20kBps。RS-232 协议以-5V-15V 表示逻辑 1;以+5V-15V 表示逻辑 0。 我们是用 MAX232 芯片将 RS232 电平转换为 TTL 电平的。 一个完整的 RS-232 接口有 22根线,采用标准的 25 芯插头座。我们在 这里使用的是简化的 9 芯插头座。注意我们在这里使用的晶振是 11.0592M 的,而不是 12M。因为波特率的设置需要 11.0592M 的。“串口调试助手 V2.1.exe” 软件的使用很简单,只要将串口选择‘CMO1’波特率设置为‘9600’ 数据位为 8 位。打开串口(如果关闭)。然后在发送区里输入要发送的数据,单击手动发送就将数据发送出去了。注意,如果选中‘十六进制发送’那么发送的数据是十六进制的,必须输入两位数据。如果没有选中,则发送的是 ASCLL 码,那么单片机控制的数码管将显示 ASCLL 码值。数字二进制Px0~Px7Abcdefg p十六进制00011111100000011111111000xco10000011010011111011000000xf920101101100100101110110100xa430100111100001101111100100xb040011011010010011011011000x9950110110101001001101101100x9260111110101000001101111100x8270000011100011111111000000xf880111111100000001111111100x8090110111100001001111101100x90A0111011100010001111011100x88B0111110011000001001111100x83C0011100101100011100111000xc6D0101111010000101011110100xa1E0111100101100001100111100x86F0111000101110001100011100x8e ASCII 常用代码表字符代码字符代码字符代码字符代码字符3252472H92\112p33!53573I93]113q34”54674J94^114r35#55775K95_115s36$56876L96`116t37%57977M97a117u38&58:78N98b118v39’59;79O99c119w40(60< 80P100d120x41)61=81Q101e121y42*62> 82R102f122z43+63?83S103g123{44,64@84T104h124|45-65A85U105i125}46.66B86V106j126~47/67C87W107k48068D88X108l49169E89Y109m50270F90Z110n51371G91[111o[C 语言源程序]#include "reg52.h" //包函 8051 内部资源的定义unsigned char dat; //用于存储单片机接收发送缓冲寄存器 SBUF 里面的内容sbit gewei=P2^4; //个位选通定义sbit shiwei=P2^5; //十位选通定义sbit baiwei=P2^6; //百位选通定义unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,}; //1~10void Delay(unsigned int tc) //延时程序{while( tc != 0 ){unsigned int i;for(i=0; i<100; i++);tc--;}}void LED() //LED 显示接收到的数据(十进制){gewei=0; P0=table[dat%10]; Delay(10); gewei=1;shiwei=0; P0=table[dat/10]; Delay(10); shiwei=1;baiwei=0; P0=table[dat/100]; Delay(10); baiwei=1;}///////功能:串口初始化,波特率 9600,方式 1/////////void Init_Com(void){TMOD = 0x20;PCON = 0x00;SCON = 0x50;TH1 = 0xFd;TL1 = 0xFd;TR1 = 1;}/////主程序功能:实现接收数据并把接收到的数据原样发送回去///////void main(){Init_Com();//串口初始化while(1){ if ( RI ) //扫描判断是否接收到数据,{dat = SBUF; //接收数据 SBUF 赋与 datRI=0; //RI 清零。SBUF = dat; //在原样把数据发送回去(接收数据为发送数据的 ASCII 码,如发送 q 显示为113)}LED(); //显示接收到的数据}}///这一个例子是以扫描的方式编写的,还可以以中断的方式编写,...