4461|13

9

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

来看看这个串口通信程序 [复制链接]

波特率9600    无效验位  停止位1位  数据8位

 

功能:串口通信发送:每次4个字节,格式如:55A1D1XX   

          8位LED根据XX的值来显示(比如计算机发送55A1D155,接受后LED偶数位亮)

          单片机接受成功后并返回OK到计算机

 

#include<reg52.h>
unsigned char flag,i;         // flag为标志位
unsigned char code table[3]={0x55,0xA1,0XD1};
unsigned char idata str[4];
void main()
{

/*串口初始化*/

 TMOD=0x20;    //  设置定时器1为工作方式2
 TH1=0xfd;          //装初值,设定波特率为9600
 TL1=0xfd;
 TR1=1;              //启动T1定时器
 REN=1;            //允许串口接收数据,REN、SM0、SM1这三句亦可以只写一个SCON=0x50
 SM0=0;            //串口工作方式设置为方式1, SM1=1;
 EA=1;              //开总中断
 ES=1;              //开串口中断
 P1=0x77;


 while(1)
  {
    if ( flag == 1 )  
     {
       ES=0;           
       flag=0;         
       SBUF='O';       
       while(!TI);         
       TI=0;  
    SBUF='K';       
       while(!TI);         
       TI=0;                                              
       ES=1;           
     }
  }
}

void ser() interrupt 4   
{
  while(RI)
  {
   
   for(i=0;i<4;i++)
   {
      str=SBUF;
      RI=0;
      if(str==table)
           continue;                         //准备接收下一位
      else 
           break;                             //跳出循环
         i++;
      if(i==4)
    {   
     P1=str[3];
        i=0;
     flag=1; 
    }
   }
   
 }
}

 

 

因没有做实验的条件,大家看看这个程序写的行不行,有什么地方要改正的,谢谢了。

 

 

此帖出自51单片机论坛

最新回复

使用keilc的调试功能配合VSPD虚拟串口软件可是实现仿真。keilc使用mode  和ASSIGN命令  详情 回复 发表于 2011-10-26 15:56
点赞 关注
 

回复
举报

79

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
可以自己用proteus自己仿真一下
此帖出自51单片机论坛
 
 
 

回复

3404

帖子

6

TA的资源

裸片初长成(初级)

板凳
 
好久没有写过51的程序。有问题很难一眼看出来了,同样建议使用proteus仿真一下!
此帖出自51单片机论坛
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(高级)

4
 

_Justin


你把那个if(str==table) continue; else break; 换成
if(str!=table) break;
因为continue是结束本次循环,那么之后的就不会执行,别的就没什么了吧
此帖出自51单片机论坛
 
 
 

回复

315

帖子

0

TA的资源

五彩晶圆(初级)

5
 

  void ser() interrupt 4   
{
  if(RI)
  {
        str[ i ]
=SBUF;

        RI=0;     

        i++;             

        if(i=4)

      {
        if(str[0]==table[0]&&str[1]==table[1]&&str[2]==table[2])
      {   
         P1=str[3];
          i=0;
         flag=1;  

       }
    }

  }

}

[ 本帖最后由 孤獨の快樂 于 2011-10-25 11:30 编辑 ]
此帖出自51单片机论坛
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

6
 

回复 沙发 lalahu 的帖子

额 电脑里没装proteus    这个软件没下下来。。。
此帖出自51单片机论坛
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

7
 

回复 5楼 孤獨の快樂 的帖子

if(str[0]==table[0]&&str[1]==table[1]&&str[2]==table[2])

 { P1=str[3]; i=0; flag=1; }

这个方法也想到过,不过当时实验的时候,str[ i ]的数据出现错误,多个数据重合,所以没有成功。下次实验去试试这个方法。谢谢哈

 

[ 本帖最后由 PINK123 于 2011-10-25 12:57 编辑 ]
此帖出自51单片机论坛
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

8
 

回复 4楼 _Justin 的帖子

此帖出自51单片机论坛
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

9
 

回复 板凳 jishuaihu 的帖子

斑竹  proteus这个软件论坛有下的吗?
此帖出自51单片机论坛
 
 
 

回复

535

帖子

0

TA的资源

五彩晶圆(初级)

10
 

回复 9楼 PINK123 的帖子

https://bbs.eeworld.com.cn/thread-238199-1-1.html
论坛有的与最新版本的,去下载吧!
此帖出自51单片机论坛
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

11
 

回复 10楼 小小白 的帖子

谢谢小小白
此帖出自51单片机论坛
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

12
 

用proteus来仿真,没有成功。。。

只有发送的数据  没有接收的数据

 

谁有单片机板子,帮我测试一下这个程序,看看正确不?

比较急。。先谢谢大家了啊。。

此帖出自51单片机论坛
 
 
 

回复

3404

帖子

6

TA的资源

裸片初长成(初级)

13
 
孤獨の快樂说的很对啊!还不行?
此帖出自51单片机论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(中级)

14
 
使用keilc的调试功能配合VSPD虚拟串口软件可是实现仿真。keilc使用mode  和ASSIGN命令
此帖出自51单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表