关于松翰单片机的OTP可重复烧写的技巧!

[复制链接]
sandao | 2011-3-1 12:49:54 | 显示全部楼层
要用到设计里面,还是比较麻烦············
bangjg | 2011-3-2 17:29:03 | 显示全部楼层
好人呀,收徒弟不?
YGMAABB | 2011-4-4 00:19:40 | 显示全部楼层
/********************************************************
;程序名称:2501B-LED
;功能描述:I/O输出实验,用I/O输出控制LED发光
;作者:    虞高明
********************************************************/
CHIP        SN8P2501B
//{{SONIX_CODE_OPTION
        .Code_Option        LVD                LVD_H                ; 2.4V Reset Enable LVD36 bit of PFLAG for 3.6V Low Voltage Indicator
        .Code_Option        Reset_Pin        P11
        .Code_Option        Watch_Dog        Always_On
        .Code_Option        High_Clk        4M_X'tal        ; Crystal/Resonator: 2Mhz~10Mhz
        .Code_Option        Fcpu                #2     ; Fcpu = Fosc/4
        .Code_Option        Security        Enable
        .Code_Option        Noise_Filter        Disable
//}}SONIX_CODE_OPTION
;包含文件区
.nolist
        includestd  macro1.h
        includestd  macro2.h
        includestd  macro3.h
;ram变量定义
.data
;变量定义区(bank0)
        org     00h
;通用寄存器
        rwk1   ds    1
        rwk2   ds    1
        rwk3   ds    1
;         rwk4   ds    1
;         rwk5   ds    1
        timec  ds   1   ;定时时间变量
;程序代码开始
.CODE
        ORG        00h
        jmp        init
        ORG        8h
        jmp        main

        ORG        10h
init:

        MOV A, #0FFH  ; 所有端口设为输出模式
            B0MOV P0M, A  
           B0MOV P1M, A  
        B0MOV    P2M,A
           B0MOV P5M, A  
        bclr        p1.2
        bclr        p1.3

main:
        bclr        p1.2
        bclr        p1.3
        bclr        p2.1
        call        delay_125ms
        bset        p2.1
        call        delay_125ms
        bclr        p2.2
        call        delay_125ms
        bset        p2.2
        call        delay_125ms
        jmp     main

delay_125ms:
      mov        a,#20
        mov        rwk1,a
delay1:        
        mov        a,#15
        mov        rwk2,a
delay2:
        mov        a,#15
        mov        rwk3,a
delay3:
        decms        rwk3
        jmp        delay3
        decms        rwk2
        jmp        delay2
        decms        rwk1
        jmp        delay1
        ret


        ret
        endp
























        endp
落月无声 | 2011-4-5 20:08:08 | 显示全部楼层
针对函数可能出错我一般是这样处理的
在程序中用一个文件如“SAVE_ROM”,在里面存放你还剩的空间,“SAVE_ROM”是个主函数里的子函数,系统每跑一圈都去调用它
;预留空间
SAVE_ROM:
//......................................;
        ret
dw        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff
这里的“0xffff”是一字节,你可以用任何语句去代换它,你可以在里面写个函数,它好比是个保险丝,还完好无缺,如果你在烧录程序后发现那条语句不对,你可以屏蔽它,用一个NOP来代替,而NOP

好比是完全烧断的, 比如一条语句的烧录后是 0xfffe,而你就可以用0x0000去代替它,而不能够用oxffff去代替,只能够用0代替1,而不能够反之
我的主函数一般是调用子函数,烧录后如果感觉那个不正确,就用nop去代替它,在SAVE_ROM里用一个nop去代替ret,重新写你所不要的那个函数。
////////////////////////////////////////////////////////////////////////////////
针对子函数可能出错你可以这样
//******************************************************;AD大         
ad_check_charge_30:
        jmp        @F
dw        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff       
@@:
这是我的一个子函数,如果在@@后出现问题,我这样
//        jmp        @F
        nop
        CALL        ad_check_charge_30_10
        jmp        ad_check_charge_90:
dw        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff;        0xffff        0xffff       
@@:
        “@@”后面的我就不执行了,只执行“ad_check_charge_30_10 ”而“ad_check_charge_30_10 这个函数就可以在SAVE_ROM:写了,只要屏蔽0xffff就可以了(不过要根据的语句条数去

屏蔽项运应的0xffff的条数)
////////////////////////////////////////////////////////////////////////////////
针对一些关键数据可能会更改的,如采样AD,我一般都是先定义变量,如:
比如b_ad_buf1后面客户需要更改,那我就在code_ROM里直接赋值就可以了(不过要把jmp        code_ROM_90屏蔽掉)
//**************************************;数据初始化  
init_data:
        mov_        b_ad_buf1,#236                ;时间到充满        2.770v--#236
        mov_        b_ad_buf2,#241                ;IO到充满        2.820v--#241
        mov_        b_ad_buf3,#187                ;低压                2.195v--#187
        mov_        b_ad_buf4,#19                ;过流                0.220v--#19
        mov_        b_ad_buf5,#56                ;NTC低温        0.614v--56
        mov_        b_ad_buf6,#52                ;NTC高温        0.652v--52
//**************************************;初始化预留空间  
init_ROM:
        call        code_ROM
//**************************************;  
        ret
////////////////////////////////////////;
code_ROM:
        jmp        code_ROM_90
//**************************************
dw        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff
dw        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff
dw        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff
dw        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff
dw        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff
dw        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff
dw        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff
dw        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff
dw        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff
dw        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff        0xffff
;
//**************************************
code_ROM_90:
        ret
////////////////////////////////////////////////////////////////////////////////
由于时间有限,只能够编辑到这里,如需讨论,请联系:mzh524@126.com
宁静 | 2011-8-7 16:38:48 | 显示全部楼层
很好 今天又长见识了  谢谢
灬吢棂徔窻づ | 2011-8-11 20:08:24 | 显示全部楼层
试一下   看看可不可以  呵呵~
b21516111 | 2011-8-24 22:54:04 | 显示全部楼层
很好,很强大啊
yang | 2011-9-6 08:11:29 | 显示全部楼层
学习了,很不错,可以继续发表多点学习资料吗
tralia | 2011-9-15 15:48:27 | 显示全部楼层
又学了一招,哈哈
mcu开发 | 2011-9-17 10:04:52 | 显示全部楼层
确实该顶一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则