音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

請教串口通訊問題

作者:莊莊 欄目:單片機
請教串口通訊問題
本人編寫了一段單片機和計算機串口通訊程序,單獨這段程序調(diào)試正常,計算機接收數(shù)據(jù)正確,加上液晶顯示程序后,接收到的數(shù)據(jù)全都不正確,而且有時接收不到數(shù)據(jù)。請問這是為什么?
請高手指教,謝謝

2樓: >>參與討論
javie
你確認?
是不是你的LCD顯示程序有問題呢?

3樓: >>參與討論
莊莊
謝謝,液晶程序?
液晶程序在51上運行很正常,但是我換了MSC1210后就不行了,程序有時不執(zhí)行,有時執(zhí)行,不知道為什么,我查不出液晶程序有什么毛病,我現(xiàn)在用的就是MSC1210單片機,串口通訊正常,加上液晶后就不行,MSC1210單片機和51單片機我應(yīng)該注意什么?

4樓: >>參與討論
zoupeng139
你顯示用到中斷了沒?
??


5樓: >>參與討論
zoupeng139
要是用到中斷就看看優(yōu)先級之類的
呵呵

6樓: >>參與討論
夏蟲
同意樓上說的
要是你的串口數(shù)據(jù)重要,你就把串口中斷的優(yōu)先級設(shè)為最高

7樓: >>參與討論
莊莊
謝謝大家,我的液晶程序沒有中斷
我觀察液晶顯示情況,好像是中斷沒有返回,或是一直在處理中斷,我該怎么做?

8樓: >>參與討論
莊莊
大家?guī)蛶兔ρ?br> 
9樓: >>參與討論
莊莊
我的串口程序為:
#include <\ti\reg1210.h>
#include <string.h>

#define INBUF_LEN 4   //數(shù)據(jù)長度

#pragma asm
        CSEG    AT     0807EH
        DB     11111100b         //HCR1 Enable external MEMORY
        DB     11111110b         //HCR0 1K data FLASH
#pragma endasm

unsigned CHAR inbuf1[INBUF_LEN];
unsigned CHAR count3;
bit           read_flag=0;

void init_serialcomm(void)
{
    SCON0= 0x50;       //SCON: serail mode 1, 8-bit UART, enable ucvr
    TMOD = 0x20;       //TMOD: timer 1, mode 2, 8-bit reload
    PCON = 0x80;       //SMOD=1;
    TH1  = 0xEC;       //Baud:9600  fosc=11.0592MHZ
    IE   = 0x90;       //Enable Serial Interrupt
    TR1  = 1;          //timer 1 run
   // TI=1;
}

//向串口發(fā)送一個字符
void send_CHAR_com(unsigned CHAR ch)  
{
    SBUF0=ch;
    while(TI==0);
    TI=0;
}

//向串口發(fā)送一個字符串,strlen為該字符串長度
void send_string_com(unsigned CHAR *str,unsigned int strlen)
{
    unsigned int k=0;
    do
    {
        send_CHAR_com(*(str + k));
        k++;
    } while(k < strlen);
}


//串口接收中斷函數(shù)
void serial () interrupt 4 using 3
{
    EA=0;
    if(RI)
    {
        unsigned CHAR ch;
        RI = 0;
        ch=SBUF0;
        if(ch>127)
        {
             count3=0;
             inbuf1[count3]=ch;
        }
        else
        {
             count3++;
             inbuf1[count3]=ch;

             if(count3==(INBUF_LEN-1))
             {
                 read_flag=1;  //如果串口接收的數(shù)據(jù)達到INBUF_LEN個,且校驗沒錯,
                               //就置位取數(shù)標志
             }
        }
    }
    EA=1;
}


main()
{
    init_serialcomm();  //初始化串口
    CKCON=0x17;
    while(1)
    {
          if(read_flag)  //如果取數(shù)標志已置位,就將讀到的數(shù)從串口發(fā)出
          {
               read_flag=0; //取數(shù)標志清0
               send_string_com(inbuf1,INBUF_LEN);
               
          }
    }

}

10樓: >>參與討論
yjs1314
你試試看在串口中斷中屏蔽其他的中斷
在主程序中只開放串口中斷!

11樓: >>參與討論
莊莊
我在程序中寫了
IE   = 0x90;     只開放串口中斷
但是還不行。

12樓: >>參與討論
莊莊
自己頂
大家?guī)蛶兔ρ?br>
13樓: >>參與討論
zoupeng139
你把串行中斷程序優(yōu)先級設(shè)置為高試一下
呵呵
原來我業(yè)碰到過單獨可以放在一塊就不行了,不過我那個不是顯示程序
請問你那顯示程序多大啊
我現(xiàn)在用的20K的程序存儲器也用到夜晶了
不知道空間夠不夠

14樓: >>參與討論
莊莊
優(yōu)先級設(shè)置過了,不行
液晶顯示程序和字庫大概10K,字庫自己定義,根據(jù)需要自己定義。

15樓: >>參與討論
zoupeng139
謝謝
10K是不是編譯后的啊?
中斷的問題俺也不知道,解決了沒?

16樓: >>參與討論
莊莊
是編譯后的
 
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
我想用單片機一只引腳來控制關(guān)斷自己的電源
請問:數(shù)據(jù)存儲器在片選選通時是不是高阻態(tài)?
凌陽單片機資料
Keil uVision2軟件調(diào)試模式中找不到MCU的RAM單元啊,求助~
不行了!我都暈了!關(guān)于51的io口
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號