最新免费av在线观看,亚洲综合一区成人在线,中文字幕精品无码一区二区三区,中文人妻av高清一区二区,中文字幕乱偷无码av先锋

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

STC 疑似BUG報(bào)告

作者:xihulu_r 欄目:單片機(jī)
STC 疑似BUG報(bào)告
以下是經(jīng)過初步測試及對照W77E58測試發(fā)現(xiàn)的差異,還望各位DX幫忙確認(rèn),如果是程序的問題,也請幫忙提出改進(jìn)辦法,謝謝!

測試內(nèi)容:在大編譯模式下,測試串口緩沖隊(duì)列的收發(fā),及數(shù)據(jù)識(shí)別。

測試方式:
1. 在xdata區(qū)建立串口收發(fā)緩沖隊(duì)列,收發(fā)隊(duì)列各32 Byte
2. 通訊格式定義:57600,8,N,1
3. 程序功能:識(shí)別收到的'A'后置標(biāo)識(shí)位,之后收到0x0d,發(fā)送字符串"TEST\r\n",并清除標(biāo)識(shí)位

現(xiàn)象:
1. 小模式下正常;
2. 大模式下,少量數(shù)據(jù)正常;
3. 大模式下,先發(fā)送'A',之后連續(xù)發(fā)送0x55,(如用鍵盤控制串口調(diào)試助手,持續(xù)發(fā)送2秒以上,累計(jì)大于1000 Byte),再發(fā)送0x0d,程序無法識(shí)別;之后再發(fā)送4-9 Byte數(shù)據(jù),程序識(shí)別到先前發(fā)送的0x0d, 并給出字符串TEST\r\n;

對照試驗(yàn):W77E58,同等條件下測試均正常。

特別說明:startup.a51設(shè)置為

IDATALEN    EQU    0FFH+1    ; the length of IDATA MEMORY in bytes.
;
XDATASTART    EQU    0H    ; the absolute start-address of XDATA MEMORY
XDATALEN    EQU    03FFH+1    ; the length of XDATA MEMORY in bytes.

在其中定義W77E58的PMR,并添加

STARTUP1:
                ORL     PMR, #01        ; W77E58 XDATA enable   
        ......
附一:主程序
#include "define.h"

sbit  LIGHT = P3^4;
sbit    DOG = P3^5;

uchar  Time100ms;
uchar  Time1s;
bit    Flag100ms;
bit    Flag1s;

/**************************************************
    串口隊(duì)列
**************************************************/
uchar xdata RcvBuf[SerialRCV];
uchar xdata SendBuf[SerialSEND];

uchar *RcvRead = RcvBuf;   
uchar *RcvWrite = RcvBuf;
uchar RcvNum;                    

uchar *SendRead = SendBuf;
uchar *SendWrite = SendBuf;
uchar SendNum;
bit   FlagSendOK;

void  InitialCPU    (void);
void  PushSend      (uchar byte);
uchar PopRcv        (void);

main()
{
    InitialCPU ();
    
    while(1)
    {
        if(Flag100ms)
        {
            Flag100ms = 0;
            DOG = ~DOG;
        }     
        
        if(Flag1s)
        {
            Flag1s = 0;
            LIGHT = ~LIGHT;
        }
    
        while(RcvNum)
        {
            DealSerial(PopRcv());
        }
    }
}

/**************************************************
    初始化CPU資源
**************************************************/
void InitialCpu(void)
{
    SCON  = 0x50;
    PCON |= 0x80;   // SMOD = 1;
    TMOD  = 0x21;
    TH1   = 0xff;
    TL1   = 0xff;
    TR1   = 1;

    TH0 = - 2320 / 256;
    TL0 = - 2320 % 256;
    TR0 = 1;
    EA  = 1;
    ET0 = 1;
    ES0 = 1;
}

/**************************************************
    時(shí)間片 1ms
**************************************************/
void time_chip() interrupt 1 using 1
{
    TH0 = - 2320 / 256;
    TL0 = - 2320 % 256;
   
    if(++Time100ms % 100 == 0)
    {
        Flag100ms = 1;
            
        if(++Time1s % 10 == 0)
        {
            Time1s = 0;
            Flag1s = 1;
        }            
    }
}

/**************************************************
    壓入單數(shù)據(jù)串口0發(fā)送隊(duì)列
**************************************************/
void PushSend(uchar byte)
{
    *SendWrite = byte;
    
    if(SendWrite == (SendBuf + SerialSEND - 1))   
    {
        SendWrite = SendBuf;        
    }
    else
    {
        SendWrite++;       
    }

    SendNum++;                 
    
    if(!FlagSendOK)            
    {
        FlagSendOK = 1;
        TI = 1;
    }
}

/**************************************************
    彈出串口0接收隊(duì)列單數(shù)據(jù)
**************************************************/
uchar PopRcv(void)
{
    uchar i;
  
    i = *RcvRead;      
  
    if(RcvRead == (RcvBuf + SerialRCV - 1))
    {
        RcvRead = RcvBuf;                  
    }
    else
    {
        RcvRead++;      
    }

    RcvNum--;              

    return (i);                    
}

/**************************************************
 &n
2樓: >>參與討論
wincpu
關(guān)注
 
3樓: >>參與討論
chunyang
應(yīng)是程序結(jié)構(gòu)有問題
MCU本身只要串口能夠受控收發(fā)即可證明該部分基本無誤,從你的現(xiàn)象看應(yīng)是存儲(chǔ)器操作有誤。

4樓: >>參與討論
xihulu_r
程序都貼出來了,您覺得是哪兒有問題呢?
這段程序在小模式下是可以的,W77E58在大模式/小模式下都可以正常,您覺得結(jié)構(gòu)應(yīng)該怎么改進(jìn)呢?

其實(shí)我也希望是程序的問題,一方面已經(jīng)有很多STC在用了,另一方面對俺也是一次提高。

不過芯片有時(shí)候是說不清楚的,上個(gè)月剛測試完新茂的SM89T16R1,雙串口的那個(gè),結(jié)果新茂的工程師承認(rèn)目前版本的芯片在操作xdata時(shí)如果產(chǎn)生中斷,CPU會(huì)死機(jī)復(fù)位.....

希望能有好結(jié)果吧,呵呵 :)

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
真的過時(shí)了?
關(guān)于反匯編請教高手們
我想做一個(gè)循跡頭
電路板需要接兩節(jié)電池,有這樣的座么?
高手解答一下keil printf 函數(shù)?
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號