登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

麻烦达人介绍一下18片内SRAM测试方法

作者:ttjlc 栏目:单片机
麻烦达人介绍一下18片内SRAM测试方法
我指的是SRAM的bank是如何操作的,SRAM如何分区?

Access Bank?BSR?是如何一回事?

能提供资料亦可,先行谢过。

2楼: >>参与讨论
ttjlc
自己顶
static volatile near unsigned int    FSR0        @ 0xFE9;
static volatile near unsigned int    FSR1        @ 0xFE1;
#define    L_RAM_SIZE  0xEFF    //RAM容量-1//18F6720;3840byte

void ram_test(void);

void ram_test(void)
{
    FSR0 = L_RAM_SIZE;
    FSR1 = L_RAM_SIZE;
    while(FSR0)
    {
        POSTDEC0 = 0xFF;        //*FSR0=0xFF;FSR0--;
        if(FSR0<0xEF4)
        {
            if(INDF1!=0xFF)    //*FSR1
            {
                goto RAMERR;
            }
        }
        FSR1--;
    }
    INDF0 = 0xFF;
    if(INDF0!=0xFF)
    {
        goto RAMERR;
    }
    FSR0 = L_RAM_SIZE;
    FSR1 = L_RAM_SIZE;
    while(FSR0)
    {
        POSTDEC0 = 0;        //*FSR0=0xFF;FSR0--;
        if(FSR0<0xEF4)
        {
            if(INDF1!=0)        //*FSR1
            {
                goto RAMERR;
            }
        }
        FSR1--;
    }
    INDF0 = 0;
    if(INDF0!=0)
    {
        goto RAMERR;
    }
    RAMERR:NOP();
    RAMOK:NOP();
    if(FSR0!=0||FSR1!=0)
    {
        NOP();
        //RAM 出错处理;
    }
}
/*
    #asm
    RAMSET:    LFSR    0,L_RAM_SIZE    ;FSR0=L_RAM_SIZE
    NEXT:    MOVLW    0xFF
            MOVWF    _POSTDEC0    ;//写入RAM,RAM地址递减1
            MOVLW    0xF3            ;//仿真占用0EE4~0EEF
            CPFSLT    _FSR0        ;//仿真占用0EE4~0EEF
            GOTO     RESUME        ;//仿真占用0EE4~0EEF
            MOVFF    _FSR0L,_WREG    //取RAM低位地址
            MOVWF    _FSR1L            //赋RAM低位地址
            MOVFF    _FSR0H,_WREG    //取RAM高位地址
            MOVWF    _FSR1H            //赋RAM低位地址
            INFSNZ    _FSR1L            //调整RAM低位地址
            INCF        _FSR1H            //调整RAM高位地址
            MOVLW    0xFF
            CPFSEQ    _INDF1        ;//检验写入值
            GOTO     RAMERR
    RESUME:    CLRF    _WREG
            CPFSEQ    _FSR0H        ;//FSR0H==0,跳到判断FSR0L
            GOTO    NEXT
            CLRF    _WREG
            CPFSEQ    _FSR0L        ;//FSR0L==0,结束写循环NEXT
            GOTO    NEXT
            MOVLW    0xFF
            MOVWF    _INDF0        ;//写入最后一个RAM(地址0)值
            CPFSEQ    _INDF0        ;//检验最后写入值
            CLRF    _WREG
            GOTO    RAMCLR
    RAMCLR:    LFSR    0,L_RAM_SIZE;FSR0=L_RAM_SIZE
            CLRF    _WREG
    LOOP:    CLRF    _POSTDEC0    ;//写入RAM,RAM地址递减1
            MOVLW    0xF3            ;//仿真占用0EE4~0EEF
            CPFSLT    _FSR0        ;//仿真占用0EE4~0EEF
            GOTO     RESUME1        ;//仿真占用0EE4~0EEF
 &
3楼: >>参与讨论
ttjlc
sorry,c程序有错误,在测试
 
4楼: >>参与讨论
ttjlc
if(FSR0<0xEF4)应为if(FSR1<0xEF4)
 
5楼: >>参与讨论
ttjlc
ram clear
void ram_test(void)
{
    FSR0 = L_RAM_SIZE;
    FSR1 = L_RAM_SIZE;
    while(FSR0)
    {
        POSTDEC0 = 0xFF;        //*FSR0=0xFF;FSR0--;
        if(POSTDEC1!=0xFF)    //*FSR1
        {
            goto RAMERR;
        }
    }
    INDF0 = 0xFF;
    if(INDF0!=0xFF)
    {
        goto RAMERR;
    }
    FSR0 = L_RAM_SIZE;
    FSR1 = L_RAM_SIZE;
    while(FSR0)
    {
        POSTDEC0 = 0;        //*FSR0=0xFF;FSR0--;
        if(POSTDEC1!=0)        //*FSR1
        {
            goto RAMERR;
        }
    }
    INDF0 = 0;
    if(INDF0!=0)
    {
        goto RAMERR;
    }
    RAMERR:NOP();
    if(FSR0!=0||FSR1!=0)
    {
        NOP();
        //RAM 出错处理;
    }
}

* - 本贴最后修改时间:2005-5-13 8:04:28 修改者:ttjlc

参与讨论
昵称:
讨论内容:
 
 
相关帖子
16F84A的portb怎么出来的都是相同的东西?
该选哪款单片机?
请教各位高手,在使用pic异步通讯的时侯,要注意些什么??
"实际上ICD2才 450元就可以买到,"谁知道在哪里买到?
PIC16F783和PIC16F783A究竟有什么不同?换了芯片就不行。
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号