Proteus 8.15和51单片机的UART串口通讯点亮LED

 本文利用Proteus仿真51单片机与电脑端上位机的UART串口通讯,可以实现上位机发送数字来控制LED灯的点亮,如果不是数值1-8蜂鸣器就会报警,顺便将发送的数值进行回传。其中的Proteus 8.15安装教程可以参考:http://t.csdnimg.cn/KRIov。

1. 电路连接

1.1 整体电路连接

   其中的时钟和复位电路可以不需要连接也可以使用。其中51单片机的RXD需要和COMPIM的RXT相连接,TXD与TXD连接。

 1.2 元器件载入

    在侧边栏找到元件图标,在搜索栏输入AT89得到51芯片,其他元器件的名字为:10WATT10R-电阻,02013A0R5CAT2A-电容,BUTTON-按键,BUZZER-蜂鸣器,COMPIM-计算机接口,CRYSTAY-晶振,LED-灯,PNP-三极管。 

    虚拟终端在侧边栏的虚拟仪器模式里面的VIRTUAL TERMINAL。

 1.3 设置51单片机程序和频率

在程序文件中选择keil编译的.hex文件,设置频率的时候要注意单位。因为通信使用9600的波特率,所以设置频率为11.0592MHz,如果加了外部晶振也不要忘记设置频率。

1.3 设置虚拟终端和计算机接口的终端

 双击虚拟终端配置波特率为9600,设置数据位数为8位,截止位1位,计算机接口也要进行配置。

2. 程序部分

 本文的程序将放在末尾,需要自取,不要忘记点赞哦。

2.1 串口初始化

配置波特率率为9600,允许串口中断。

//设置波特率9600
	SCON=0x50;           //设定串口工作方式
	PCON=0x00;           //波特率不倍增
		
	TMOD=0x20;           //定时器1工作于8位自动重载模式, 用于产生波特率
	EA=1;
	ES = 1;              //允许串口中断
	TL1=0xfd;
	TH1=0xfd;             //波特率9600
	TR1=1;

2.2 发送数据

u8 UART_Receive_Data()
{
	u8 temp;
	while(!RI);//等待串口接收到数据(RI被置1)
	temp=SBUF;
	RI=0;//清空接收中断标志位,为下次接收做准备
	return temp;
}

2.3 串口中断程序

void serial() interrupt 4 
{
   ES = 0;                //关闭串行中断
   RI = 0;                //清除串行接受标志位
   buf = SBUF;            //从串口缓冲区取得数据
	 UART_Send_Data(SBUF);//将数据发回电脑
	
  switch(buf)
   {
      case 0x31:  P1=0xfe;beep=1;break;  //接受到1,第一个LED亮         
      case 0x32:  P1=0xfd;beep=1;break;  //接受到2,第二个LED亮        
      case 0x33:  P1=0xfb;beep=1;break;  //接受到3,第三个LED亮        
      case 0x34:  P1=0xf7;beep=1;break;  //接受到4,第四个LED亮       
      case 0x35:  P1=0xef;beep=1;break;  //接受到5,第五个LED亮            
      case 0x36:  P1=0xdf;beep=1;break;  //接受到6,第六个LED亮                   
      case 0x37:  P1=0xbf;beep=1;break;  //接受到7,第七个LED亮
	  case 0x38:  P1=0x7f;beep=1;break;  //接受到8,第八个LED亮
	  default:    beep=0;P1=0xff;break;  //接受到其它数据,蜂鸣器响         
   }
   ES = 1;    //允许串口中断
}

3. 虚拟串口驱动

   使用Virtual Serial Port Driver 6.9来配置虚拟串口,将Proteus里面的计算机接口和你的电脑进行连接。因为我已经添加了COM1和COM2两个虚拟端口,所以添加那里自动变成了COM5和COM6,而前面的COM3和COM4是电脑自带的端口。可以看到Virtual ports下面的COM2有一个后缀[9600-N-8-1],那是因为我打开了串口调试助手连接COM2后就会自动显示。

配置Proteus里面的计算机接口连接COM1。

 4. 实验结果

当我们使用串口调试助手发送数字2时,第二个LED亮起,并且回传了一个数值2。

 需要自取,感谢记得点赞关注哦。

 虚拟串口Virtual Serial Port Driver:

链接:https://pan.baidu.com/s/1Q4TezCDK2ETzAN0-gAt7cA?pwd=1025 提取码:1025

 代码和电路图:

链接:https://pan.baidu.com/s/1h9EUfjAO0wf6xSiTmbTTKA?pwd=1025 提取码:1025

  • 26
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1.基本任务 (1)已知甲机接 8 个开关,乙机接 8 个发光二极管,利用它们的串口方式 1,波 特率自定义,实现:将甲机中 8 个开关所代表的数据传送到乙机,并在乙机的 8 个 LED 灯显示。请在 Proteus 中画出电路原理图,并编写程序仿真实现上述功能。 (2)已知单片机的 P0 口接了 8 个发光二极管 LED0~LED7,现要求通过单片机的 串口收发上位机的命令,实现对这 8 个发光二极管的控制。PC 端采用串口调试程序进 行数据发送(如使用 stc-isp 烧写软件向单片机发送“88 FB AF XX FC FC”6 个字节的 命令,其中“88 FB AF”及“FC FC”为数据的帧头和帧尾,“XX”为 00~07 数据。 )单片机 使用串口中断进行数据接收,同时需要判断帧头和帧尾的正确性。判断帧头和帧尾完毕 后,若正确的话再判断“XX” 数据,对应“XX” 数据对 LED0~LED7 进行点亮、熄灭控 制;若不正确丢掉数据, 转入等待接收。 请在 Proteus 中画出电路原理图,并编写程 序仿真实现上述功能。 2.拓展任务 在以上基本任务 1 的基础上,奇校验,实现甲机和乙机的全双工通信,即甲机和乙 机都分别接 8 个开关和 8 个发光二极管,甲机 8 个开关所代表的数据能传送到乙机并在 乙机的 8 个 LED 灯显示,同时乙机 8 个开关所代表的数据能传送到甲机并在甲机的 8 个 LED 灯显示,若校验出错则指示灯(自定义)闪烁。请在 Proteus 中画出电路原理图, 并编写程序仿真实现上述功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值