两个at89c52单片机通过单片机串口通信实验

没有女朋友
基于AT89C52和串口通信助手的串口通信
我们要实现的功能是在程序运行的时候通过单片机的串口向串口调试助手发送一个字符串诸如“hello world”,串口通信助手接收到字符串之后显示并由用户反馈回去一个长度为4的字符串并显示到数码管上
来看一下效果
首先是串口通信电路的配置和借助VSPD、串口通信助手对相关串口的设置
通过VSPD创建两个可以相互通信的虚拟串口,如COM1和COM2。点击添加端口按钮后,可以看到左边栏中的虚拟端口处看到你新创建的两个虚拟端口。
打开串口调试助手V2.2,对其进行配置,将串口改为COM2端口,波特率设为9600,校验位选择NONE,数据位为8位,停止位为1位
电路图中的配置:首先将晶振改为11.0592MHZ,再将AT89C52芯片中的晶振也改为11.0592MHZ。再配置串口,将物理端口设置为COM1,物理波特率设置为9600,物理数据位数设为8位,物理奇偶校验位设置为NONE,下面的虚拟波特率、虚拟数据位数和虚拟奇偶校验位与上面相同。
接下来上电路图
用VSPD创建两个虚拟端口
可以通过设备管理器来查看串口是否创建成功
AT89C52的相关配置
对COMPIM的相关配置
一些端口的设置
硬件配置的差不多了,接下来我们看看如何在Keil里编写代码实现,这里仅摘录一些比较重要的代码片段,感兴趣的可以[下载代码](http://download.csdn.net/detail/lrwwll/9720330)
void ser_inout(uchar datas)
for(i = 0 ; i & 8 ; i++)
if( (datas & 0x80) == 0)
datas &&= 1;
void Display()
uint i = 0;
while( i!=900 )
ser_inout(table[show[0]]);
delay_ms(1);
ser_inout(table[show[1]]);
delay_ms(1);
ser_inout(table[show[2]]);
delay_ms(1);
ser_inout(table[show[3]]);
delay_ms(1);
void printf(uchar dat[])
uint i = 0;
for(i = 4;i & 0;i--)
show[4-i]=dat[4-i];
Display();
void init()
TMOD=0X20;
SCON=0X50;
PCON&=0XEF;
void send(uchar txd)
while(!TI);
void send_buf(uchar dat[])
while(dat[i]!='\0')
send(dat[i]);
SCON=0x50:
SCON是串行口控制寄存器,0x50为16进制,转换成二进制是,对应下附表各位,即将串行口控制寄存器设置为串行口工作方式1并允许中断接收数据.
附:scon寄存器结构表
SCON SM0 SM1 SM2 REN TB8 RB8 TI RI
位地址 9FH 9EH 8DH 9CH 9BH 9AH 99H 98H
TMOD=0x20:
TMOD是定时/计数器方式控制寄存器,所以TMOD=0x20是将定时/计数器1设置为工作方式2.
TH1=0xE8,TL1=0xE8:
给定时/计数器1装初值,即确定定时时长,具体时间与晶振有关.
TI=1,TR=1:
由上附表可得,TI和RI是SCON寄存器的最低两位.TI:发送中断标志位 ,RI:接收中断标志位.
TI=1表示帧发送结束,RI=1表示帧接收完成.
没有更多推荐了,stc89c52单片机怎么实现用两个串口控制两个模块?_百度知道
stc89c52单片机怎么实现用两个串口控制两个模块?
我现在找到的程序都是一个串口来控制的,但是stc89c52单片机好像有两个串口吧?我手头有两个模块能否统一用单片机来控制?我第一次玩单片机,希望回答详细一点。
我有更好的答案
stc89c52单片机的确就有一个串口,当然可以在外部加一个模拟开关来扩展两个串口,但是两个串口是分时工作的,就是不能同时收发。其实,选择STC12C5A60S2,就完全解决了这个问题吗,它就有两个独立串口,价格上不比stc89c52高多少,还有STC现在推出了最新的STC15系列的单片机,都是有两个独立串口的,价格更低了,还完全可以省掉外部复位电路和时钟电路的晶振,非常方便,为什么不选择这款昵?何苦还用stc89c52,还不能解决两个串口的问题,换个思路问题就全解决了。
主要是编程问题。。我新手,买模块配套的是52的程序我自己改了一下,你说的那个S2的编程上和我现在用的89C52RC区别大么?
区别肯定是有的,但不是太大,上STC公司的官网下载技术资料看一下,就知道怎么用了,这毕竟是两个串口,使用起来要方便很多了,主要是可以解决了你的问题。谁都有新手的时候,谁都是从新手练起来的,如果能够自己学习一些新的知道,得到煅炼才能进步吗,遇到问题要肯学习,不能总是因为新手就不学习新的知道了。
采纳率:92%
来自团队:
可以,如果大小允许的话。。。。两个串口在程序上的区别仅仅是用的寄存器不同,修改一下就可以。。。两个单独的程序有点麻烦,因为不是独占CPU,所以需要协调,两个程序的main函数要合并,如果写的不合理可能出问题。。。
串口真的只有一个,就是说能用SBUF的只有一个。但是你可以用普通IO口模拟串口时序来控制另外一个外围器件。当然用一个SBUF也可以同时控制两个外围器件,也就是说在不人为模拟串口的情况下也可以控制两个外围串口器件。具体的可以参考串口控制寄存器的第九位TB8/和RB8,这一位可以用于地址帧和数据帧的鉴定位。比如你要控制2个器件,可以先发送一个地址帧进行片选,选定你要控制的那一个器件,此时另一个器件就会处于等待状态(也即,它将不会响应接下来的所有数据帧,只有当新的地址帧到来,且判定成功以后,它才被重新激活接收数据帧,当然,此时另一个器件又会处于等待状态了)
我新手。。有点懂你的意思了,不过你能不能帮我比较一下IO口模拟和片选哪个方法编程更方便一点?因为我是网上找的程序不太懂。。
如果你的外围器件可以设定地址(或者自带地址),那么肯定是片选方便。如果没有地址,那就只能模拟了
我是用一个GSM模块TC35接受手机信号,一个红外模块本地控制的大作业。看模块说明好像没有提到地址。。怎么看出有没有设定地址的地方或自带的地址呢?
TC35貌似没有地址,最好硬件串口控制TC35,然后用IO模拟串口来控制红外了。
那IO模拟串口的部分需要重新编程了是吗?
89c52只有一个串口,11f系列有双串口详细可以去stc官网找资料
恩我弄错了。。可是单片机已经到手了,现在的问题是我不知道怎么把两个串口的模块连接起来。。分开调试都没什么问题,程序是用别人改的,要是串口问题改动太大我改不了啊。。
用io模拟串口协议
其他1条回答
为您推荐:
其他类似问题
stc89c52的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。STC89C52RC单片机程序--串口通信
-------------------------程序源代码----------------------------------
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
MOV SCON,#40H ;串口方式1,ren=1
MOV PCON,#80H
MOV TMOD,#20H ;定时器1工作于方式2
MOV TH1,#0FAH
MOV DPTR,#TABLE
&ACALL DELAY
&MOVC A,@A+DPTR&
&CJNE A,#01H,LOOP1&
&JMP START
&MOV SBUF,A
TABLE: DB 0DH,0AH,"张养静是个天才!",0DH,0AH,01H
&MOV R1,#07DH
GOON:&MOV R0,#0FFH
&DJNZ R1,GOON
采用MAX232串口转换芯片。
一天没做,到了晚上,放晚自习回来还是做了出来。呵呵,计划吗。
要停电了,我快闪人。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。【图文】第7章 STC89C52单片机串行通信_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&10W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
第7章 STC89C52单片机串行通信
阅读已结束,下载本文到电脑
想免费下载本文?
登录百度文库,专享文档复制特权,积分每天免费拿!
你可能喜欢 上传我的文档
 上传文档
 下载
 收藏
粉丝量:14
该文档贡献者很忙,什么也没留下。
 下载此文档
基于AT89C51单片机的串口通信程序的设计
下载积分:750
内容提示:基于AT89C51单片机的串口通信程序的设计
文档格式:PDF|
浏览次数:77|
上传日期: 09:07:19|
文档星级:
全文阅读已结束,如果下载本文需要使用
 750 积分
下载此文档
该用户还上传了这些文档
基于AT89C51单片机的串口通信程序的设计
关注微信公众号

我要回帖

更多关于 串口通信编程 的文章

 

随机推荐