上位机与51单片机串口通信

上位机与51单片机串口通信

目录:

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~Px7 Abcdefg p 十六进制 0 00111111 00000011 11111100 0xco 1 00000110 10011111 01100000 0xf9 2 01011011 00100101 11011010 0xa4 3 01001111 00001101 11110010 0xb0

4 00110110 10010011 01101100 0x99 5 01101101 01001001 10110110 0x92 6 01111101 01000001 10111110 0x82 7 00000111 00011111 11100000 0xf8 8 01111111 00000001 11111110 0x80 9 01101111 00001001 11110110 0x90 A 01110111 00010001 11101110 0x88 B 01111100 11000001 00111110 0x83 C 00111001 01100011 10011100 0xc6 D 01011110 10000101 01111010 0xa1 E 01111001 01100001 10011110 0x86 F 01110001 01110001 10001110 0x8e ASCII常用代码表 字符 代码 字符 代码 字符 代码 字符 代码 32 52 4 72 H 92 \\ 112 33 ! 53 5 73 I 93 ] 113 34 ” 54 6 74 J 94 ^ 114 35 # 55 7 75 K 95 _ 115 36 $ 56 8 76 L 96 ` 116 37 % 57 9 77 M 97 a 117 38 & 58 : 78 N 98 b 118 39 ’ 59 ; 79 O 99 c 119 40 ( 60 < 80 P 100 d 120 41 ) 61 = 81 Q 101 e 121 42 * 62 > 82 R 102 f 122 43 + 63 ? 83 S 103 g 123 44 , 64 @ 84 T 104 h 124 45 - 65 A 85 U 105 i 125 46 . 66 B 86 V 106 j 126 47 / 67 C 87 W 107 k 48 0 68 D 88 X 108 l 49 1 69 E 89 Y 109 m 50 2 70 F 90 Z 110 n 51 3 71 G 91 [ 111 o

//参考源程序

#include \包函8051 内部资源的定义

unsigned char dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容 sbit gewei=P2^4; //个位选通定义

字符 p q r s t u v w x y z { | } ~ sbit shiwei=P2^5; //十位选通定义 sbit baiwei=P2^6; //百位选通定义

unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,}; //1~10 void 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]; 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赋与dat RI=0; //RI 清零。

SBUF = dat; //在原样把数据发送回去(接收数据为发送数据的ASCII码,如发送q显示为113) }

LED(); //显示接收到的数据 } }

///这一个例子是以扫描的方式编写的,还可以以中断的方式编写,请大家思考////// [实验任务]PC控制单片机IO口输出

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4