《串口发送和接收程序(共4页).doc》由会员分享,可在线阅读,更多相关《串口发送和接收程序(共4页).doc(4页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上/* 文件名 : 串口发送试验.c* 描述 : 该文件实现通过串口把数据从单片机发送到电脑,通过串口调试助手显示出来。*/#include#include#define uchar unsigned char#define uint unsigned int /* 名称 : Com_Init()* 功能 : 初始化串口程序,晶振11.0592, 波特率9600* 输入 : 无* 输出 : 无*/void Com_Init(void) TMOD = 0x20; PCON = 0x00; SCON = 0x50; TH1 = 0xFd; TL1 = 0xFd; TR1 =
2、 1;/* 名称 : Main()* 功能 : 主函数* 输入 : 无* 输出 : 无*/void Main()uchar i = 0;uchar code Buffer = 当前时间; /所要发送的数据uchar *p;Com_Init();P2 = 0x00;p = Buffer;while(1)SBUF = *p;while(!TI) /如果发送完毕,硬件会置位TI_nop_();p+;if(*p = 0) break;/在每个字符串的最后,会有一个0TI = 0; /TI清零while(1);/* 文件名 : 串口接收试验.c* 描述 : 该文件实现通过单片机从电脑接收数据。通过数码管
3、显示 该试验使用的晶振是11.0592,如果使用12M晶振,会出现串口接收 不正常的情况。原因是用12M晶振,波特率9600时的误差率达 8% 当下载这个程序到单片机时,单片机的最高为为乱码,是正常现象, 按一下复位键便可。是由于单片机下载也是通过串口下载引起的。*/#include#include#define uchar unsigned char#define uint unsigned int uchar code table10 = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;uchar LED_Buffer8 = 0; /从串
4、口接收的数据/* 名称 : Delay_1ms()* 功能 : 延时子程序,延时时间为 1ms * x* 输入 : x (延时一毫秒的个数)* 输出 : 无*/void Delay_1ms(uint i)/1ms延时uchar x,j;for(j=0;ji;j+)for(x=0;x=148;x+);/* 名称 : Com_Int()* 功能 : 串口中断子函数* 输入 : 无* 输出 : 无*/void Com_Int(void) interrupt 4static uchar i = 7; /定义为静态变量,当重新进入这个子函数时 i 的值不会发生改变EA = 0;if(RI = 1) /当
5、硬件接收到一个数据时,RI会置位LED_Bufferi = SBUF - 48; /这里减去48是因为从电脑中发送过来的数据是ASCII码。RI = 0; if(i=0) i = 8; i-;EA = 1;/* 名称 : Com_Init()* 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中断* 输入 : 无* 输出 : 无*/void Com_Init(void) TMOD = 0x20; PCON = 0x00; SCON = 0x50; TH1 = 0xFd; /设置波特率 9600 TL1 = 0xFd; TR1 = 1;/启动定时器1 ES = 1;/开串口中断 EA = 1;/开总中断/* 名称 : Main()* 功能 : 主函数* 输入 : 无* 输出 : 无*/void Main()uchar i = 0;Delay_1ms(100);Com_Init();P2 = 0x80; /这里把P2口的最高为置1,进入循环后 循环左移 一位正好是P2 最低为置1while(1)P0 = tableLED_Bufferi;P2 = i+;Delay_1ms(1);if(i = 8) i=0; 专心-专注-专业
限制150内