(MCU 8051) STC15W104 >> Assembly

EEPROM


STC15W104本身配置有1K Bytes的EEPROM,算一算STC-MCU還是很良心,竟然配置EEPROM給使用者使用,不過比較遺憾的是STC15W104並沒有辦法自己修改自己的Flash Program,這個功能只有在IAP系列的IC才可以使用,不然司徒還真想寫一個精簡的Bootloader給STC15W104使用,畢竟目前stcgal還無法支援STC15W104燒錄,所以司徒想在N900上面開發的想法,似乎破功,而若要使用逆向去搞,還真的需要一些時間,不過至少目前先把EEPROM功能用好,再慢慢來移植一些好玩的東西。

跟EEPROM有關的暫存器如下

P.S. 在寫入EEPROM資料前,必須先做Erase的動作,而EEPROM動作後,記得Disable IAP功能。

main.s

  led       set p3.2
  uart_tx   set p3.1
  iap_data  set 0c2h
  iap_addrh set 0c3h
  iap_addrl set 0c4h
  iap_cmd   set 0c5h
  iap_trig  set 0c6h
  iap_contr set 0c7h
 
  .org 0h
  jmp _start
     
  .org 100h
_start:
  setb led
  mov r0, #00h
  mov r1, #00h
  call eeprom_erase
  mov r0, #00h
  mov r1, #00h
  mov r2, #55h
  call eeprom_write
  mov r0, #00h
  mov r1, #00h
  call eeprom_read
  call uart_send
  clr led
  jmp $

eeprom_disable:
  mov iap_contr, #00h
  mov iap_cmd, #00h
  mov iap_trig, #00h
  mov iap_addrh, #80h
  mov iap_addrl, #00h
  ret

eeprom_erase:
  mov iap_addrh, r1
  mov iap_addrl, r0
  mov iap_contr, #83h
  mov iap_cmd, #3
  mov iap_trig, #5ah
  mov iap_trig, #0a5h
  nop
  call eeprom_disable
  ret

eeprom_read:
  clr iap_data
  mov iap_addrh, r1
  mov iap_addrl, r0
  mov iap_contr, #83h
  mov iap_cmd, #1
  mov iap_trig, #5ah
  mov iap_trig, #0a5h
  nop
  mov a, iap_data
  call eeprom_disable
  ret

eeprom_write:
  mov iap_data, r2
  mov iap_addrh, r1
  mov iap_addrl, r0
  mov iap_contr, #83h
  mov iap_cmd, #2
  mov iap_trig, #5ah
  mov iap_trig, #0a5h
  nop
  call eeprom_disable
  ret

uart_send:
  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

完成


返回上一頁