flash.c

来自「HC12DG128A FLASH eeprom汇编写入程序」· C语言 代码 · 共 102 行

C
102
字号
unsigned char data[1280];
unsigned char times;
unsigned char counter;
unsigned char error=0;
void flash(void)
{asm{start:movb #$8F,COPCTL;
           ldx #$00;
           ldaa #$1;
     data_load:staa data,x;
               inca;
               inx;
               cmpa #!65;
               bne data_load;
               movb #$01,MISC;
               movb #$01,PPAGE;
               ldaa #$01;
               staa FEEMCR;
               ldx #$8002;
               jsr flasherase;
               ldx #$8040;
               ldy #data;
               jsr progrow;
               ldaa #$01;
               staa FEEMCR;
     verify://movb #!32,counter;//此指令在该情况下不能正常工作
            ldaa #32;
            staa counter;			  
            ldy  #data;
            ldx  #$8040;
     verifyloop:ldd  0,x;
                 cpd  0,y;
                 bne error;
                 dec counter;
                 inx;
                 inx;
                 iny;
                 iny;
                 bra verifyloop;
      error:ldaa #$01;
      done:bra done;
      flasherase:sei;
                 ldaa #$02;
                 staa FEECTL;
                 std  0,x;
                 ldaa #$14;
                 dbne A,*;
                 ldaa #$0F;
                 staa FEECTL;
                 movb #!8,times;
                 jsr ms_delay;
                 ldaa #$80;
                 staa FEECTL;
                 ldd #$0C8;
                 dbne D,*;
                 ldaa #$00;
                 staa FEECTL;
                 ldaa #$02;
                 dbne a,*;
                 cli;
                 rts;
     progrow:sei;
              ldaa #$01;
              staa FEECTL;
              std  0,X;
    		  ldaa #$14;
              dbne A,*;
              ldaa #$09;
              staa FEECTL;
              ldaa #$0A;
              dbne A,*;
              //movb #!32,counter;
              ldaa #32;
              staa counter;
     copy_loop:movw 0,y,0,x;
               inx;
               inx;
               iny;
               iny;
               ldaa #$39;
               dbne A,*;
               dec counter;
               bne copy_loop;
               ldaa #$80;
               staa FEECTL;
               ldaa #$0A;
               dbne A,*;
               ldaa #$00;
               staa FEECTL;
               ldaa #$02;
               dbne A,*;      
               cli;  
               rts;
     ms_delay:ldaa #$4AD;
     ms_loop:subd #$01;
             bne ms_loop;
             tst times;
             nop;
             dec times;
             bne ms_delay;
             rts;
	   }
}

⌨️ 快捷键说明

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