在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 8434|回复: 22

RS-232 C51程序,请教各位达人!·

[复制链接]
发表于 2006-12-27 10:19:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
这个是我想用的一个232的通讯程序,各位达人 看看有没有错误啊?
顺便向达人们 求CAN通讯程序,用于毕业设计啊 。can的硬件是89C52+SJA1000+82C250
谢谢




//-----------------------函数声明,变量定义--------------------------------------
#include <reg51.h>
#define COUNT 10                // 定义接收缓冲区大小
unsigned char buffer[COUNT]; //定义接收缓冲区
unsigned char point;            //定义接收数据个数指示变量
void UART_init();               //串口初始化函数
void COM_send(void);            //串口接收函数
unsigned char CLU_checkdata(void);//计算校验位函数
//--------------------------------------------------------------------------------
// 函数名称: UART_init()串口初始化函数
// 函数功能: 在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s
//            串口接收中断允许,发送中断禁止
//--------------------------------------------------------------------------------
void UART_init()
{
                     //初始化串行口和波特率发生器
SCON =0x58;          //选择串口工作方式,打开接收允许
TMOD =0x21;          //定时器1工作在方式2,定时器0工作在方式1
TH1 =0xfd;           //实现波特率9600(系统时钟11.0592MHZ)
TR1 =1;              //启动定时器T1
ET1 =0;
ES=1;                //允许串行口中断
PS=1;                //设计串行口中断优先级
EA =1;               //单片机中断允许
}
//---------------------------------------------------------------------------------
// 函数名称: com_interrup()串口接收中断处理函数
// 函数功能: 接收包括起始位'S'在内的十位数据到数据缓冲区
//---------------------------------------------------------------------------------
com_interrupt(void) interrupt 4 using 3
{
  unsigned char RECEIVR_buffer;
  if(RI)                                //处理接收中断
  {
RI=0;                                   //清除中断标志位
  RECEIVR_buffer=SBUF;          //接收串口数据
if(point==0)    //如果还没有接收到起始位
        {
        if(RECEIVR_buffer=='S')         //判断是否起始标志位
             point++;   //是准备接收下一位
  else
       point=0;  //不是,继续等待起始位
   }
else if(point>0&&point<10)  //判断是否接收够十位数据
     buffer[point++]=RECEIVR_buffer;    //不够,把接收到的数据放入接收缓存区
else point=0;                 //缓冲区已满,清除缓存区内数据重新接收
}
If(TI)                                  //处理发送中断
{
TI=0;
}
}
//---------------------------------------------------------------------------------
// 函数名称: COM_send()串口发送函数
// 函数功能: 把数据缓冲区的十位数据发送出去
//---------------------------------------------------------------------------------
void COM_send(void)
{
for(point=0;point<=10,TI=1;point++) //连续发送十位数据
                                        //把缓存区的数据都发送到串口
  {
   SBUF=buffer[point];
   TI=0;
   }
}
//---------------------------------------------------------------------------------
// 函数名称: CLU_checkdata()计算校验位函数
// 输入变量: 无
// 输出变量: checkdata,包括起始位在内的前九位数据的校验和
// 函数功能: 计算校验和
//---------------------------------------------------------------------------------
unsigned char CLU_checkdata(void)
{     //计算校验位
unsigned char checkdata=0;
for(point=0;point<9,TI=1;point++)
  {
   checkdata=checkdata|buffer[point];
   }
   return(checkdata);
}
//---------------------------------------------------------------------------------
// 函数名称: 主函数
// 函数功能: 调度个子函数,完成通信过程
//---------------------------------------------------------------------------------
void main(void)
{
unsigned char checkdata;
do
{
  UART_init();    //初始化串口
  if(point==10)    //判断数据是否接收完成
  checkdata=CLU_checkdata;  //调用求校验和函数
  if(checkdata==buffer[9])  //判断校验和是否正确
  COM_send();                           //正确则调用发送程序
  point=0;
  }
  while(1);
}
发表于 2006-12-27 11:15:54 | 显示全部楼层
调试一下才能发现问题;
发表于 2006-12-27 22:52:30 | 显示全部楼层
跑跑看。。。。。。。。。
发表于 2006-12-28 02:59:07 | 显示全部楼层
同ls,最好有仿真器,调试起来方便。
 楼主| 发表于 2006-12-28 18:07:51 | 显示全部楼层
拜托大家回应下啊
发表于 2006-12-29 11:30:12 | 显示全部楼层
SCON=0X58;         
用方式1都用不到第九位,OX50就行了,这样有什么好处吗?请教
 楼主| 发表于 2007-1-10 13:13:10 | 显示全部楼层
发表于 2007-1-10 15:29:54 | 显示全部楼层
对,仿真一下
发表于 2007-1-10 20:12:28 | 显示全部楼层
仿真一下0
发表于 2007-3-12 19:22:36 | 显示全部楼层

不要等着别人给找问题

软件调试已经很麻烦了,对着一对代码找问题更是麻烦,这个问题问得没有意义。除非是在家里没事干的人,闲得发疯才会帮你找问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-18 19:52 , Processed in 0.039396 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表