打印

51串行通信

[复制链接]
1604|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
q136310234|  楼主 | 2010-4-10 23:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
aprilroy| | 2010-4-11 08:06 | 只看该作者
分两次发呗;

使用特权

评论回复
板凳
xymxym| | 2010-4-11 08:18 | 只看该作者
软件模拟

使用特权

评论回复
地板
John-lv| | 2010-4-11 08:50 | 只看该作者
两个组合在一起有先后顺序就可以了吧

使用特权

评论回复
5
xymxym| | 2010-4-11 09:24 | 只看该作者
说得不清不楚的,都在这瞎猜,浪费时间
是要连续传送16位数据位呢,还是连续传送两字节?是我理解有问题呢,还是你表达不清楚?
如果是1按3楼做,如果是2那就按2楼做.
越急越应该把问题描述清楚,大家才可以直奔关键,否则都在瞎猜

使用特权

评论回复
6
单片机猫| | 2010-4-11 11:20 | 只看该作者
分两次发,单片机一次只能发送八位,在接收端对数据做下处理即可

使用特权

评论回复
7
huizhixin| | 2010-4-11 12:05 | 只看该作者
利用共用体!

使用特权

评论回复
8
q136310234|  楼主 | 2010-4-11 15:10 | 只看该作者
呵呵 我也说不清楚啦  就是要传送16位二进制的数 要在数码管上显示出来 就是这样 题目

使用特权

评论回复
9
冷漠| | 2010-4-11 20:53 | 只看该作者
挺容易的。供参考:

#include "reg51.h"               
#include <absacc.h>
unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数码管编码,共阳极。
unsigned char dat;

void Init_Com(void)
{
     TMOD = 0x20;                                                        //定时器工作方式2,初值自动装入
     PCON = 0x00;                                                        //波特率不增倍
     SCON = 0x50;                                                        //串行工作方式设定                       
     TH1 = 0xFd;                                                        //定时器初值高位
     TL1 = 0xFd;                                                        //定时器初值低位
     TR1 = 1;                                                                //启动定时器                               
}
/*函数功能:LED数码管延时程序*/
void delay(void)
{
int k;
for(k=0;k<600;k++);
}
/*函数功能:LED数码管显示程序*/
void display(int k)
{
        P2=0xfe;                                                                //位选                       
        P0=tab[k/1000];                                                        //显示千位数字
        delay();                                                                //延时
        P2=0xfd;                                                                //位选
        P0=tab[k%1000/100];                                                //显示百位数字
        delay();                                                                //延时
        P2=0xfb;                                                                //位选
        P0=tab[k%100/10];                                                //显示十位数字
        delay();                                                                //延时
        P2=0xf7;                                                                //位选
        P0=tab[k%10];                                                        //显示个位数字
        delay();                                                                //延时
        P2=0xff;                                                                //位选
}
/*函数功能:主程序*/
void main()
{   
   P2=0xff;                                                                //端口初始化,关LED显示
          P0=0xff;
        Init_Com();                                                                //调用串口初始化程序
           while(1)                                                                //主循环
   {
                if ( RI )                                                        //判断是否收到数据
               {
            dat = SBUF;                                                //接收数据
            RI = 0;                                                        //软件清除标志位
                }
      display(dat-48);                                                        //显示收到的数据
   }
}

使用特权

评论回复
10
xymxym| | 2010-4-11 21:24 | 只看该作者
呵呵,又是为了应付毕业的题目吧

使用特权

评论回复
11
FDLock| | 2010-4-11 21:34 | 只看该作者
应该是用串口 +164驱动LED数码管吗,参考http://www.gec-edu.org/action-newsdetail,id-37938.html

使用特权

评论回复
12
q136310234|  楼主 | 2010-4-11 21:54 | 只看该作者
学习 不是为了毕业啊 才大二呢 呵呵

使用特权

评论回复
13
q136310234|  楼主 | 2010-4-11 22:13 | 只看该作者
9楼的  我要的是传送16位二进制,你的好像是不是只能传送8位二进制 SBUF最大是不是只能是0xff=255啊!

使用特权

评论回复
14
xymxym| | 2010-4-12 10:11 | 只看该作者
:D如果想在一个起始位和停止位序列内传送16位数据,只能软件模拟了,建议自己先动手,然后有针对性的问问题,这样回答的也有针对性,否则太笼统了,很多人不愿像我这么勤快打那么多字啊!:lol

使用特权

评论回复
15
冷漠| | 2010-4-12 11:28 | 只看该作者
9楼已经完成了90%的程序了。最后10%  LZ不想自己做?

aa=SBUF;
bb=aa&0x0F;  //屏蔽16进制高4位。
P1=tab[bb];    // 取低4位显示码显示。
bb=aa>>4;
P1=tab[bb];   //取高4位16进制显示码显示。

如何分开显示高、低位?

使用特权

评论回复
16
q136310234|  楼主 | 2010-4-12 11:31 | 只看该作者
不是我不想想,我只能到9楼那样 下面就不知道怎么写了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

18

帖子

1

粉丝