原创 CC1110 改写自身FLASH的程序[汇编源码]

2010-9-21 20:28 3454 5 7 分类: MCU/ 嵌入式

没有用汇编的经历,边学边做。写了一个CC1110改写自身FLASH的程序。为一个项目而写,觉得不错,于是把它公布在这里。请大家指点下。

程序运行后会将0x7c00之后这部分FLASH改正为0x00-0xff,周而复始,直到将这一页空间改完。一页空间指1KB。去除forver那两行,应该可以测试CC1110的FLASH可擦除次数了。

#include "ioCC1110.h"

        NAME    main //如果对到最左边则出错  

        PUBLIC  main

        ORG     0FFFEh

        DC16    main

        

        RSEG    RCODE

ADR     EQU 0x7c00;         

        DS 1

        

main    NOP

        ;复制程序到内存,在内存中从0x0A开始放置这段程序

        ;dptr0 指向内存

        MOV DPH,  #0XF2

        MOV DPL,  #0X00

        ;dptr1 指向ROM

        MOV DPH1, #HIGH(copy2FlashProcStart)

        MOV DPL1, #LOW(copy2FlashProcStart)

        

        //保存RAM中程序的首地址

        MOV DPS,#0

        PUSH DPH

        PUSH DPL

        

        MOV R4,#copy2FlashProcEnd-copy2FlashProcStart;

        ;复制@DPTR1 -> @DPTR0

copyLoop:

        MOV DPS, #0x01

        MOVX A, @DPTR

        INC DPTR

        MOV DPS, #0x00

        MOVX @DPTR, A

        INC DPTR

        DJNZ R4,copyLoop;

        

        //设置FWT寄存器

        MOV A,CLKCON

        ANL A,#0X07

        MOV R4,A

        INC R4

        MOV A,#0X44

rotate: CLR C

        RRC A

        DJNZ R4,rotate

        MOV FWT,A

        

        

        ;设置写FLASH的初始地址

        MOV A, #HIGH(ADR)

        RR A;

        MOV FADDRH,A

        MOV FADDRL,#0X00

        

        

        ;指定长度,然后开始写FLASH

        MOV R3,#02H

        MOV R4,#00H

        MOV R5,#02H

        

       ;将数据指针指向RAM程序首地址

        MOV DPS,#0;

        POP DPL

        POP DPH

                

        LCALL indirCall;

forever:

        JMP forever;

        LJMP main

        

        ;复制到内存中运行的程序,用于擦除FLASH,然后向FLASH写自数然

        

indirCall: CLR A;

        JMP @A+DPTR;

        

copy2FlashProcStart:

        MOV FCTL, #01H;

waitEraseLoop:

        MOV A,FCTL

        ANL A, #80H

        JNZ waitEraseLoop;

        MOV R0,#00H

        

        MOV FCTL, #02H

writeBlock:

        MOV A,R0

        MOV FWDATA, A

        INC R0;

        DJNZ R5,writeBlock

        MOV R5, #02H

        

waitLoop:

        MOV A,FCTL

        ANL A, #40H

        JNZ waitLoop

        

        DJNZ R4,writeBlock

        DJNZ R3,writeBlock

        

done:   RET;

copy2FlashProcEnd:      

        END     main

文章评论2条评论)

登录后参与讨论

zigbee_904218839 2010-10-13 21:35

已经回了。

用户303040 2010-10-9 13:58

请博主帮忙回答下我的问题,谢谢了
相关推荐阅读
emot 2016-06-29 23:39
想在网上直播来讲讲zigbee,大家怎么看
近来发现zigbee热度不减,不才想把所了解的zigbee都跟大家分享,大致按照这个来做。请大家提些建议,是不是还有特别重要但我遗漏的。先来攒些人,人够了我们就开。 --------------...
emot 2015-09-24 07:06
BLE 空中升级谈(二)
BLE 空中升级谈   -- CC2541 的产品开发中OAD注意事项(续)   TI CC2541支持多个硬件,多个软件对它进行空中升级,可以有不同的组合,硬件有    ...
emot 2015-09-24 07:01
BLE 空中升级谈
BLE 空中升级谈   -- CC2541 的产品开发中OAD注意事项     现在的智能设备(可穿戴,智能家居,智能玩具等)是越来越多了,大公司的产品颜值高,功能强大而完备的应该说是比比皆是,这里...
emot 2015-05-19 10:27
寻找共事的朋友[深圳科技园 嵌入式软件 可穿戴]
岗位职责:嵌入式软件工程师 招聘人数:2 简历语言要求:中文 语言能力:英语 掌握程度:熟练 工作地点:深圳南山科技园 工作待遇:面谈   工作职责: 1. 与硬件工程师合作完...
emot 2014-05-06 08:41
CC2530的通信速率实测
首先要说的是这里的测试包括了zigbee与非zigbee两种情况,测试zigbee的通信速率建议使用TI协议栈ZSTACK-2.5.1A(swrc126.zip)中的TransmitApp来进行测...
emot 2014-01-17 18:08
XBee与 RBee ZigBee透明传输模块互传测试
XBee与 RBee ZigBee透明传输模块互传测试   本次测试的目标是为了初步探索ZigBee透明传输模块的传输速率峰值范围,同时也要检查不同公司模块之间的兼容性。测试的目标是 由美国Digi提...
我要评论
2
5
关闭 站长推荐上一条 /2 下一条