文档详情

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

wd****8
实名认证
店铺
DOCX
17.35KB
约8页
文档ID:276721430
C51单片机和电脑串口通信电路图及源码_第1页
1/8

51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进展串口通讯进展串行通讯时要满足一定的条件,比方电脑的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MA*232进展转换,虽然也可以用几个三极管进展模拟转换,但是还是用专用芯片更简单可靠我们采用了三线制连接串口,也就是说和电脑的9针串口只连接其中的3根线:第5脚的GND、第2脚的R*D、第3脚的T*D这是最简单的连接方法,但是对我们来说已经足够使用了,电路如以下图所示,MA*232的第10脚和单片机的11脚连接,第9脚和单片机的10脚连接,第15脚和单片机的20脚连接串口通讯的硬件电路如上图所示  在制作电路前我们先来看看要用的MA*232,这里我们不去具体讨论它,只要知道它是TTL和RS232电平相互转换的芯片和根本的引脚接线功能就行了通常我会用两个小功率晶体管加少量的电路去替换MA*232,可以省一点,效果也不错,以下图就是MA*232的根本接线图按图7-3加上MA*232就可以了这大热天的拿烙铁焊焊,还真的是热气迫人来呀:P串口座用DB9的母头,这样就可以用买来的PC串口延长线进展和电脑相连接,也可以直接接到电脑口上。

为了能够在电脑端看到单片机发出的数据,我们必须借助一个WINDOWS软件进展观察,这里我们利用一个免费的电脑串口调试软件本串口软件在本 mcujl 可以找到软件界面如上图,我们先要设置一下串口通讯的参数,将波特率调整为4800,勾选十六进制显示串口选择为1,当然将提供的51单片机实验板的串口也要和电脑的1连接,将烧写有以下程序的单片机插入单片机实验板的万能插座中,并接通51单片机实验板的电源串口实验的源程序如下所示:;这是一个S51单片机实验开发板向PC机的串口单向发送数据AF的演示程序;采用MA*232专用芯片作RS232/TTL电平转换. ;通讯波特率为4800KBPS,只要按下一次K1〔就是P3.6引脚变成低电平〕;就发送一个16进制的AF字符ORG 0000H MOV SCON,*50H;设置成串口1方式MOV TMOD,*20H;波特率发生器T1工作在模式2上MOV PCON,*80H;波特率翻倍为2400*2=4800BPS MOV TH1,*0F3H;预置初值(按照波特率2400BPS预置初值) MOV TL1,*0F3H;预置初值(按照波特率2400BPS预置初值) SETB TR1;启动定时器T1 ;以上完成通讯初始化设置WRIT: P3.6,$;判断K1是否按下,如果没有按下就等待ACALL DELAY10;延时10毫秒消触点抖动 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 ;设置电源控制存放器, 让波特率加倍(2*) 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 NOPNOP 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,*16MOV LED4,*16 MOV LED5,*16 MOV LED6,*16 MOV LED7,*16 ;------------------------------ MOV DPTR,*TABLE ; 赋显示代码首地址ACALL DISPLAY ; 调显示子程序MOV SP, *30H ; 给堆栈指针赋初值;------。

下载提示
相似文档
正为您匹配相似的精品文档