单片机和PC通过串口通信
串口设置:PC串口参数设置
串口号:COM1(默认,具体视使用情况而定)
波特率:9600
数据位:8
其他默认
测试方法:可以用串口调试工具的字符串输入框输入:FAFAFA FA FA FA FA FA FACA,选择HEX发送,HEX显示,如果每发送一次就接收到以上数据,并在单片机开发板上正确显示,则测试成功。
//52单片机串口接收和发送测试程序;
//接收采用中断方式,发送采用查询方式;
//52串口通信,T1做串口波特率发生器;
#include "Port_Config.h"//单片机端口定义
#include "LCD_Driver.h"//单片机LCD显示
#include "52_UART.h"//52串口
#defineREC_BUF_LEN10//数据长度
#defineucharunsigned char;
#defineuintunsigned int;
ucharrec_buf[REC_BUF_LEN];//接收数据缓冲区
uintcheck_sum= 0;//接收数据校验和
ucharcount= 0;//当前接收数据个数
bitrec_flag= 0;//数据接收完成标志
bitstart_flag= 0;//接收数据起始标志
//==================================================
//函数:void Init_UART1(void)
//描述:串口初始化函数,使用T1方式2自重载方式做波特率发生器,
//串口使用方式1,8位数据,可变波特率
//参数:无
//返回:无
//作者:geoff日期:2010/11/04
//修改:日期:
//版本:V1.1
//==================================================
void UART1_Init(void)
{
SCON=0x50 ;//方式1,8位可变波特率
TMOD=0x20 ;//定时器1,方式2,8位自重载
PCON=0x00 ;//倍频禁用
TH1=0xfa ;//晶振22.1184MHz,波特率9600;
TL1=0xfa ;//9600
IE|=0x90 ;//开中断
TR1=1 ;//启动定时器
}
//==================================================
//函数:uchar UART1_Receive_Char(void)
//描述:单片机从串口接收一个字符
//参数:无
//返回:uchar dat//接收到的数据
//作者:geoff日期:2010/11/11
//修改:日期:
//版本:V1.1
//==================================================
uchar UART1_Receive_Char(void)
{
uchar rec_data;
while(!RI);//等待接收完成
RI = 0;//接收完成后,清接收完成中断
rec_data = SBUF;
return rec_data;
}
//==================================================
//函数:void UART1_Send_Char(uchar send_data)
//描述:单片机向串口发送一个字符
//参数:uchar send_data//待发送数据
//返回:无
//作者:geoff日期:2010/11/09
//修改:日期:
//版本:V1.1
//==================================================
void UART1_Send_Char(uchar send_data)
{
SBUF = send_data;
while(!TI);//等待发送完成
TI = 0;//发送完成后,清发送完成中断
}
//==================================================
//函数:void UART1_Send_String(uchar *str, uchar len)
//描述:单片机向串口发送一个字符串
//参数:uchar *str//待发送数据
//uchar len//字符串长度
//返回:无
//作者:geoff日期:2010/11/10
//修改:日期:
//版本:V1.1
//==================================================
void UART1_Send_String(uchar *str, uchar len)
{
uchar i;
for(i=0; i { UART1_Send_Char(*(str+i)); } } //================================================== //函数:void UART1_Intr(void) interrupt 4 //描述:串口中断处理函数,接受串口向单片机发来的数据 //参数:无 //返回:无 //作者:geoff日期:2010/11/10 //修改:geoff日期:2010/11/12 //版本:V2.1注意:第一个数据以0XFA开始 //================================================== void UART1_Intr(void) interrupt 4 { uchar rec_temp; if(RI)//RI=1,串口接收到数据 { RI = 0;//清RI rec_temp = SBUF;//接收数据 if((rec_temp==0xfa)&&(count==0))//判断数据是否以OXFA开始 { check_sum = 0;//清校验和 rec_buf[count] = rec_temp;//把接收到的数据存到接收数组里 count++;// /////测试用 LCD_DataWrite(rec_temp);//在LCD上显示接收数据 check_sum += rec_temp;//计算校验和 start_flag = 1;//数据以OXFA开始,置开始标志 } else if(start_flag==1)//判断数据是否开始 { rec_buf[count] = rec_temp;//接收数据 count++;// /////测试用 LCD_DataWrite(rec_temp);//在LCD上显示接收数据 check_sum += rec_temp;//计算校验和 if(count==REC_BUF_LEN)//判断是否是最后一位数据,第十位 { count = 0;//从0重新计数 start_flag = 0;/
单片机PC串口通 相关文章:
- C51单片机与PC串口通信的单片机部分程序(11-24)
- 51单片机与PC串口通信程序(11-20)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)