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

上传人:b****6 文档编号:8503997 上传时间:2023-01-31 格式:DOCX 页数:11 大小:102.77KB
下载 相关 举报
C51单片机和电脑串口通信电路图与源码.docx_第1页
第1页 / 共11页
C51单片机和电脑串口通信电路图与源码.docx_第2页
第2页 / 共11页
C51单片机和电脑串口通信电路图与源码.docx_第3页
第3页 / 共11页
C51单片机和电脑串口通信电路图与源码.docx_第4页
第4页 / 共11页
C51单片机和电脑串口通信电路图与源码.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

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

《C51单片机和电脑串口通信电路图与源码.docx》由会员分享,可在线阅读,更多相关《C51单片机和电脑串口通信电路图与源码.docx(11页珍藏版)》请在冰豆网上搜索。

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

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

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

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软件进行观察,这里我们利用一个免费的电脑串口调试软件。

本串口软件在本网站可以找到

软件界面如上图,我们先要设置一下串口通讯的参数,将波特率调整为4800,勾选十六进制显示。

串口选择为COM1,当然将网站提供的51单片机实验板的串口也要和电脑的COM1连接,将烧写有以下程序的单片机插入单片机实验板的万能插座中,并接通51单片机实验板的电源。

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

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

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

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

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

ORG0000H

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

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

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

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

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

SETBTR1;启动定时器T1

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

WRIT:

JBP3.6,$;判断K1是否按下,如果没有按下就等待

ACALLDELAY10;延时10毫秒消触点抖动

JBP3.6,WRIT;去除干扰信号

JNBP3.6,$;等待按键松开

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

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

AJMPWRIT

;10毫秒延时子程序

DELAY10:

MOVR4,#20

D2:

MOVR5,#248

DJNZR5,$

DJNZR4,D2

RET

END

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

;功能:

使用串行中断,接收数据并显示

;硬件环境:

自制单片机实验板

;软件环境:

伟福V3.20

;Createdate:

2004_07_26

;FirstModify:

2004_07_26

;secondModify:

;LastModify:

2004_07_26

;Author:

Sujiande

;

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

LED0EQU40H;预定义数码管

LED1EQU41H;预定义数码管

LED2EQU42H;预定义数码管

LED3EQU43H;预定义数码管

LED4EQU44H;预定义数码管

LED5EQU45H;预定义数码管

LED6EQU46H;预定义数码管

LED7EQU47H;预定义数码管

SDABITP0.1;定义数据线引脚定义

SCLBITP0.0;定义时钟线引脚定义

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

ORG0000H;主程序入口

AJMPMAIN;跳转到主程序

ORG0100H;主程序在ROM中存放位置

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

MAIN:

MOVLED0,#00H;赋初值

MOVLED1,#00H

MOVLED2,#16;赋初值为16,数码管显示代码为:

MOVLED3,#16

MOVLED4,#16

MOVLED5,#16

MOVLED6,#16

MOVLED7,#16

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

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

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

ACALLDISPLAY;调显示子程序

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

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

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

;定时器初值为:

FAH

;串行控制器设置:

SM0=0,SM1=1,SM2=0,REN=1,TB8=0,

;RB8=0,TI=0,RI=0即01010000B

;波特率加倍

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

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

MOVTH1,#0FAh;赋初值:

FA

MOVTL1,#0FAh;赋初值:

FA

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

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

SETBTR1;启动定时

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

LP8:

MOVA,R1;将1的数据装到A中

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

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

JNBTI,$;等待数据发送完毕

CLRTI;清发送中断标志

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

INCR1

CJNER1,#99,LP3

MOVR1,#00H

LP3:

ACALLSEPERATE;调拆分程序

ACALLDISPLAY;调显示子程序

ACALLDELAY_1S;调延时子程序

AJMPLP8

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

SEPERATE:

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

MOVLED0,A;个位送LED0

MOVA,R1

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

SWAPA

MOVLED1,A;十位送LED1

RET

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

DISPLAY:

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

MOVA,LED0;查表数据送A

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

ACALLSHIFT;调移位子程序

MOVA,LED1

MOVCA,@A+DPTR

ACALLSHIFT

MOVA,LED2

MOVCA,@A+DPTR

ACALLSHIFT

MOVA,LED3

MOVCA,@A+DPTR

ACALLSHIFT

MOVA,LED4

MOVCA,@A+DPTR

ACALLSHIFT

MOVA,LED5

MOVCA,@A+DPTR

ACALLSHIFT

MOVA,LED6

MOVCA,@A+DPTR

ACALLSHIFT

MOVA,LED7

MOVCA,@A+DPTR

ACALLSHIFT

RET

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

TABLE:

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

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

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

SHIFT:

PUSHA;进栈暂存A值

MOVR0,#8;循环8次

CLRC;清进位标志

CLRSCL;时钟线,先钳位为0

LP2:

RLCA

MOVSDA,C

NOP

NOP

SETBSCL

NOP

NOP

CLRSCL

NOP

NOP

DJNZR0,LP2

POPA;出栈恢复A值

RET

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

DELAY_1S:

MOVR7,#0ffH

LOOP7:

MOVR6,#0ffH

LOOP6:

NOP

NOP

NOP

NOP

NOP

NOP

DJNZR6,LOOP6

DJNZR7,LOOP7

RET

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

END

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

;功能:

使用串行中断,接收数据并显示

;硬件环境:

自制单片机实验板

;软件环境:

伟福V3.20

;Createdate:

2004_07_26

;FirstModify:

2004_07_26

;secondModify:

;LastModify:

2004_07_26

;Author:

Sujiande

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

LED0EQU40H;预定义数码管

LED1EQU41H;预定义数码管

LED2EQU42H;预定义数码管

LED3EQU43H;预定义数码管

LED4EQU44H;预定义数码管

LED5EQU45H;预定义数码管

LED6EQU46H;预定义数码管

LED7EQU47H;预定义数码管

SDABITP0.1;定义数据线引脚定义

SCLBITP0.0;定义时钟线引脚定义

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

ORG0000H;主程序入口

AJMPMAIN;跳转到主程序

ORG0023H;中断入口地址

AJMPS_INT;跳转到中断程序

ORG0100H;主程序在ROM中存放位置

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

MAIN:

MOVLED0,#00H;赋初值

MOVLED1,#00H

MOVLED2,#16;赋初值为16,数码管显示代码为:

MOVLED3,#16

MOVLED4,#16

MOVLED5,#16

MOVLED6,#16

MOVLED7,#16

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

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

ACALLDISPLAY;调显示子程序

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

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

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

;定时器初值为:

FAH

;串行控制器设置:

SM0=0,SM1=1,SM2=0,REN=1,TB8=0,

;RB8=0,TI=0,RI=0即01010000B

;波特率加倍

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

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

MOVTH1,#0FAh;赋初值:

FA

MOVTL1,#0FAh;赋初值:

FA

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

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

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

SETBEA;启动总中断

SETBES;启动串行中断

SETBTR1;启动定时

AJMP$;等待中断

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

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

S_INT:

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

ACALLSEPERATE;调拆分程序

ACALLDISPLAY;调显示子程序

CLRRI;清接收中断标志

RETI;中断返回

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

SEPERATE:

MOVA,R1

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

MOVLED0,A;个位送LED0

MOVA,R1

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

SWAPA;

MOVLED1,A;十位送LED1

RET

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

DISPLAY:

MOVA,LED0;查表数据送A

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

ACALLSHIFT;调移位子程序

MOVA,LED1

MOVCA,@A+DPTR

ACALLSHIFT

MOVA,LED2

MOVCA,@A+DPTR

ACALLSHIFT

MOVA,LED3

MOVCA,@A+DPTR

ACALLSHIFT

MOVA,LED4

MOVCA,@A+DPTR

ACALLSHIFT

MOVA,LED5

MOVCA,@A+DPTR

ACALLSHIFT

MOVA,LED6

MOVCA,@A+DPTR

ACALLSHIFT

MOVA,LED7

MOVCA,@A+DPTR

ACALLSHIFT

RET

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

TABLE:

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

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

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

SHIFT:

PUSHA;进栈暂存A值

MOVR0,#8;循环8次

CLRC;清进位标志

CLRSCL;时钟线,先钳位为0

LP2:

RLCA

MOVSDA,C

NOP

NOP

SETBSCL

NOP

NOP

CLRSCL

NOP

NOP

DJNZR0,LP2

POPA;出栈恢复A值

RET

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

DELAY_1S:

MOVR7,#0ffH

LOOP7:

MOVR6,#0ffH

LOOP6:

NOP

NOP

NOP

NOP

NOP

NOP

DJNZR6,LOOP6

DJNZR7,LOOP7

RET

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

END

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 判决书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1