找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1617|回复: 2
打印 上一主题 下一主题
收起左侧

51单片机串口收发程序与Proteus仿真图

[复制链接]
跳转到指定楼层
楼主
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机串口接受源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. uchar temp,flag;
  4. uchar a[10];
  5. uchar count=0;
  6. void main()
  7. {
  8.          TMOD=0x20;          //定时器T1工作于方式2
  9.         SCON=0x40;          //SCON=0100 0000B,串口工作方式1
  10.     PCON=0x00;          //PCON=0000 0000B,波特率9600
  11.     TH1=0xfd;           //根据规定给定时器T1赋初值
  12.     TL1=0xfd;           //根据规定给定时器T1赋初值
  13.     TR1=1;              //启动定时器T1   
  14.         REN=1;              //允许接收
  15.         EA=1;               //开起总中断开关
  16.         ES=1;               //需要用到串行口的中断所以ES=1就是把串行口的中断打开了
  17.         while(1)            //进入循环
  18.         {
  19.                  if(flag==1)     //等待中断的来临,然后flag就会被赋值为1
  20.                 {
  21.                         if(a[7]==0x31)             //如果发送的数据最后一位为1的话(“15000101”最后一位1            
  22.                         P1=0xFE;                   //对应的就是十六进制的0x31)  0xfe对应1111 1110 就第
  23.                                        //一盏灯亮
  24.                         else if(a[7]==0x32)        //以此类推
  25.                         P1=0xFD;
  26.                         else if(a[7]==0x33)        //以此类推
  27.                         P1=0xFC;
  28.                         else
  29.                         P1=0x00;                   //发送为其他数据时灯全亮
  30.                         flag=0;
  31.                 }

  32.         }
  33. }


  34. void serial() interrupt 4            //设置中断函数
  35. {
  36.         temp=SBUF;                       //当有中断时把传过来的数据暂存到temp中
  37.         RI=0;                            //把设置中断的标志初始化,等待下一中断
  38.         if(temp==0x00)                   //当到达最后一位
  39.         {
  40.                 a[count]=temp;
  41.                 count=0;                     //计数器初始化为下一次中断准备
  42.                 flag=1;                      //标志置1进入主函数,进行端口的赋值
  43.         }
  44.         else
  45.         {
  46.                  a[count]=temp;
  47.                 count=count+1;
  48.         }
  49. }
复制代码

Proteus7.5版本的dsn文件与发送程序下载:
51单片机_串口收发.zip (67.37 KB, 下载次数: 54)

评分

参与人数 1黑币 +10 收起 理由
admin + 10 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:969161 发表于 2021-11-10 23:10 | 只看该作者
这个程序看的一知半解,我再努力看两篇。
回复

使用道具 举报

板凳
ID:969161 发表于 2021-11-10 23:16 | 只看该作者
能问一下楼主,所有收到的消息都转成FLAG,这个好麻烦,我要写一个程序PC端要下发几十种命令,这个程序怎么写呢?有思路吗?
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表