📄 serial-eeprom-example.asm
字号:
mov th1, #baud_const orl PCON,#10000000b ; set double baud rate MOV TMOD,#00100001b ; T0=16 bit, T1=8 bit auto reload ; both are timers, software control MOV SCON,#01010010b ; Set Serial for mode 1 & ; Enable reception, ti=1, ri=0 ORL TCON,#01010101b ; Start both timers, both int are ; falling edge trigger mov dptr, #welcome acall pstr ajmp mainwelcome:.db "Serial EEPROM tester",13,10,13,10,0 ;********************************************************; and here's where all the dirty work is done;********************************************************read: ;r0 is word address to read, data is returned in ;r2 (lsb) and r3 (msb) clr pre setb cs nop clr sk setb di ;the start bit setb sk clr sk nop setb sk ;another '1' clr sk clr di ;and a '0' setb sk mov r4, #6 mov a, r0 rl a rl aread2: rlc a clr sk mov di, c ;and do each address bit setb sk djnz r4, read2 clr di mov r4, #8 clr aread3: clr sk nop setb sk mov c, do rlc a djnz r4, read3 mov r3, a mov r4, #8 clr aread4: clr sk setb sk mov c, do rlc a djnz r4, read4 mov r2, a clr cs clr di ret;********************************************************write: ;r0 is word address to write, r2 (lsb) and r3 (msb) clr pre setb pe setb cs nop clr sk setb di ;the start bit setb sk clr sk clr di ;a '0' setb sk clr sk setb di ;a '1' setb sk mov r4, #6 mov a, r0 rl a rl awrite2: rlc a clr sk mov di, c ;and do each address bit setb sk djnz r4, write2 mov a, r3 mov r4, #8write3: clr sk rlc a mov di, c setb sk djnz r4, write3 mov a, r2 mov r4, #8write4: clr sk rlc a mov di, c setb sk djnz r4, write4 clr di clr cs nop setb cs nop nopwrite5: mov c, do jnc write5 nop clr cs ret;********************************************************pren: ;enable the protection register (for next cycle) setb pre setb pe setb cs nop clr sk setb di ;the start bit setb sk clr sk clr di ;a '0' setb sk clr sk clr di ;a '0' setb sk clr sk setb di ;a '1' setb sk clr sk setb di ;a '1' setb sk clr sk clr di ;a '0' setb sk clr sk clr di ;a '0' setb sk clr sk clr di ;a '0' setb sk clr sk clr di ;a '0' setb sk clr cs clr pre ret;********************************************************prclear: setb pre setb pe setb cs nop clr sk setb di ;the start bit setb sk clr sk setb di ;a '1' setb sk clr sk setb di ;a '1' setb sk clr sk setb di ;a '1' setb sk clr sk setb di ;a '1' setb sk clr sk setb di ;a '1' setb sk clr sk setb di ;a '1' setb sk clr sk setb di ;a '1' setb sk clr sk setb di ;a '1' setb sk clr di clr cs clr pre nop setb cs nop nopprclr5: mov c, do jnc prclr5 nop clr cs ret;********************************************************prds: ;permantly fix protect register!!! setb pre setb pe setb cs nop clr sk setb di ;the start bit setb sk clr sk clr di ;a '0' setb sk clr sk clr di ;a '0' setb sk clr sk clr di ;a '0' setb sk clr sk clr di ;a '0' setb sk clr sk clr di ;a '0' setb sk clr sk clr di ;a '0' setb sk clr sk clr di ;a '0' setb sk clr sk clr di ;a '0' setb sk clr cs clr pre nop setb cs nop nopprds5: mov c, do jnc prds5 nop clr cs ret;********************************************************prwrite: ;r0 is address to write into protect register setb pre setb pe setb cs nop clr sk setb di ;the start bit setb sk clr sk clr di ;a '0' setb sk clr sk setb di ;a '1' setb sk mov r4, #6 mov a, r0 rl a rl aprwrt2: rlc a clr sk mov di, c ;and do each address bit setb sk djnz r4, prwrt2 clr di clr cs clr pre nop setb cs nop nopprwrt5: mov c, do jnc prwrt5 nop clr cs ret;********************************************************wen: ;enable writing clr pre setb pe setb cs nop clr sk setb di ;the start bit setb sk clr sk clr di ;a '0' setb sk clr sk clr di ;a '0' setb sk clr sk setb di ;a '1' setb sk clr sk setb di ;a '1' setb sk clr sk clr di ;a '0' setb sk clr sk clr di ;a '0' setb sk clr sk clr di ;a '0' setb sk clr sk clr di ;a '0' setb sk clr cs clr pre ret;********************************************************wds: ;disable writing clr pre setb pe setb cs nop clr sk setb di ;the start bit setb sk clr sk clr di ;a '0' setb sk clr sk clr di ;a '0' setb sk clr sk setb di ;a '1' setb sk clr sk setb di ;a '1' setb sk clr sk clr di ;a '0' setb sk clr sk clr di ;a '0' setb sk clr sk clr di ;a '0' setb sk clr sk clr di ;a '0' setb sk clr cs clr pre ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -