📄 myasm.asm
字号:
include <p16f628a.inc>
__CONFIG _WDT_OFF; watchdog off
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
byte equ 0x40
byte1 equ 0x30
byte2 equ 0x31
byte3 equ 0x32
byte4 equ 0x33
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 0
goto main
enable:
bcf STATUS, 0x06
bcf STATUS, 0x05; switch over to bank 0
bsf PORTB, 0x07; enable bit set
return
progbyte:
bcf STATUS, 0x05
movlw 0x08
movwf 0x21
bcf PORTB, 0x06; SLE = 0
bcf PORTA, 0x04; SCLK = 0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;1st byte
prog1:
bcf PORTA, 0x04; SCLK = 0
btfss byte1, 0x07; if (byte & 0x80)
goto clrdata1; else goto clrdata
goto setdata1; then goto setdata
setdata1:
bsf PORTA, 0x03
goto rejoin1
clrdata1:
nop
bcf PORTA, 0x03
goto rejoin1
rejoin1:
bsf PORTA, 0x04; SCLK = 1
nop
rlf byte1, 0x01; byte+=byte
decfsz 0x21, 0x01
goto prog1
goto prbyte2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;2nd byte
prbyte2:
bsf 0x21, 0x03
prog2:
bcf PORTA, 0x04; SCLK = 0
btfss byte2, 0x07; if (byte & 0x80)
goto clrdata2; then goto setdata
goto setdata2; else goto clrdata
setdata2:
bsf PORTA, 0x03
goto rejoin2
clrdata2:
nop
bcf PORTA, 0x03
goto rejoin2
rejoin2:
bsf PORTA, 0x04; SCLK = 1
nop
rlf byte2, 0x01; byte+=byte
decfsz 0x21, 0x01
goto prog2
goto prbyte3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;3rd byte
prbyte3:
bsf 0x21, 0x03
prog3:
bcf PORTA, 0x04; SCLK = 0
btfss byte3, 0x07; if (byte & 0x80)
goto clrdata3; then goto setdata
goto setdata3; else goto clrdata
setdata3:
bsf PORTA, 0x03
goto rejoin3
clrdata3:
nop
bcf PORTA, 0x03
goto rejoin3
rejoin3:
bsf PORTA, 0x04; SCLK = 1
nop
rlf byte3, 0x01; byte+=byte
decfsz 0x21, 0x01
goto prog3
goto prbyte4
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;4th byte
prbyte4:
bsf 0x21, 0x03
prog4:
bcf PORTA, 0x04; SCLK = 0
btfss byte4, 0x07; if (byte & 0x80)
goto clrdata4; then goto setdata
goto setdata4; else goto clrdata
setdata4:
bsf PORTA, 0x03
goto rejoin4
clrdata4:
nop
bcf PORTA, 0x03
goto rejoin4
rejoin4:
bsf PORTA, 0x04; SCLK = 1
nop
rlf byte4, 0x01; byte+=byte
decfsz 0x21, 0x01
goto prog4
latch_data:
bcf PORTA, 0x04
nop
bsf PORTB, 0x06
nop
nop
bcf PORTB, 0x06
bcf PORTA, 0x04
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
main:
bcf STATUS, 0x5
bcf STATUS, 0x6; switch to bank 0
movlw 0x07
movwf CMCON; enable PORTA pins for use
bsf STATUS, 0x5
bcf STATUS, 0x6; switch to bank 1
movlw 0x26
movwf TRISA
movlw 0x27
movwf TRISB
call enable
movlw 0xff; wait for sometime
movwf 0x20; i=255
loop:
decfsz 0x20, 0x01
goto loop; while(i>0) i--
test:
btfss PORTA, 0x02; test for high muxout
goto loop; else delay again
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; programming order:
; i) r0
; ii) r1
; iii) r2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
prog_r0:
movlw 0x69
movwf byte1
movlw 0x4c
movwf byte2
movlw 0x25
movwf byte3
movlw 0x39
movwf byte4
call progbyte
prog_r1:
movlw 0x69
movwf byte1
movlw 0x4c
movwf byte2
movlw 0x25
movwf byte3
movlw 0x39
movwf byte4
call progbyte
prog_r2:
movlw 0x69
movwf byte1
movlw 0x4c
movwf byte2
movlw 0x25
movwf byte3
movlw 0x39
movwf byte4
call progbyte
mainloop:
goto mainloop; eternal loop
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -