求单片机串口通信C程序

[复制链接]
查看11 | 回复1 | 2009-9-15 21:09:38 | 显示全部楼层 |阅读模式
要在首先要设置好波特率,中断程序中要注意清除标志,还有就是发送时注意循环的控制,注意这三点一般就能做好.
回复

使用道具 举报

千问 | 2009-9-15 21:09:38 | 显示全部楼层
我也来说两有句。1.楼主首先要确定是硬件没有问题,先用232直接与电脑通迅看能否正常工作,用单片机接232芯片再接电脑就可用串口调试助手来看了。1>用示波器测232芯片的接收与发送/或测单片机的RX/TX引脚;2>可直接用printf来输出,包涵相应的头文件#include ,设置好波特率即可,注意波特率一定要设置正确;如:printf (" This is a test! \n");2.传一个51串口中断接收与发送的例子/*-----------------------------------------------------**文件描述:本文件包含了串行通信的4子程序,分别为:
**(1)SCISend1:串行发送1字节
**(2)SCISendN:串行发送n字节
**(3)SCIRe1:串行接收1字节
**(4)SCIReN:串行接收n字节
**-------------《嵌入式应用技术基础教程》--------------*///[以下为子程序源代码]//[包含头文件]#include "SCI.h"/*SCISend1:串行发送1个字节-----------------------------**功能:串行发送1个字节
**参数:要发送的数据
**返回:无
**-----------------------------------------------------*/void SCISend1(unsigned char o) {
ReSendDataR=o; while(1)
{ //判断ReStatusR的SendIntBit位是否为1,是1就清0
if (SendIntBit!=0)
{
SendIntBit=0;
break;
}
} }/*SCISendN:串行发送N个字节-----------------------------**功能:发送数组中的N个字节数据
**参数:待发送的数据字节数及其要存放的数组首地址
*
*返回:无
**-----------------------------------------------------*/void SCISendN(unsigned char n,unsigned char ch[]){int i; for(i=0;i=0xfbbb)
{i=0xff;
*p=0x01;}
return i;
//返回接收到的数据 }/*SCIReN:HC08串行接收N个字节---------------------------**功能:接收N个字节数据,并存放在ch数组中
*
*参数:待接收的数据字节数及其存放的数组首地址
*
*返回:接收标志=0收到数据,=1未收到数据
* *-----------------------------------------------------*/unsigned char SCIReN(unsigned char n,unsigned char ch[]) {int m;
unsigned char fp; m=0; while (m将从串口接收到的数据发送出去.注意波特率的设置.//如果在PC终端一次性将"abcdefghi........"一连串的字符发送会出现什么情况?会不会乱?//答案是不会,因为当收到一字节,如'a'时,立即将'a'发送出去了,此时SBUF就可以接收新的数据,所以不会乱.....void Int1(void) interrupt 4
// interrupt 4 表示串口中断{ unsigned char SerialBuff[1];
//存放接收数据的数组 unsigned char i; EA = 0;
// 开中断
//接收1个数据
i=SCIReN(1,SerialBuff);
//若收到数据,则发送接到的数据
if(i==0) SCISendN(1,SerialBuff);
EA = 1;
// 关中断}以上回答希望你满意
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行