标题:
51单片机串口收发程序与Proteus仿真图
[打印本页]
作者:
1348689336
时间:
2021-10-23 22:07
标题:
51单片机串口收发程序与Proteus仿真图
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.png
(10.66 KB, 下载次数: 25)
下载附件
2021-10-23 22:33 上传
单片机串口接受源程序如下:
#include<reg51.h>
#define uchar unsigned char
uchar temp,flag;
uchar a[10];
uchar count=0;
void main()
{
TMOD=0x20; //定时器T1工作于方式2
SCON=0x40; //SCON=0100 0000B,串口工作方式1
PCON=0x00; //PCON=0000 0000B,波特率9600
TH1=0xfd; //根据规定给定时器T1赋初值
TL1=0xfd; //根据规定给定时器T1赋初值
TR1=1; //启动定时器T1
REN=1; //允许接收
EA=1; //开起总中断开关
ES=1; //需要用到串行口的中断所以ES=1就是把串行口的中断打开了
while(1) //进入循环
{
if(flag==1) //等待中断的来临,然后flag就会被赋值为1
{
if(a[7]==0x31) //如果发送的数据最后一位为1的话(“15000101”最后一位1
P1=0xFE; //对应的就是十六进制的0x31) 0xfe对应1111 1110 就第
//一盏灯亮
else if(a[7]==0x32) //以此类推
P1=0xFD;
else if(a[7]==0x33) //以此类推
P1=0xFC;
else
P1=0x00; //发送为其他数据时灯全亮
flag=0;
}
}
}
void serial() interrupt 4 //设置中断函数
{
temp=SBUF; //当有中断时把传过来的数据暂存到temp中
RI=0; //把设置中断的标志初始化,等待下一中断
if(temp==0x00) //当到达最后一位
{
a[count]=temp;
count=0; //计数器初始化为下一次中断准备
flag=1; //标志置1进入主函数,进行端口的赋值
}
else
{
a[count]=temp;
count=count+1;
}
}
复制代码
Proteus7.5版本的dsn文件与发送程序下载:
51单片机_串口收发.zip
(67.37 KB, 下载次数: 55)
2021-10-23 22:07 上传
点击文件名下载附件
51单片机_串口收发
下载积分: 黑币 -5
作者:
harbour374859
时间:
2021-11-10 23:10
这个程序看的一知半解,我再努力看两篇。
作者:
harbour374859
时间:
2021-11-10 23:16
能问一下楼主,所有收到的消息都转成FLAG,这个好麻烦,我要写一个程序PC端要下发几十种命令,这个程序怎么写呢?有思路吗?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1