最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

C51单片机和电脑串口通信电路图与源码

来源:动视网 责编:小OO 时间:2025-09-28 00:50:43
文档

C51单片机和电脑串口通信电路图与源码

51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。我们采用了三线制连接串口,也就是说和电脑的9针串口只连接其中的3根线:第5脚的GND、第2脚的RXD、第3脚的TXD。这是最简单的连接方法,但是对我们来说已经足够使用了,电路如下图所示
推荐度:
导读51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。我们采用了三线制连接串口,也就是说和电脑的9针串口只连接其中的3根线:第5脚的GND、第2脚的RXD、第3脚的TXD。这是最简单的连接方法,但是对我们来说已经足够使用了,电路如下图所示
51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。我们采用了三线制连接串口,也就是说和电脑的9针串口只连接其中的3根线:第5脚的GND、第2脚的RXD、第3脚的TXD。这是最简单的连接方法,但是对我们来说已经足够使用了,电路如下图所示,MAX232的第10脚和单片机的11脚连接,第9脚和单片机的10脚连接,第15脚和单片机的20脚连接。

串口通讯的硬件电路如上图所示 

  在制作电路前我们先来看看要用的MAX232,这里我们不去具体讨论它,只要知道它是TTL和RS232电平相互转换的芯片和基本的引脚接线功能就行了。通常我会用两个小功率晶体管加少量的电路去替换MAX232,可以省一点,效果也不错,下图就是MAX232的基本接线图。

按图7-3加上MAX232就可以了。这大热天的拿烙铁焊焊,还真的是热气迫人来呀:P串口座用DB9的母头,这样就可以用买来的PC串口延长线进行和电脑相连接,也可以直接接到电脑com口上。 

为了能够在电脑端看到单片机发出的数据,我们必须借助一个WINDOWS软件进行观察,这里我们利用一个免费的电脑串口调试软件。本串口软件在本网站www.mcujl.com可以找到 

软件界面如上图,我们先要设置一下串口通讯的参数,将波特率调整为4800,勾选十六进制显示。串口选择为COM1,当然将网站提供的51单片机实验板的串口也要和电脑的COM1连接,将烧写有以下程序的单片机插入单片机实验板的万能插座中,并接通51单片机实验板的电源。 

串口实验的源程序如下所示: 

;这是一个S51单片机实验开发板向PC机的串口单向发送数据AF的演示程序 

;采用MAX232专用芯片作RS232/TTL电平转换. 

;通讯波特率为4800KBPS,只要按下一次K1(就是P3.6引脚变成低电平) 

;就发送一个16进制的AF字符 

ORG 0000H 

MOV SCON,#50H;设置成串口1方式 

MOV TMOD,#20H;波特率发生器T1工作在模式2上 

MOV PCON,#80H;波特率翻倍为2400x2=4800BPS 

MOV TH1,#0F3H;预置初值(按照波特率2400BPS预置初值) 

MOV TL1,#0F3H;预置初值(按照波特率2400BPS预置初值) 

SETB TR1;启动定时器T1 

;以上完成通讯初始化设置 

WRIT:JB P3.6,$;判断K1是否按下,如果没有按下就等待 

ACALL DELAY10;延时10毫秒消触点抖动 

JB P3.6,WRIT;去除干扰信号 

JNB P3.6,$;等待按键松开 

MOV A,#0AFH;将16进制的字符AF发送到串口去 

MOV SBUF,A;将AF通过串口发送出去 

AJMP WRIT 

;10毫秒延时子程序 

DELAY10:MOV R4,#20 

D2:MOV R5,#248 

DJNZ R5,$ 

DJNZ R4,D2 

RET 

END 

;=============两机串口通讯程序(主机)===================== 

; 功 能: 使用串行中断,接收数据并显示 

; 硬件环境: 自制单片机实验板 

; 软件环境: 伟福 V3.20 

; Create date: 2004_07_26 

; First Modify: 2004_07_26 

; second Modify: 

; Last Modify: 2004_07_26 

; Author: Sujiande 

;===========预定义=================== 

LED0 EQU 40H ;预定义数码管 

LED1 EQU 41H ;预定义数码管

LED2 EQU 42H ;预定义数码管 

LED3 EQU 43H ;预定义数码管 

LED4 EQU 44H ;预定义数码管 

LED5 EQU 45H ;预定义数码管 

LED6 EQU 46H ;预定义数码管 

LED7 EQU 47H ;预定义数码管 

SDA BIT P0.1 ; 定义数据线引脚定义 

SCL BIT P0.0 ; 定义时钟线引脚定义 

;--------------------------- 

ORG 0000H ;主程序入口 

AJMP MAIN ;跳转到主程序 

ORG 0100H ;主程序在ROM中存放位置 

;===============主程序===================== 

MAIN: 

MOV LED0,#00H ;赋初值 

MOV LED1,#00H 

MOV LED2,#16 ;赋初值为16, 数码管显示代码为: 灭 

MOV LED3,#16 

MOV LED4,#16 

MOV LED5,#16 

MOV LED6,#16 

MOV LED7,#16 

;-------------------- 

;MOV DPTR,#TABLE ; 赋显示代码首地址 

MOV R1,#00H ; 给R1赋初值00H 

ACALL DISPLAY ; 调显示子程序 

MOV SP, #30H ; 给堆栈指针赋初值 

;-------------------------- 

; 使用定时器1,作为波特率发生器,设定波特率=9600, 

; 定时器初值为:FAH 

; 串行控制器设置:SM0=0,SM1=1,SM2=0,REN=1,TB8=0, 

; RB8=0,TI=0,RI=0 即0101 0000B 

; 波特率加倍 

;----------------------------- 

MOV TMOD,#20H ;设置定时器1,工作方式2 

MOV TH1,#0FAh ;赋初值: FA 

MOV TL1,#0FAh ;赋初值: FA 

MOV SCON, #50h ;设置串行口控制寄存器 

MOV PCON, #80h ;设置电源控制寄存器, 让波特率加倍(2X) 

SETB TR1 ;启动定时 

;*****************主程序结束************************ 

LP8: MOV A,R1 ;将1的数据装到A中 

;----------------------- 

MOV SBUF,A ;将A的数据送到缓冲区 

JNB TI,$ ;等待数据发送完毕 

CLR TI ;清发送中断标志 

;----------------------- 

INC R1 

CJNE R1,#99,LP3 

MOV R1,#00H 

LP3: ACALL SEPERATE ;调拆分程序 

ACALL DISPLAY ;调显示子程序 

ACALL DELAY_1S ;调延时子程序 

AJMP LP8 

;=================拆分程序===================== 

SEPERATE: ANL A,#0Fh ;与操作得到个位数据 

MOV LED0,A ;个位送LED0 

MOV A,R1 

ANL A,#0F0H ;与操作得到十位数据 

SWAP A 

MOV LED1,A ;十位送LED1 

RET 

;===============显示子程序=====================

DISPLAY: 

MOV DPTR,#TABLE ; 赋显示代码首地址 

MOV A,LED0 ;查表数据送A 

MOVC A,@A+DPTR ;查表,得到显示代码 

ACALL SHIFT ;调移位子程序 

MOV A,LED1 

MOVC A,@A+DPTR 

ACALL SHIFT 

MOV A,LED2 

MOVC A,@A+DPTR 

ACALL SHIFT 

MOV A,LED3 

MOVC A,@A+DPTR 

ACALL SHIFT 

MOV A,LED4 

MOVC A,@A+DPTR 

ACALL SHIFT 

MOV A,LED5 

MOVC A,@A+DPTR 

ACALL SHIFT 

MOV A,LED6 

MOVC A,@A+DPTR 

ACALL SHIFT 

MOV A,LED7 

MOVC A,@A+DPTR 

ACALL SHIFT 

RET 

;---------显示代码表--------- 

TABLE: DB 11H,0D7H,32H,92H,0D4H,98H,18H,0D3H,10H,90H ;0,1,2,3,4,5,6,7,8,9, 

DB 50H,1CH,39H,16H,38H,78H, 0FFH,0FEH,0EFH ;10,11,12,13,14,15,灭,- 

;================移位子程序============================ 

SHIFT: PUSH A ; 进栈暂存A值 

MOV R0,#8 ; 循环8次 

CLR C ;清进位标志 

CLR SCL ;时钟线,先钳位为0 

LP2: RLC A 

MOV SDA,C 

NOP 

NOP 

SETB SCL 

NOP

NOP 

CLR SCL 

NOP 

NOP 

DJNZ R0,LP2 

POP A ; 出栈恢复A值 

RET 

;=============延时子程序=============== 

DELAY_1S: 

MOV R7,#0ffH 

LOOP7: MOV R6,#0ffH 

LOOP6: NOP 

NOP 

NOP 

NOP 

NOP 

NOP 

DJNZ R6,LOOP6 

DJNZ R7,LOOP7 

RET 

;------------------------------ 

END 

;=============两机串口通讯程序(从机)===================== 

; 功 能: 使用串行中断,接收数据并显示 

; 硬件环境: 自制单片机实验板 

; 软件环境: 伟福 V3.20 

; Create date: 2004_07_26 

; First Modify: 2004_07_26 

; second Modify: 

; Last Modify: 2004_07_26 

; Author: Sujiande 

;===========预定义=================== 

LED0 EQU 40H ;预定义数码管 

LED1 EQU 41H ;预定义数码管 

LED2 EQU 42H ;预定义数码管 

LED3 EQU 43H ;预定义数码管 

LED4 EQU 44H ;预定义数码管 

LED5 EQU 45H ;预定义数码管 

LED6 EQU 46H ;预定义数码管 

LED7 EQU 47H ;预定义数码管 

SDA BIT P0.1 ; 定义数据线引脚定义 

SCL BIT P0.0 ; 定义时钟线引脚定义 

;--------------------------- 

ORG 0000H ;主程序入口 

AJMP MAIN ;跳转到主程序 

ORG 0023H ;中断入口地址 

AJMP S_INT ;跳转到中断程序 

ORG 0100H ;主程序在ROM中存放位置 

;==============主程序======================== 

MAIN: 

MOV LED0,#00H ;赋初值

MOV LED1,#00H 

MOV LED2,#16 ;赋初值为16, 数码管显示代码为: 灭 

MOV LED3,#16

MOV LED4,#16 

MOV LED5,#16 

MOV LED6,#16 

MOV LED7,#16 

;------------------------------ 

MOV DPTR,#TABLE ; 赋显示代码首地址 

ACALL DISPLAY ; 调显示子程序 

MOV SP, #30H ; 给堆栈指针赋初值 

;-------------------------------------------- 

; 使用定时器1,作为波特率发生器,设定波特率=9600, 

; 定时器初值为:FAH 

; 串行控制器设置:SM0=0,SM1=1,SM2=0,REN=1,TB8=0, 

; RB8=0,TI=0,RI=0 即0101 0000B 

; 波特率加倍 

;--------------------------------------------- 

MOV TMOD,#20H ;设置定时器1,工作方式2 

MOV TH1,#0FAh ;赋初值: FA

MOV TL1,#0FAh ;赋初值: FA 

MOV SCON, #50h ;设置串行口控制寄存器 

MOV PCON, #80h ;设置电源控制寄存器, 让波特率加倍(2X) 

;--------------------------------------- 

SETB EA ; 启动总中断 

SETB ES ; 启动串行中断 

SETB TR1 ;启动定时 

AJMP $ ; 等待中断 

;*****************主程序结束************************ 

;===============中断服务程序============================= 

S_INT: 

MOV R1, SBUF ;将缓冲区的数据送到R1 

ACALL SEPERATE ;调拆分程序 

ACALL DISPLAY ;调显示子程序 

CLR RI ;清接收中断标志 

RETI ;中断返回 

;=================拆分程序===================== 

SEPERATE: MOV A,R1 

ANL A,#0Fh ;与操作得到个位数据 

MOV LED0,A ;个位送LED0 

MOV A,R1 

ANL A,#0F0H ;与操作得到十位数据 

SWAP A ; 

MOV LED1,A ;十位送LED1 

RET 

;===============显示子程序======================

DISPLAY: 

MOV A,LED0 ;查表数据送A 

MOVC A,@A+DPTR ;查表,得到显示代码 

ACALL SHIFT ;调移位子程序 

MOV A,LED1 

MOVC A,@A+DPTR 

ACALL SHIFT 

MOV A,LED2 

MOVC A,@A+DPTR 

ACALL SHIFT 

MOV A,LED3 

MOVC A,@A+DPTR 

ACALL SHIFT

MOV A,LED4 

MOVC A,@A+DPTR 

ACALL SHIFT 

MOV A,LED5 

MOVC A,@A+DPTR 

ACALL SHIFT 

MOV A,LED6 

MOVC A,@A+DPTR 

ACALL SHIFT 

MOV A,LED7 

MOVC A,@A+DPTR 

ACALL SHIFT 

RET 

;---------显示代码表--------- 

TABLE: DB 11H,0D7H,32H,92H,0D4H,98H,18H,0D3H,10H,90H ;0,1,2,3,4,5,6,7,8,9, 

DB 50H,1CH,39H,16H,38H,78H, 0FFH,0FEH,0EFH ;10,11,12,13,14,15,灭,- 

;================移位子程序============================ 

SHIFT: PUSH A ; 进栈暂存A值 

MOV R0,#8 ; 循环8次 

CLR C ;清进位标志 

CLR SCL ;时钟线,先钳位为0 

LP2: RLC A 

MOV SDA,C 

NOP 

NOP 

SETB SCL 

NOP 

NOP 

CLR SCL 

NOP 

NOP 

DJNZ R0,LP2 

POP A ; 出栈恢复A值 

RET 

;=============延时子程序=============== 

DELAY_1S: 

MOV R7,#0ffH 

LOOP7: MOV R6,#0ffH 

LOOP6: NOP 

NOP 

NOP 

NOP 

NOP 

NOP 

DJNZ R6,LOOP6 

DJNZ R7,LOOP7 

RET 

;------------------------------ 

END

文档

C51单片机和电脑串口通信电路图与源码

51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。我们采用了三线制连接串口,也就是说和电脑的9针串口只连接其中的3根线:第5脚的GND、第2脚的RXD、第3脚的TXD。这是最简单的连接方法,但是对我们来说已经足够使用了,电路如下图所示
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top