⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 otp65r.asm

📁 usinf pic16c57 to achive copy machine for pic16c65/66(programmer)
💻 ASM
字号:
	LIST	P=16C57
#include "C:\MPLAB\P16c5x.inc"
#include "otp65.inc"
#include "p16c57.mac"

ONVPP   MACRO
	SETP    VPPON
	ENDM
OFFVPP  MACRO
	CLRP    VPPON
	ENDM
;************************************
	ORG     0
	CLRF    FSR
	MOVLW	0FFH
	TRIS	PORTA
	TRIS	PORTB
	MOVLW   0C0H
	TRIS    PORTC
	MOVD	PORTC,7FH
	MOVLW   TRISC_BUF0
	TRIS	PORTC
	OFFVPP
	CLRF    COUNTER
	TRIS_B  B'00111111'
	GOTO    READY
;**********************************************
;子程序
;**********************************************
TWAIT10   MOVD    R0,19H                    ;10ms=25,000指令周期
TWAIT100  MOVD   R1,0FAH
TWAIT101  NOP
	DECFSZ  R1,F
	GOTO    TWAIT101
	DECFSZ  R0,F
	GOTO    TWAIT100
	RETLW   0
;********************************************
TW100   MOVD    R0,0FAH               ;100ms=250,000指令周期
TWT10   MOVD    R1,7DH               ;
TWT100  NOP
	NOP
	NOP
	nop
	nop
	DECFSZ  R1,F
	GOTO    TWT100
	DECFSZ  R0,F
	GOTO    TWT10
	RETLW   0
;********************************************
TPW     MOVD    R0,5                  ;>10u>=25,TRC
TPW0    NOP
	nop
	nop
	DECFSZ  R0,F
	GOTO    TPW0
	RETLW   0
;********************************************
TWAIT100u
	MOVD	R0,0x28
TT1m0
	NOP
	NOP
	DJNZ	R0,TT1m0
	RETLW	0
;****************************************
LOAD_DATA
	MOVLW	LOAD_COM
LOAD_DATA0
	CALL	OUT_COMMAND
	MOVD	R0,0x10
	MOV	R1,INTERNALL
	MOV	R2,INTERNALH
WRDATA1
	SETP    RB6_CLK1
	CLRC
	RRF	R2,F
	RRF     R1,F
	BNC	WRDATA2
	SETP    RB7_DT1
	GOTO    WRDATA3
WRDATA2
	CLRP	RB7_DT1
WRDATA3
	NOP
	NOP
	CLRP	RB6_CLK1
	NOP
	DJNZ	R0,WRDATA1
	RETLW	0
;****************************************
READ_DATA
	CLRF	INTERL
	CLRF	INTERH
	MOVLW	READ_COM
	CALL	OUT_COMMAND
	TRIS_C  TRISC_BUF           ;PORTC     RB7_DT1/I
	MOVD	R0,0x10
RDDATA0
	NOP
	SETP	RB6_CLK1
	NOP
	NOP
	CLRC
	SNBP	RB7_DT1
	SETC
	RRF	INTERH,F
	RRF	INTERL,F
	CLRP	RB6_CLK1
	DJNZ	R0,RDDATA0
	MOVLW	0xFE
	ANDWF	INTERL,F
	MOVLW   0x7F
	ANDWF	INTERH,F
	MOVLW   TRISC_BUF0
	TRIS	PORTC
	RETLW	0
;****************************************
OUT_COMMAND
	MOVWF	R1
	MOVD	R0,0x06                   ;GP1_CLK=0
OUTCOM0
	SETP	RB6_CLK1
	CLRC
	RRF	R1,F
	BNC	OUTCOM1
	SETP	RB7_DT1
	GOTO    OUTCOM2
OUTCOM1
	CLRP	RB7_DT1
OUTCOM2
	NOP
	NOP
	CLRP	RB6_CLK1
	DJNZ	R0,OUTCOM0
	RETLW	0
;********************************************
OUT_COMMAND1
	MOVWF	R1
	MOVD	R0,0x06                   ;GP1_CLK=0
OUTCOM10
	SETP	RB6_CLK0
	CLRC
	RRF	R1,F
	BNC	OUTCOM11
	SETP	RB7_DT0
	GOTO    OUTCOM12
OUTCOM11
	CLRP	RB7_DT0
OUTCOM12
	NOP
	NOP
	CLRP	RB6_CLK0
	NOP
	DJNZ	R0,OUTCOM10
	RETLW	0
;********************************************

READ_PGDT
	MOVLW	READ_COM
	CALL	OUT_COMMAND1
READ_PGDT1
	TRIS_B  B'10111111'
	CLRF	INTERNALL
	CLRF	INTERNALH
	MOVD	R0,0x10
READ_PGDT10
	NOP
	NOP
	SETP	RB6_CLK0
	NOP
	NOP
	CLRC
	SNBP	RB7_DT0
	SETC
	RRF	INTERNALH,F
	RRF	INTERNALL,F
	CLRP	RB6_CLK0
	DJNZ	R0,READ_PGDT10
	MOVLW	0xFE
	ANDWF	INTERNALL,F
	MOVLW   0x7F
	ANDWF	INTERNALH,F
	TRIS_B  B'00111111'
	MOVLW	INCADDR_COM
	CALL	OUT_COMMAND1
	RETLW	0
;********************************************

READY   OFFVPP
READKEY0
	MOVD    COUNTER,3
READKEY
	CALL	TWAIT10
	JBP     KEY_PIN,READKEY0
	DJNZ    COUNTER,READKEY
	CLRP    GREEN_LED
	CLRP    RED_LED
	MOVD	PC_H,0x10
	MOVD	PC_L,0
	MOVLW   TRISC_BUF0
	TRIS	PORTC
	GOTO    PROGRAMMING;;WRCONFIG;;

BLANK_CHECK                          ;检查目标片是否为空
	CLRP	RB6_CLK1
	CLRP    RB7_DT1
	CLRP	RB6_CLK0
	CLRP    RB7_DT0
	NOP
	NOP
	ONVPP                        ;开VPP
	CALL    TW100                ;TR=0.15-1.0-5u=12.5C
BLANK0
BLANK00
	CALL    READ_DATA
	MOVFW   INTERL
	XORLW   0xFE
	BNZ     BLANKFAIL
BLANK1  MOVFW	INTERH
	XORLW   0x7F
	BZ      BLANK2
BLANKFAIL
	NOP
	OFFVPP
	NOP
	SETP	GREEN_LED            ;NOT PASS
FREEKEY0
	CALL	TWAIT10
	JNBP    KEY_PIN,FREEKEY0
	GOTO    READY
BLANK2
	MOVLW	INCADDR_COM
	CALL	OUT_COMMAND
	DJNZ	PC_L,BLANK0
	DJNZ	PC_H,BLANK0
;*******************************************************
PROGRAMMING                           ;开始编程
	NOP
	OFFVPP                        ;两芯片重新复位
	CALL    TW100                 ;断电100 ms
	CALL    TW100
	CLRP	RB6_CLK1
	CLRP    RB7_DT1
	CLRP	RB6_CLK0
	CLRP    RB7_DT0
	ONVPP
	CALL    TW100                     ;TR
WRITEDATA
	MOVD	PC_H,0x10
	MOVD	PC_L,0
WRITE_DATA0
	MOVD	COUNTER,0x19
	CALL	READ_PGDT
WRITE_READY
;	goto    WRBTYEND
;--------------------------------------------
WR_DATA0
	NOP
	CALL	LOAD_DATA
	MOVLW	BEGIN_COM
	CALL	OUT_COMMAND
	CALL	TWAIT100u
	MOVLW	END_COM
	CALL	OUT_COMMAND
	CALL	READ_DATA
	CMP_NMM INTERL,INTERNALL,WR_DATA1
	CMP_YMM INTERL,INTERNALL,WR_DATA2
WR_DATA1
	DJNZ	COUNTER,WR_DATA0
	GOTO	WRDATAFAIL
WR_DATA2
	MOVD	COUNTER,3
WR_DATA20
	CALL	LOAD_DATA
	MOVLW	BEGIN_COM
	CALL	OUT_COMMAND
	CALL	TWAIT100u
	MOVLW	END_COM
	CALL	OUT_COMMAND
	NOP
	DJNZ	COUNTER,WR_DATA20
	CALL	READ_DATA
	CMP_NMM INTERL,INTERNALL,WRDATAFAIL
	CMP_NMM INTERH,INTERNALH,WRDATAFAIL
WRBTYEND
	MOVLW	INCADDR_COM
	CALL	OUT_COMMAND
	DJNZ	PC_L,WRITE_DATA0
	DJNZ	PC_H,WRITE_DATA0
;--------------------------------------------
WRCONFIG                           ;写加密位
	MOVD	INTERNALL,CONFIGL
	MOVD	INTERNALH,CONFIGH
	MOVLW	LOAD_CFG
	CALL	LOAD_DATA0
	MOVD    COUNTER,7
CONFIG
	MOVLW	INCADDR_COM
	CALL	OUT_COMMAND
	DJNZ	COUNTER,CONFIG
	MOVD	COUNTER,0x64
CONFIG0
	CALL    LOAD_DATA
	MOVLW	BEGIN_COM
	CALL	OUT_COMMAND
	NOP
	CALL	TWAIT100u
	CALL	TWAIT100u
	MOVLW	END_COM
	CALL	OUT_COMMAND
	CALL	READ_DATA

	MOVFW	INTERL
	ANDLW	B'01111110'             ;;;NOTE
	XORWF	INTERNALL,W
	BZ	CONFIG2
CONFIG1
	DJNZ    COUNTER,CONFIG0
	GOTO	CONFAIL                  ;25次后还是不行--失败
CONFIG2
	MOVD    COUNTER,3
CONFIG20
	CALL	LOAD_DATA
	MOVLW	BEGIN_COM
	CALL	OUT_COMMAND
	NOP
	CALL	TWAIT100u
	CALL	TWAIT100u
	MOVLW	END_COM
	CALL	OUT_COMMAND
	DJNZ	COUNTER,CONFIG20
	CALL	READ_DATA
	MOVFW	INTERL
	ANDLW	B'01111110'             ;;;NOTE
	XORWF	INTERNALL,W
	BNZ	CONFAIL
PRGEND
	OFFVPP
	NOP
	CLRP	GREEN_LED	  ;亮绿灯
	SETP	RED_LED
	NOP
	GOTO   	FREEKEY2
WRDATAFAIL
CONFAIL
	OFFVPP
	NOP
	SETP   	GREEN_LED          ;亮红灯
	NOP
	CLRP   	RED_LED
FREEKEY2
	CALL	TWAIT10
	JNBP    KEY_PIN,FREEKEY2
	GOTO    READY



	org     7ffh
	goto    0
	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -