51单片机串口通信程序。。含详细例子

上传人:nbwa****ajie 文档编号:39678048 上传时间:2018-05-18 格式:PDF 页数:20 大小:394.95KB
返回 下载 相关 举报
51单片机串口通信程序。。含详细例子_第1页
第1页 / 共20页
51单片机串口通信程序。。含详细例子_第2页
第2页 / 共20页
51单片机串口通信程序。。含详细例子_第3页
第3页 / 共20页
51单片机串口通信程序。。含详细例子_第4页
第4页 / 共20页
51单片机串口通信程序。。含详细例子_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《51单片机串口通信程序。。含详细例子》由会员分享,可在线阅读,更多相关《51单片机串口通信程序。。含详细例子(20页珍藏版)》请在金锄头文库上搜索。

1、51 单片机串口通信1. 1. 1. 1./* /* /* /*打开串口调试程序打开串口调试程序,将波特率设置为将波特率设置为 9600960096009600,无奇偶校验晶振无奇偶校验晶振 11.0592MHz11.0592MHz11.0592MHz11.0592MHz,发送和接收使用的格式相同发送和接收使用的格式相同,如都使如都使用字符型格式,在发送框输入用字符型格式,在发送框输入 hellohellohellohello,I I I I LoveLoveLoveLove MCUMCUMCUMCU ,在接收框中同样可以看到相同字符,说明设置和通信正确,在接收框中同样可以看到相同字符,说明设

2、置和通信正确*/ */ */ */#include /*主程序*/void main (void)SCON = 0x50; /* SCON: 模式 1, 8-bit UART, 使能接收*/TMOD = 0x20; /* TMOD: timer 1, mode 2,8-bit reload*/TH1 = 0xFD; /* TH1:reload value for 9600 baud 11.0592MHz*/TL1=0XFD;TR1 = 1; /* TR1:timer 1 run*/EA = 1;/*打开总中断*/ES = 1;/*打开串口中断*/while (1)/*主循环不做任何动作*/vo

3、id UART_SER (void) interrupt 4 /串行中断服务程序 unsigned char Temp;/定义临时变量if(RI)/判断是接收中断产生RI=0;/标志位清零Temp=SBUF;/读入缓冲区的值P1=Temp;/把值输出到 P1 口,用于观察SBUF=Temp;/把接收到的值再发回电脑端if(TI)/如果是发送标志位,清零TI=0;2. 2. 2. 2.51515151 单片机与电脑串口通信的单片机与电脑串口通信的 C C C C 程序程序, , , ,最好是中断方式的最好是中断方式的#include #include unsigned char ch;bit r

4、ead_flag= 0 ;void init_serialcom( void ) /串口通信初始设定SCON = 0x50 ; /UART 为模式 1,8 位数据,允许接收TMOD = 0x20 ; /定时器 1 为模式 2,8 位自动重装PCON = 0x80 ; /SMOD=1;TH1 = 0xFD ; /Baud:19200 fosc=“11“.0592MHzTL1=0XFD;IE = 0x90 ; /Enable Serial InterruptTR1 = 1 ; / timer 1 runTI=1;/向串口发送一个字符void send_char_com( unsigned char

5、 ch)SBUF=ch;while (TI= 0);TI= 0 ;void serial () interrupt 4 using 3 /串口接收中断函数if (RI)RI = 0 ;ch=SBUF;read_flag= 1 ; /就置位取数标志main()init_serialcom(); /初始化串口while ( 1 ) if (read_flag) /如果取数标志已置位,就将读到的数从串口发出read_flag= 0 ; /取数标志清 0send_char_com(ch); 3. 3. 3. 3./ / / / 单片机串行口发送单片机串行口发送/ / / /接收程序,每接收到字节即发送

6、出去接收程序,每接收到字节即发送出去/ / / / 和微机相接后键入的字符回显示在屏幕上和微机相接后键入的字符回显示在屏幕上/ / / / 可用此程序测试可用此程序测试#include #define XTAL 11059200/ CUP 晶振频率#define baudrate 9600/ 通信波特率void main(void)unsigned char c;TMOD = 0x20; / 定时器 1 工作于 8 位自动重载模式, 用于产生波特率TH1=(unsigned char)(256 - (XTAL / (32L * 12L * baudrate);TL1=(unsigned cha

7、r)(256 - (XTAL / (32L * 12L * baudrate);/ 定时器 0 赋初值SCON = 0x50;PCON = 0x00;TR1 = 1;IE = 0x00; / 禁止任何中断while(1)while(RI = 0);RI = 0; c = SBUF;/ 从缓冲区中把接收的字符放入 c 中SBUF = c;/ 要发送的字符放入缓冲区while(TI = 0);TI = 0;4. 4. 4. 4./ /E51Pro.c/E51Pro.c/E51Pro.c/E51Pro.c/Easy/Easy/Easy/Easy 51Pro51Pro51Pro51Pro 编程器主程序

8、,负责通讯,管理编程操作编程器主程序,负责通讯,管理编程操作/#include BYTE ComBuf18;/串口通讯数据缓存,发送和接收都使用UINT nAddress;/ROM 中地址计数UINT nTimeOut;/超时计数ProWork pw;/编程器一般操作void Delay_us(BYTE nUs)/微秒级延时10000)/后 17 个字节都有超时限制return 0;ComBufn=SBUF;RI=0;return 1; BOOL WaitResp()/等待上位机回应,1 字节,有超时限制nTimeOut=0;RI=0;while(!RI)nTimeOut+;if(nTimeO

9、ut50000)return 0;RI=0;ComBuf0=SBUF;return 1;BOOL WaitData()/写器件时等待上位机数据,18 字节,有超时限制BYTE n;RI=0;for(n=0;n10000)return 0;RI=0;ComBufn=SBUF;return 1;void SendData()/发送数据或回应操作完成,18 字节BYTE n=0;for(n;nunsigned char code dispcode1=“welcome!“;unsigned char code dispcode2=““;unsigned char i,j,k,l,DData;sbit

10、RS = P35;sbit RW = P36; sbit E = P37; unsigned char m=0;void delay() for(l=0;l16) m=0; ES=1; void system_initial(void)/system initializtion TMOD=0x21;/ 定时器 1 工作方式 2,定时器 0 工作方式 1PCON=0x00;/数据传输率选择。 SCON=0x50;/串口工作方式选择,并打开接收允许。 TH1=0xfd;/定时器赋初值。TL1=0xfd;/波特率 9600bit/s TR1=1;/启动定时器。 EA= 1;/开总中断。ES = 1;

11、 void main() initializtion(); P0=0x80;enable();for(j=0;j #include #define length 4/数据长度 unsigned char inbuflength; unsigned char checksum,counter;bit flag = 0;/取数标记 main() init_serial();/串行口初始化 while (1) if (flag!=0)/如果取数标志已置位, 就将读到的数从串口发出 flag= 0;/取数标志清 0 send_string(inbuf,length);/向串口发送字符串 /* 串行口初

12、始化 */void init_serial( void ) SCON = 0x50;/串行工作方式 1, 8 位异步通信方式TMOD|=0x20;/定时器 1, 方式 2, 8 位自动重装 PCON |= 0x80;/SMOD=1,表示数据传输率加倍 TH1 = 0xF4;/数据传输率:4800 fosc=11.0592MHzIE |= 0x90;/允许串行中断 TR1 = 1;/启动定时器 1 /* 向串口发送一个字符 */ void send_char( unsigned char x) SBUF=x; while (TI= 0 ); TI= 0; /* 向串口发送一个字符串,string

13、_length 为该字符串长度 */ void send_string( unsigned char *s, unsigned int string_length)unsigned int i= 0; do send_char(*(s + i);/向串口发送一个字符 i+; while ( i 127 ) counter= 0; inbufcounter=x; checksum= x- 128; else counter+; inbufcounter=x; checksum = x;if (counter=(length- 1) /如果串口接收的数据达到 length 个,且校验没错, /就置位取数标志 手把手教你用增强型 51 实验板实现 RS232 串口通信下面我们一起来完成一个用单片机从串行口接收 PC 机数据,并在数码管上显示出来的实验。 先介绍一下串口通信基本知识。目前较为常用的串口有 9 针串口(DB9)和 25 针串口(DB25) 。最为简单且常用的 是三线制接法,即地、接收数据和发送数据三脚相连,本文只涉及到最为基本的接法,且直接用 RS232 相连。串口引脚定义如图 1 所示。 9 针串口(DB9)25 针串口(DB25) 针号功能说明缩写针号功能说明缩写1数据载波检测DCD8数据载波检测DCD 2接收数据RXD3接收数据RXD 3发送数据TXD2发送数据

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号