⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flash.lis

📁 为日本瑞萨苏州分公司做的一个温控系统
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 0085           ;     asm("ldhx #_WriteFlash_END");//写入程序的末地址->HX 
 0085 450128            ldhx #_WriteFlash_END
 0088                   .dbline 82
 0088           ;     asm("sthx _pend");           //HX->内存变量pend
 0088 3502              sthx _pend
 008A                   .dbline 84
 008A           ;     //将写入程序从Flash区拷贝到RAM区PrgOfRam
 008A           ;     memcpy((void *)PrgOfRam,(void *)pbase,pend-pbase);
 008A B603              lda *_pend+1
 008C B005              sub *_pbase+1
 008E B700              sta *__r1
 0090 B602              lda *_pend
 0092 B204              sbc *_pbase
 0094 B700              sta *__r0
 0096 B600              lda *__r1
 0098 87                psha
 0099 B600              lda *__r0
 009B 87                psha
 009C B605              lda *_pbase+1
 009E 87                psha
 009F B604              lda *_pbase
 00A1 87                psha
 00A2 A60F              lda #<_PrgOfRam
 00A4 87                psha
 00A5 A60F              lda #>_PrgOfRam
 00A7 87                psha
 00A8 CD0000            jsr _memcpy
 00AB A706              ais #6
 00AD 95                tsx
 00AE                   .dbline 86
 00AE           ;     //在RAM区执行写入程序
 00AE           ;     asm("LDHX #_PrgOfRam");    //写入程序在RAM的首地址 
 00AE 45000F            LDHX #_PrgOfRam
 00B1                   .dbline 87
 00B1           ;     asm("jsr ,X");                       //执行RAM区的写入程序
 00B1 FD                jsr ,X
 00B2                   .dbline -2
 00B2           L9:
 00B2                   .dbline 0 ; func end
 00B2 81                rts
 00B3                   .dbsym l addr 2 i
 00B3                   .dbend
 00B3                   .dbfunc e DoWriteFlash _DoWriteFlash fV
 00B3           ;              i -> 0,X
 00B3           ;              j -> 1,X
 00B3           _DoWriteFlash::
 00B3                   .dbline -1
 00B3 A7FE              ais #-2
 00B5 95                tsx
 00B6                   .dbline 97
 00B6           ;   }
 00B6           ; /*DoWriteFlash:实际执行的写入函数----------------------*
 00B6           ; *功  能:调入内存执行擦除指定flash地址的数据            *
 00B6           ; *参  数:无                                             *
 00B6           ; *返  回:无                                             *
 00B6           ; *内部调用:延时函数delay2(用嵌入汇编调用)               *
 00B6           ; *-----------------------------------------------------*/
 00B6           ; void delay2(void);
 00B6           ; void DoWriteFlash(void)
 00B6           ;   {
 00B6                   .dbline 100
 00B6           ;     unsigned char i;
 00B6           ;     unsigned char j;    
 00B6           ;     FLCR=0b00000001;             //①1->PGM                                                    
 00B6 A601              lda #1
 00B8 C7FE08            sta 0xfe08
 00BB                   .dbline 101
 00BB           ;       i=FLBPR;               //②读FLBPR 
 00BB C6FF7E            lda 0xff7e
 00BE F7                sta ,X
 00BF                   .dbline 103
 00BF           ;                              //③任意数->faddr,选中flash行
 00BF           ;     *((volatile unsigned char *)faddr)=56; 
 00BF A638              lda #56
 00C1 5500              ldhx *_faddr
 00C3 F7                sta ,x
 00C4 95                tsx
 00C5                   .dbline 104
 00C5           ;     asm ("bsr _delay2");   //④延时10us
 00C5 AD52              bsr _delay2
 00C7                   .dbline 105
 00C7           ;     FLCR=0b00001001;       //⑤1->HVEN
 00C7 A609              lda #9
 00C9 C7FE08            sta 0xfe08
 00CC                   .dbline 106
 00CC           ;     asm ("bsr _delay2");   //⑥延时10us
 00CC AD4B              bsr _delay2
 00CE                   .dbline 108
 00CE           ;     //⑦将数据写入相应的flash地址              
 00CE           ;     for(i=0;i<N;i++)
 00CE 7F                clr ,X
 00CF 2033              bra L14
 00D1           L11:
 00D1                   .dbline 109
 00D1           ;       {                                //数据送入flash地址
 00D1                   .dbline 110
 00D1           ;          *((volatile unsigned char *)faddr+i)=FlashData[i];
 00D1 3F00              clr *__r0
 00D3 F6                lda ,X
 00D4 AB06              add #<_FlashData
 00D6 B700              sta *__r1
 00D8 B600              lda *__r0
 00DA A906              adc #>_FlashData
 00DC B700              sta *__r0
 00DE 5500              ldhx *__r0
 00E0 F6                lda ,x
 00E1 95                tsx
 00E2 B700              sta *__r1
 00E4 3F00              clr *__r2
 00E6 F6                lda ,X
 00E7 BB01              add *_faddr+1
 00E9 B700              sta *__r3
 00EB B600              lda *__r2
 00ED B900              adc *_faddr
 00EF B700              sta *__r2
 00F1 B600              lda *__r1
 00F3 5500              ldhx *__r2
 00F5 F7                sta ,x
 00F6 95                tsx
 00F7                   .dbline 111
 00F7 6F01              clr 1,X
 00F9 2002              bra L18
 00FB           L15:
 00FB                   .dbline 111
 00FB           L16:
 00FB                   .dbline 111
 00FB 6C01              inc 1,X
 00FD           L18:
 00FD                   .dbline 111
 00FD E601              lda 1,X
 00FF A106              cmp #6
 0101 25F8              blo L15
 0103                   .dbline 112
 0103           L12:
 0103                   .dbline 108
 0103 7C                inc ,X
 0104           L14:
 0104                   .dbline 108
 0104 F6                lda ,X
 0105 B10E              cmp *_N
 0107 25C8              blo L11
 0109                   .dbline 113
 0109           ;          for (j=0;j<6;j++); //⑧延时30us,不能调用延时程序
 0109           ;         }   
 0109           ;     FLCR=0b00001000;       //⑨0->PGM  
 0109 A608              lda #8
 010B C7FE08            sta 0xfe08
 010E                   .dbline 114
 010E           ;     asm ("bsr _delay2");   //⑩延时10us
 010E AD09              bsr _delay2
 0110                   .dbline 115
 0110           ;     FLCR=0b00000000;       //⑾0->HVEN  
 0110 4F                clra
 0111 C7FE08            sta 0xfe08
 0114                   .dbline 116
 0114           ;     asm ("bsr _delay2");   //⑿延时6us
 0114 AD03              bsr _delay2
 0116                   .dbline -2
 0116           L10:
 0116 A702              ais #2
 0118                   .dbline 0 ; func end
 0118 81                rts
 0119                   .dbsym l i 0 c
 0119                   .dbsym l j 1 c
 0119                   .dbend
 0119                   .dbfunc e delay2 _delay2 fV
 0119           ;              j -> 0,X
 0119           _delay2::
 0119                   .dbline -1
 0119 A7FF              ais #-1
 011B 95                tsx
 011C                   .dbline 119
 011C           ;   }
 011C           ; void delay2(void)  //延时一定时间
 011C           ;     { unsigned  char j;
 011C                   .dbline 120
 011C 7F                clr ,X
 011D 2001              bra L23
 011F           L20:
 011F                   .dbline 120
 011F           L21:
 011F                   .dbline 120
 011F 7C                inc ,X
 0120           L23:
 0120                   .dbline 120
 0120           ;       for (j=0;j<1;j++); }    
 0120 F6                lda ,X
 0121 A101              cmp #1
 0123 25FA              blo L20
 0125                   .dbline -2
 0125           L19:
 0125 A701              ais #1
 0127                   .dbline 0 ; func end
 0127 81                rts
 0128                   .dbsym l j 0 c
 0128                   .dbend
 0128                   .dbfunc e WriteFlash_END _WriteFlash_END fV
 0128           _WriteFlash_END::
 0128                   .dbline -1
 0128                   .dbline 122
 0128           ; void WriteFlash_END(void)   //写入程序的末地址
 0128           ;   { }
 0128                   .dbline -2
 0128           L24:
 0128                   .dbline 0 ; func end
 0128 81                rts
 0129                   .dbend
                        .area bss
 0000                   .dbfile Flash.c
 0000           _faddr::
 0000                   .blkb 2
 0002                   .dbsym e faddr _faddr i
 0002           _pend::
 0002                   .blkb 2
 0004                   .dbsym e pend _pend i
 0004           _pbase::
 0004                   .blkb 2
 0006                   .dbsym e pbase _pbase i
 0006           _FlashData::
 0006                   .blkb 8
 000E                   .dbsym e FlashData _FlashData A[8:8]c
 000E           _N::
 000E                   .blkb 1
 000F                   .dbsym e N _N c
 000F           _PrgOfRam::
 000F                   .blkb 1
 0010                   .dbsym e PrgOfRam _PrgOfRam A[1:1]c

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -