參考資訊:
http://plit.de/asem-51/
https://github.com/nimaltd/w25qxx
http://www.stcisp.com/stcisp620_off.html
https://sourceforge.net/projects/mcu8051ide/
https://www.winbond.com/resource-files/w25q64fw_revk%2007012016%20sfdp.pdf
main.s
uart_tx set p3.1 spi_cs set p3.4 spi_do set p3.5 spi_di set p3.2 spi_clk set p3.3 .org 0h jmp _start .org 100h _start: setb spi_cs setb spi_do setb spi_di setb spi_clk mov r2, #0 mov r1, #0 mov r0, #0 call w25q64_erase_sector mov r2, #0 mov r1, #0 mov r0, #0 mov a, #55h call w25q64_write_byte mov r2, #0 mov r1, #0 mov r0, #0 call w25q64_read_byte call uart_tx jmp $ w25q64_wait_busy: clr spi_cs w0: mov a, #5 call spi_txrx call spi_txrx anl a, #1 cjne a, #0, w0 setb spi_cs ret w25q64_write_enable: clr spi_cs mov a, #6 call spi_txrx setb spi_cs ret w25q64_erase_sector: push 0 push 1 push 2 call w25q64_write_enable clr spi_cs mov a, #20h call spi_txrx pop acc call spi_txrx pop acc call spi_txrx pop acc call spi_txrx setb spi_cs call w25q64_wait_busy ret w25q64_write_byte: push acc push 0 push 1 push 2 call w25q64_write_enable clr spi_cs mov a, #2h call spi_txrx pop acc call spi_txrx pop acc call spi_txrx pop acc call spi_txrx pop acc call spi_txrx setb spi_cs call w25q64_wait_busy ret w25q64_read_byte: push 0 push 1 push 2 clr spi_cs mov a, #03h call spi_txrx pop acc call spi_txrx pop acc call spi_txrx pop acc call spi_txrx call spi_txrx setb spi_cs ret spi_txrx: mov r0, #8 mov r1, a mov r2, #0 s0: clr spi_clk mov a, r1 rlc a mov r1, a jc s1 clr spi_di sjmp s2 s1: setb spi_di s2: setb spi_clk jb spi_do, s3 clr c sjmp s4 s3: setb c s4: mov a, r2 rlc a mov r2, a djnz r0, s0 mov a, r2 ret ; 57600,N,8,1 ; RC 11.0592MHz uart_tx: mov r0, #8 clr uart_tx mov r1, #44 djnz r1, $ u0: rrc a jc u1 clr uart_tx sjmp u2 u1: setb uart_tx u2: mov r1, #44 djnz r1, $ djnz r0, u0 setb uart_tx mov r1, #44 djnz r1, $ ret .end
編譯
$ mcu8051ide --compile main.s
完成