PIC12F1822 >> Assembly

Flash Memory


暫存器


注意事項:
1. 操作以row為單位,一個row代表16 bits
2. 寫入資料固定為14 bits,最高的兩個bits無法寫入
3. 最多可以連續寫入16 bytes

main.s

  list p=12f1822, r=hex
  #include <p12f1822.inc>
  __config _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _MCLRE_OFF
  __config _CONFIG2, _LVP_OFF

  #define LED 0x00
 
  org 0x0000
  goto start

  org 0x0100
start:
  banksel TRISA
  bcf TRISA, LED
   
  banksel LATA
  movlw 0xff
  movwf LATA

write:
  banksel EEADRL
  movlw 0x00
  movwf EEADRL
  movlw 0x07
  movwf EEADRH
  call flash_erase_word
  
  banksel EEADRL
  movlw 0x00
  movwf EEADRL
  movlw 0x07
  movwf EEADRH
  movlw 0x34
  movwf EEDATL
  movlw 0x12
  movwf EEDATH
  call flash_write_word

verify:
  banksel EEADRL
  movlw 0x00
  movwf EEADRL
  movlw 0x07
  movwf EEADRH
  call flash_read_word

  banksel EEADRL
  movlw 0x34
  xorwf EEDATL, w
  btfss STATUS, Z
  goto led_off

  banksel EEADRH
  movlw 0x12
  xorwf EEDATH, w
  btfss STATUS, Z
  goto led_off

  banksel LATA
  bcf LATA, LED
  goto $

led_off:
  banksel LATA
  bsf LATA, LED
  goto $

flash_erase_word:
  banksel EECON1
  bcf INTCON, GIE
  bsf EECON1, EEPGD
  bcf EECON1, CFGS
  bsf EECON1, FREE
  bsf EECON1, WREN
  movlw 0x55
  movwf EECON2
  movlw 0xaa
  movwf EECON2
  bsf EECON1, WR
  nop
  nop
  bcf EECON1, WREN
  bsf INTCON, GIE
  return

flash_write_word:
  banksel EECON1
  bcf INTCON, GIE
  bsf EECON1, EEPGD
  bcf EECON1, CFGS
  bsf EECON1, WREN
  bcf EECON1, LWLO
  movlw 0x55
  movwf EECON2
  movlw 0xaa
  movwf EECON2
  bsf EECON1, WR
  nop
  nop
  bcf EECON1, WREN
  bsf INTCON, GIE
  return

flash_read_word:
  banksel EECON1
  bcf EECON1, CFGS
  bsf EECON1, EEPGD
  bcf INTCON, GIE
  bsf EECON1, RD
  nop
  nop
  bsf INTCON, GIE
  return
  end

編譯

$ gpasm main.s

完成


返回上一頁