📄 st39vf040.lst
字号:
000094B7 40 F0 43 95 CALL Delay200uS
000094B9 40 F0 8E 94 CALL ProtectDisable
000094BB 40 F0 BF 94 CALL Write_ST39VF040_One_Byte;
000094BD A8 90 POP R1,R5 FROM [SP]
000094BE 90 9A RETF
//----------------------------------------------------------------------
Write_ST39VF040_One_Byte:
000094BF A8 DA PUSH R1,R5 TO [SP];
000094C0 14 99 05 70 R4 = [P_IOB_Data]
000094C2 0C B9 FF 0F R4 &= 0x0FFF
000094C4 0C A9 00 F0 R4 |= (AE_BIT_DIS|RE_BIT_DIS|WE_BIT_DIS|CE_BIT_DIS) //ALE=1,CE=1,WE=1,OE=1
000094C6 0C B9 F8 FF R4 &= 0xFFF8
000094C8 02 A9 R4 |= R2
000094C9 1C D9 05 70 [P_IOB_Data] = R4 //write AddrH
000094CB 19 D3 00 70 [P_IOA_Data] = R1 //write AddrL
000094CD 0C B9 FF 0F R4 &= 0x0FFF
000094CF 0C A9 00 E0 R4 |= (RE_BIT_DIS|WE_BIT_DIS|CE_BIT_DIS) //ALE=0,CE=1,WE=1,OE=1
000094D1 1C D9 05 70 [P_IOB_Data] = R4 //change to data
000094D3 09 B3 00 FF R1 &=0xFF00
000094D5 03 A3 R1 |=R3
000094D6 19 D3 00 70 [P_IOA_Data] = R1 //data output
000094D8 0C B9 FF 0F R4 &= 0x0FFF
000094DA 0C A9 00 20 R4 |= (RE_BIT_DIS) //ALE=0,CE=0,WE=0,OE=1
000094DC 1C D9 05 70 [P_IOB_Data] = R4
000094DE 40 F0 4A 95 CALL Delay100uS
000094E0 0C B9 FF 0F R4 &= 0x0FFF
000094E2 0C A9 00 F0 R4 |= (AE_BIT_DIS|WE_BIT_DIS|CE_BIT_DIS|RE_BIT_DIS) //ALE=1,CE=1,WE=1,OE=1
000094E4 1C D9 05 70 [P_IOB_Data] = R4
000094E6 A8 90 POP R1,R5 FROM [SP];
000094E7 90 9A RETF
//----------------------------------------------------------------------
_Read_ST39VF040_One_Word:
000094E8 A0 DA PUSH R2,R5 TO [SP]
000094E9 00 9B R5 = SP
000094EA 07 92 R1 = [R5 + 7] // [AddrL] = R1
000094EB 08 94 R2 = [R5 + 8] // [AddrH] = R2
000094EC 40 F0 03 95 CALL Read_ST39VF040_One_Byte;
000094EE 13 97 FB 01 R3 = [Read_Byte]; //read Data
000094F0 1B D7 FC 01 [Read_Byte2]=R3;
000094F2 09 43 FF FF CMP R1,0xFFFF;
000094F4 03 4E JNE INC_Addr;
000094F5 40 92 R1=0x0000;
000094F6 41 04 R2+=1;
000094F7 01 EE jmp GetNextByte;
INC_Addr:
000094F8 41 02 R1+=1;
GetNextByte:
000094F9 40 F0 03 95 CALL Read_ST39VF040_One_Byte;
000094FB 11 93 FB 01 R1=[Read_Byte];
000094FD 59 93 R1=R1 LSL 4;
000094FE 59 93 R1=R1 LSL 4;
000094FF 11 03 FC 01 R1+=[Read_Byte2];
00009501 A0 92 POP R2,R5 FROM [SP]
00009502 90 9A RETF
//----------------------------------------------------------------------
Read_ST39VF040_One_Byte:
00009503 A8 DA PUSH R1,R5 TO [SP]
00009504 14 99 05 70 R4 = [P_IOB_Data]
00009506 0C B9 FF 0F R4 &= 0x0FFF
00009508 0C A9 00 F0 R4 |= (AE_BIT_DIS|RE_BIT_DIS|WE_BIT_DIS|CE_BIT_DIS) //ALE=1,CE=1,WE=1,OE=1
0000950A 0C B9 F8 FF R4 &= 0xFFF8
0000950C 02 A9 R4 |= R2
0000950D 1C D9 05 70 [P_IOB_Data] = R4 //write AddrH
0000950F 19 D3 00 70 [P_IOA_Data] = R1 //write AddrL
00009511 0C B9 FF 0F R4 &= 0x0FFF
00009513 0C A9 00 E0 R4 |= (RE_BIT_DIS|WE_BIT_DIS|CE_BIT_DIS) //ALE=0,CE=1,WE=1,OE=1
00009515 1C D9 05 70 [P_IOB_Data] = R4 //change to data
00009517 15 9B 02 70 R5 = [P_IOA_Dir]
00009519 0D BB 00 FF R5 &= 0xFF00
0000951B 1D DB 02 70 [P_IOA_Dir] = R5
0000951D 0C B9 FF 0F R4 &= 0x0FFF
0000951F 0C A9 00 40 R4 |= (WE_BIT_DIS) //ALE=0,CE=0,WE=1,OE=0
00009521 1C D9 05 70 [P_IOB_Data] = R4
00009523 41 9A R5=0x0001
00009524 1D DB 12 70 [P_Watchdog_Clear] = R5
00009526 11 93 00 70 R1 = [P_IOA_Data] //get data
00009528 09 B3 FF 00 R1 &= 0x00FF
0000952A 19 D3 FB 01 [Read_Byte] = R1;
0000952C 15 9B 02 70 R5 = [P_IOA_Dir]
0000952E 0D AB FF 00 R5 |= 0x00FF
00009530 1D DB 02 70 [P_IOA_Dir] = R5
00009532 0C B9 FF 0F R4 &= 0x0FFF
00009534 0C A9 00 F0 R4 |= (AE_BIT_DIS|WE_BIT_DIS|RE_BIT_DIS|CE_BIT_DIS) //ALE=1,CE=1,WE=1,OE=1
00009536 1C D9 05 70 [P_IOB_Data] = R4
00009538 A8 90 POP R1,R5 FROM [SP]
00009539 90 9A RETF
///////////////////////////////////////////////////////////////
//Function : 100us Dealy for S_Flash programming time (base on CPUCLK= 24MHz)
Delay11ms:
0000953A 88 D2 push r1,r1 to [sp];
//r1=17*10;
0000953B 09 93 90 01 r1=20*20; // delay
L_LoopDelay11:
0000953D 40 F0 4A 95 call Delay100uS;
0000953F 41 22 r1-=1;
00009540 44 4E jne L_LoopDelay11
00009541 88 90 pop r1,r1 from [sp];
00009542 90 9A retf;
///////////////////////////////////////////////////////////////
//Function : 100us Dealy for S_Flash programming time (base on CPUCLK= 24MHz)
Delay200uS:
00009543 88 D2 push r1 to [sp]; //7
00009544 09 93 64 00 r1=100; //6
L_DelayLoop2:
00009546 41 22 r1-=1; //3
00009547 42 4E jne L_DelayLoop2; //5
00009548 88 90 pop r1 from [sp]; //7
00009549 90 9A retf; //12
Delay100uS:
0000954A 88 D2 push r1 to [sp]; //7
0000954B 72 92 r1=50; //6
L_DelayLoop:
0000954C 41 22 r1-=1; //3
0000954D 42 4E jne L_DelayLoop; //5
0000954E 88 90 pop r1 from [sp]; //7
0000954F 90 9A retf;
0 error(s), 0 warning(s).
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -