发 帖  
原厂入驻New
[问答]

51单片机串口通信问题

2133 单片机
分享
用12MHZ的晶振,用VB做上位机,发送数据的时候用的程序为:
LcdWriteCom(0xc0+0x0b);
LcdWriteData(IrValue[4]+0x30);       
IrValue[4]=IrValue[4]+'0';
SBUF=IrValue[4];
DelayMs(10);

SBUF加在这里lcd就不能正常显示,把SBUF去掉就没有问题了,,,请问我该怎么办才能让VB接到发送的数组中的元素呢
0
2014-5-25 17:24:09   评论 分享淘帖 邀请回答
5个回答
你有没有用串口中断啊,是不是进入中断出不来了。
2014-5-25 19:23:15 评论

举报



依然落叶飘零 发表于 2014-5-25 19:23
你有没有用串口中断啊,是不是进入中断出不来了。



没有串口中断,
2014-5-25 21:13:10 评论

举报

把IrValue[4]=IrValue[4]+'0'这句去掉看看能不能
2014-5-25 23:21:43 评论

举报

建议把完整程序发上来看看!
2014-5-26 10:49:31 评论

举报



BBOYBL 发表于 2014-5-26 10:49
建议把完整程序发上来看看!



#include<reg51.h>
#include"lcd.h"

sbit IRIN=P3^2;

unsigned char code CDIS1[16]={" ZZY 1003020134 "};
unsigned char code CDIS2[16]={" RED/CODE: -- H "};
unsigned char IrValue[6];
unsigned char Time;
void IrInit();
//void getch();
void DelayMs(unsigned int );
unsigned char a;
void initmpu(void)//??????????????
                   //11.0592MH???,???9600,?????
{
        TMOD=0x21;//???1?????2
        TL1=0xf3;        //??????
        TH1=0xf3;
        SCON=0x50;        //????????1,?????
        PCON=0x80;//????????
       
        IE=0x90;//????,?????
        TR1=1;//?????1
}


/*******************************************************************************
* º¯ÊýÃû         : main
* º¯Êý¹¦ÄÜ                   : Ö÷º¯Êý
* ÊäÈë           : ÎÞ
* Êä³ö                  : ÎÞ
*******************************************************************************/

void main()
{
        unsigned char i;
        initmpu();
        IrInit();       
        LcdInit();
        LcdWriteCom(0x80);
        for(i=0;i<16;i++)
        {
                LcdWriteData(CDIS1);       
        }
        LcdWriteCom(0x80+0x40);
        for(i=0;i<16;i++)
        {
                LcdWriteData(CDIS2);       
        }
        while(1)
        {
       
                IrValue[4]=IrValue[2]>>4;                          //¸ßλ
                IrValue[5]=IrValue[2]&0x0f;                //µÍλ       
                if(IrValue[4]>9)
                {
                        LcdWriteCom(0xc0+0x0b);                        //ÉèÖÃÏÔʾλÖÃ
                        LcdWriteData(0x37+IrValue[4]);        //½«Êýֵת»»Îª¸ÃÏÔʾµÄASCIIÂë
      IrValue[4]=IrValue[4]+0x37;
                       
                        SBUF=IrValue[4];
                        DelayMs(10);
                }
                else
                {
                        LcdWriteCom(0xc0+0x0b);
                        LcdWriteData(IrValue[4]+0x30);        //½«Êýֵת»»Îª¸ÃÏÔʾµÄASCIIÂë
      IrValue[4]=IrValue[4]+'0';
                        SBUF=IrValue[4];
                        DelayMs(10);
                }               
                if(IrValue[5]>9)
                {
                        LcdWriteCom(0xc0+0x0c);
                        LcdWriteData(IrValue[5]+0x37);                //½«Êýֵת»»Îª¸ÃÏÔʾµÄASCIIÂë
            IrValue[5]=IrValue[5]+0x37;
                       
                        SBUF=IrValue[5];
                        DelayMs(10);
                }
                else
                {
                        LcdWriteCom(0xc0+0x0c);
                        LcdWriteData(IrValue[5]+0x30);                //½«Êýֵת»»Îª¸ÃÏÔʾµÄASCIIÂë
                  IrValue[5]=IrValue[5]+'0';
                       
                        SBUF=IrValue[5];
                        DelayMs(10);
                }       
        }
}                                                                         
/*******************************************************************************
* º¯ÊýÃû         : DelayMs()
* º¯Êý¹¦ÄÜ                   : ÑÓʱ
* ÊäÈë           : x
* Êä³ö                  : ÎÞ
*******************************************************************************/

void DelayMs(unsigned int x)   //0.14msÎó²î 0us
{
        unsigned char i;
        while(x--)
        {
                for (i = 0; i<13; i++)
                {}
        }
}
/*******************************************************************************
* º¯ÊýÃû         : IrInit()
* º¯Êý¹¦ÄÜ                   : ³õʼ»¯ºìÍâÏß½ÓÊÕ
* ÊäÈë           : ÎÞ
* Êä³ö                  : ÎÞ
*******************************************************************************/

void IrInit()
{
        IT0=1;//ϽµÑØ´¥·¢
        EX0=1;//´ò¿ªÖжÏ0ÔÊÐí
        EA=1;        //´ò¿ª×ÜÖжÏ

        IRIN=1;//³õʼ»¯¶Ë¿Ú
}
/*******************************************************************************
* º¯ÊýÃû         : ReadIr()
* º¯Êý¹¦ÄÜ                   : ¶ÁÈ¡ºìÍâÊýÖµµÄÖжϺ¯Êý
* ÊäÈë           : ÎÞ
* Êä³ö                  : ÎÞ
*******************************************************************************/

void ReadIr() interrupt 0
{
        unsigned char j,k;
        unsigned int err;
        Time=0;                                         
        DelayMs(70);

        if(IRIN==0)                //È·ÈÏÊÇ·ñÕæµÄ½ÓÊÕµ½ÕýÈ·µÄÐźÅ
        {         
               
                err=1000;                                //1000*10us=10ms,³¬¹ý˵Ã÷½ÓÊÕµ½´íÎóµÄÐźÅ
                /*µ±Á½¸öÌõ¼þ¶¼ÎªÕæÊÇÑ­»·£¬Èç¹ûÓÐÒ»¸öÌõ¼þΪ¼ÙµÄʱºòÌø³öÑ­»·£¬ÃâµÃ³ÌÐò³ö´íµÄʱ
                ºî£¬³ÌÐòËÀÔÚÕâÀï*/       
                while((IRIN==0)&&(err>0))        //µÈ´ýÇ°Ãæ9msµÄµÍµçƽ¹ýÈ¥                 
                {                       
                        DelayMs(1);
                        err--;
                }
                if(IRIN==1)                        //Èç¹ûÕýÈ·µÈµ½9msµÍµçƽ
                {
                        err=500;
                        while((IRIN==1)&&(err>0))                 //µÈ´ý4.5msµÄÆðʼ¸ßµçƽ¹ýÈ¥
                        {
                                DelayMs(1);
                                err--;
                        }
                        for(k=0;k<4;k++)                //¹²ÓÐ4×éÊý¾Ý
                        {                               
                                for(j=0;j<8;j++)        //½ÓÊÕÒ»×éÊý¾Ý
                                {

                                        err=60;               
                                        while((IRIN==0)&&(err>0))//µÈ´ýÐźÅÇ°ÃæµÄ560usµÍµçƽ¹ýÈ¥
                                        {
                                                DelayMs(1);
                                                err--;
                                        }
                                        err=500;
                                        while((IRIN==1)&&(err>0))         //¼ÆËã¸ßµçƽµÄʱ¼ä³¤¶È¡£
                                        {
                                                DelayMs(1);//0.14ms
                                                Time++;
                                                err--;
                                                if(Time>30)
                                                {
                                                        EX0=1;
                                                        return;
                                                }
                                        }
                                        IrValue[k]>>=1;         //k±íʾµÚ¼¸×éÊý¾Ý
                                        if(Time>=8)                        //Èç¹û¸ßµçƽ³öÏÖ´óÓÚ565us£¬ÄÇôÊÇ1
                                        {
                                                IrValue[k]|=0x80;
                                        }
                                        Time=0;                //ÓÃÍêʱ¼äÒªÖØи³Öµ                                                       
                                }
                        }
                }
                if(IrValue[2]!=~IrValue[3])
                {
                        return;
                }
        }                       
}
这是一个红外解码程序

2014-5-26 22:37:42 评论

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
我要提问
关闭

站长推荐 上一条 /8 下一条

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