找回密码
 立即注册

QQ登录

只需一步,快速开始

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

串口通信方式0 想要从P3^0读出数据,但是读错了

[复制链接]
跳转到指定楼层
楼主
ID:51960 发表于 2013-9-5 20:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg51.h>
sbit P30=P3^0;
sbit P31=P3^1;
#define uchar unsigned char
#define uint unsigned int
uchar Data;
uint num;
void delay(uint n)
{
        uint i,j;
        for(i=0;i<n;i++)
                for(j=0;j<110;j++);
}
void serial_init()        //串口初始化函数
{
        SM0=0;         //方式0 同步移位寄存器
        SM1=0;
        ES=1;
        EA=1;
        TI=0;
}
void main()
{
        uchar i;
        serial_init();
        SBUF=0xaa;
        for(i=0;i<8;i++)
        {       
                Data=Data<<1;
                Data=Data|P30;                                               
        }
        while(1);
}
void ser()interrupt 4  //串口中断函数
{
        TI=0;
        P1=Data;
}
P1一直为0,就是我不知道怎样控制每次读数据正好是P3^0发送数据,说什么要同步通信,但是我这个只有一单片机啊,怎么同步,知道的指点一下吧,谢谢了!

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

使用道具 举报

沙发
ID:54252 发表于 2013-9-5 21:35 | 只看该作者
我也是初学,不过我没搞懂你这是想干啥,从别人的书里拷贝了一段,希望对你有帮助。
串行口方式0被称为同步移位寄存器的输入/输出方式,主要是扩展并行输入或输出口。数据有RXD(P3.0)引脚输入或输出,同步移位脉冲由TXD(P3.1)引脚输出。发送和接收均为8位数据,低位在先,高位在后,波特率固定为fosc/12。在该模式下,串行口的SBUF是作为同步移位寄存器使用的。在串行口发送时,SBUF相当于一个并行进入、串行输出的移位寄存器,由单片机内部总线并行接收8位数据,并从RXD信号线串行输出。在接收操作时,它又相当与一个串行输入、并行输出的移位寄存器。

我感觉,你的主程序里,while(1)那有问题,到while1那程序就停了。你应该把发送的数据放到while(1)里,让他循环执行发送。再其他的,我也不知道了。
回复

使用道具 举报

板凳
ID:51960 发表于 2013-9-6 14:56 | 只看该作者
我也看了这句话,但是我事先已经将他存储在了Data里了
回复

使用道具 举报

地板
ID:51960 发表于 2013-9-6 14:58 | 只看该作者
我的意思是,我怎样控制P3^0每送出一位数据,Data正好移位:
回复

使用道具 举报

5#
ID:7485 发表于 2013-9-9 17:58 | 只看该作者
你把数据装入SBUF,单片机就会自动发送出去,你就查询、等待TI置位就可以发送下一字节了。

这是发送4个字节的程序,你看看。
             for(i=0;i<4;i++)
                   {SBUF=SenData[i];
                    while(!TI);        //等待发送结束
                    TI=0;              //软件清发送中断标志位
                   }
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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