*** picw.org Sun Jul 6 10:36:54 1997 --- picw2.asm Sun Jul 6 11:01:29 1997 *************** *** 50,55 **** --- 50,57 ---- /* 2 CHK SUM 定数"FF"(0x4646) /* + /* V2.0 1997 7/5 Y.Senta + #CNF 2000 00000001010000 ;'P'50(0101 0000) #CNF 2001 00000001010111 ;'W'57(0101 0111) #CNF 2002 00000000110001 ;'1'31(0011 0001) *************** *** 184,198 **** #DEF RTREG 0F ;READ TMP REG #DEF STREG 10 ;SEND TMP REG #DEF SCNT 11 ;SEND TIMING CNT ! #DEF RDBUF0 12 ;READ DATA BUF 0 ! #DEF RDBUF1 13 ; 1 ! #DEF RDBUF2 14 ; 2 ! #DEF RDBUF3 15 ; 3 ! #DEF RDBUF4 16 ; 4 ! #DEF RDBUF5 17 ; 5 ! #DEF RDBUF6 18 ; 6 ! #DEF RDBUF7 19 ; 7 ! #DEF SENDC 1A ;SEND CONTROL /* RB0 ;XOFF MODE 0=OFF , 1=ON /* RB1 ;CHAR SEND BUSY 0=NOT BUSY , 1=BUSY /* RB2 ;WRITE 0=COMMAND , 1=DATA --- 186,204 ---- #DEF RTREG 0F ;READ TMP REG #DEF STREG 10 ;SEND TMP REG #DEF SCNT 11 ;SEND TIMING CNT ! #DEF RDBUF0 12 ;データバッファ 12 byte , 分割不可 ! #DEF RDBUF1 13 ; ! #DEF RDBUF2 14 ; ! #DEF RDBUF3 15 ; ! #DEF RDBUF4 16 ; ! #DEF RDBUF5 17 ; ! #DEF RDBUF6 18 ; ! #DEF RDBUF7 19 ; ! #DEF RDBUF8 1A ; ! #DEF RDBUF9 1B ; ! #DEF RDBUFA 1C ; ! #DEF RDBUFB 1D ; ! #DEF SENDC 1E ;SEND CONTROL /* RB0 ;XOFF MODE 0=OFF , 1=ON /* RB1 ;CHAR SEND BUSY 0=NOT BUSY , 1=BUSY /* RB2 ;WRITE 0=COMMAND , 1=DATA *************** *** 200,227 **** /* RB4 ;WRITE ERROR 0=NO , 1=YES /* RB5 ;RDTMP 0=CLR , 1=DATA SET /* RB7 :EOF 0=NO , 1=YES ! #DEF TMPREG 1B ;TEMP REG ! #DEF RDTMP 1C ;READ TMP. REG. ! #DEF MMODE 1D ;MAIN MODE ! #DEF CMDC 1E ;COMMAND CODE ! #DEF CSCNT 1F ;CHAR SEND COUNTER ! #DEF ADCNT0 20 ;ADDRES COUNTER 0(LOW 8 bit) ! #DEF ADCNT1 21 ; 1(HIGH 2bit) ! #DEF RDAD0 22 ;READ ADDRES0 ! #DEF RDAD1 23 ;READ ADDRES1 ! #DEF SBYTE0 24 ;SEND BYTE0 ! #DEF SBYTE1 25 ;SEND BYTE1 ! #DEF SDBUF 26 ;SEND BUF ! #DEF PDCNT 27 ;PROGRAMING DL. CNT ! #DEF DLOP 28 ;DATA READ LOOP ! #DEF MCON 29 ;MODE CONTROL /* RB0 ;プログラムメモリ書き込み(初回) 0=NO,1=YES /* RB1 ;プログラムメモリ書き込み(継続) 0=NO,1=YES /* RB2 ;コンフィグレーションメモリ書き込み(初回) 0=NO,1=YES /* RB3 ;コンフィグレーションメモリ書き込み(継続) 0=NO,1=YES /* RB4 ;データ用EEPROM書き込み(初回) 0=NO,1=YES /* RB5 ;データ用EEPROM書き込み(継続) 0=NO,1=YES ! #DEF CSUM 2A ;CHECK SUM /* LITERAL DEF ------------------------------------------------------- #DEF SL 04 ;10(16) --- 206,236 ---- /* RB4 ;WRITE ERROR 0=NO , 1=YES /* RB5 ;RDTMP 0=CLR , 1=DATA SET /* RB7 :EOF 0=NO , 1=YES ! #DEF TMPREG 1F ;TEMP REG ! #DEF RDTMP 20 ;READ TMP. REG. ! #DEF MMODE 21 ;MAIN MODE ! #DEF CMDC 22 ;COMMAND CODE ! #DEF CSCNT 23 ;CHAR SEND COUNTER ! #DEF ADCNT0 24 ;ADDRES COUNTER 0(LOW 8 bit) ! #DEF ADCNT1 25 ; 1(HIGH 2bit) ! #DEF RDAD0 26 ;READ ADDRES0 ! #DEF RDAD1 27 ;READ ADDRES1 ! #DEF SBYTE0 28 ;SEND BYTE0 ! #DEF SBYTE1 29 ;SEND BYTE1 ! #DEF SDBUF 2A ;SEND BUF ! #DEF PDCNT 2B ;PROGRAMING DL. CNT ! #DEF DLOP 2C ;DATA READ LOOP ! #DEF MCON 2D ;MODE CONTROL /* RB0 ;プログラムメモリ書き込み(初回) 0=NO,1=YES /* RB1 ;プログラムメモリ書き込み(継続) 0=NO,1=YES /* RB2 ;コンフィグレーションメモリ書き込み(初回) 0=NO,1=YES /* RB3 ;コンフィグレーションメモリ書き込み(継続) 0=NO,1=YES /* RB4 ;データ用EEPROM書き込み(初回) 0=NO,1=YES /* RB5 ;データ用EEPROM書き込み(継続) 0=NO,1=YES ! #DEF CSUM 2E ;CHECK SUM ! ! #DEF CNTER 2F ;チャージポンプ用カウンタ ! /* LITERAL DEF ------------------------------------------------------- #DEF SL 04 ;10(16) *************** GOTO MMODE74 ;74 (CR)送信 *** 441,447 **** /* PORT RA0 AND RA1 ARE OUTPUT BSF STATUS, RP0 ;BANK 1 ! MOVLW #F8 ;F8=1111 1000 -> W MOVWF TRISA ;W -> TRISA /* BCF TRISA RA0 ;RA0 IS OUTPUT(CLOCK) /* BCF TRISA RA1 ;RA1 IS OUTPUT(DATA) --- 450,456 ---- /* PORT RA0 AND RA1 ARE OUTPUT BSF STATUS, RP0 ;BANK 1 ! MOVLW #F0 ;F8=1111 0000 -> W MOVWF TRISA ;W -> TRISA /* BCF TRISA RA0 ;RA0 IS OUTPUT(CLOCK) /* BCF TRISA RA1 ;RA1 IS OUTPUT(DATA) *************** MOVWF TRISA ;W -> TRISA *** 449,455 **** /* BSF TRISA RA3 ;RA3 IS INPUT /* BSF TRISA RA4 ;RA4 IS INPUT ! MOVLW #FD ;FD=1111 1101 -> W MOVWF TRISB ;W -> TRISB /* BSF TRISB RB0 ;RB0 IS INPUT /* BCF TRISB RB1 ;RB1 IS OUTPUT --- 458,464 ---- /* BSF TRISA RA3 ;RA3 IS INPUT /* BSF TRISA RA4 ;RA4 IS INPUT ! MOVLW #CD ;FD=1100 1101 -> W MOVWF TRISB ;W -> TRISB /* BSF TRISB RB0 ;RB0 IS INPUT /* BCF TRISB RB1 ;RB1 IS OUTPUT *************** CLRF RDBUF4 ;RDBUF4 CLR *** 491,496 **** --- 500,509 ---- CLRF RDBUF5 ;RDBUF5 CLR CLRF RDBUF6 ;RDBUF6 CLR CLRF RDBUF7 ;RDBUF7 CLR + CLRF RDBUF8 + CLRF RDBUF9 + CLRF RDBUFA + CLRF RDBUFB CLRF SENDC ;SEND CONTROL CLR CLRF MMODE ;MMODE CLR CLRF SDBUF ;SEND DATA BUF CLR *************** GOTO LOP3 *** 506,511 **** --- 519,537 ---- BCF INTCON, TOIF ;TMR0 INTERRUPT FLAG CLEAR + /* 12V 作成用チャージポンプ + + BTFSC CNTER, #1 ; CNTER が偶数か奇数かチェック + GOTO PUSH1 + BSF PORTB, RB4 + BCF PORTB, RB5 + GOTO PUSH2 + #LBL PUSH1 + BCF PORTB, RB4 + BSF PORTB, RB5 + #LBL PUSH2 + INCF CNTER, BACK ; CNTER++ + /* RMODE ------------------------------------------------------------ MOVF RMODE, WREG ;RMODE -> W GOTO RMJMP ;RMODE JAMP TABLE *************** GOTO MEND03 ;CLR,INC,RDTMP - *** 684,690 **** /* MMODE == 02 (CR)'PIC16C84 Writer'(CR)'LOAD OK'(CR) ---------------- /* キャラクター送信カウンタ(CNT)セット #LBL MMODE02 ! BCF PORTA, RA2 ;+12V OFF MOVLW #00 ;00 -> W MOVWF CSCNT ;W -> CHAR SEND CNT GOTO MEND11 ;NOT CLR,INC --- 710,716 ---- /* MMODE == 02 (CR)'PIC16C84 Writer'(CR)'LOAD OK'(CR) ---------------- /* キャラクター送信カウンタ(CNT)セット #LBL MMODE02 ! CALL MCLROFF MOVLW #00 ;00 -> W MOVWF CSCNT ;W -> CHAR SEND CNT GOTO MEND11 ;NOT CLR,INC *************** GOTO MEND11 ;NOT CLR,INC *** 891,899 **** MOVLW #12 ;12 -> W GOTO MEND12 ;NOT CLR,LOAD ! /* MMODE == 0E プログラムメモリ書き込み開始み ------------------------ #LBL MMODE0E ! BCF PORTA, RA2 ;+12V OFF CLRF ADCNT1 ;ADDRES COUNTER1 CLR BCF MCON, RB3 ;MCON<3>=0 BCF MCON, RB5 ;MCON<5>=0 --- 917,925 ---- MOVLW #12 ;12 -> W GOTO MEND12 ;NOT CLR,LOAD ! /* MMODE == 0E プログラムメモリ書き込み開始 ------------------------ #LBL MMODE0E ! CALL MCLROFF CLRF ADCNT1 ;ADDRES COUNTER1 CLR BCF MCON, RB3 ;MCON<3>=0 BCF MCON, RB5 ;MCON<5>=0 *************** BCF MCON, RB5 ;MCON<5>=0 *** 901,913 **** CLRF ADCNT0 ;ADDRES COUNTER0 CLR CLRF SBYTE0 ;ダミーデータ作成 CLRF SBYTE1 ! BSF PORTA, RA2 ;+12V ON MOVLW #19 ;19 -> W GOTO MEND12 ;NOT CLR,LOAD /* MMODE == 0F コンフィグレーションメモリ書き込み開始 ---------------- #LBL MMODE0F ! BCF PORTA, RA2 ;+12V OFF MOVLW #20 ;20 -> W MOVWF ADCNT1 ;W -> ADCNT1(ADDRES COUNTER1 SET) BCF MCON, RB1 ;MCON<1>=0 --- 927,939 ---- CLRF ADCNT0 ;ADDRES COUNTER0 CLR CLRF SBYTE0 ;ダミーデータ作成 CLRF SBYTE1 ! CALL MCLRON MOVLW #19 ;19 -> W GOTO MEND12 ;NOT CLR,LOAD /* MMODE == 0F コンフィグレーションメモリ書き込み開始 ---------------- #LBL MMODE0F ! CALL MCLROFF MOVLW #20 ;20 -> W MOVWF ADCNT1 ;W -> ADCNT1(ADDRES COUNTER1 SET) BCF MCON, RB1 ;MCON<1>=0 *************** GOTO MMODE0E01 *** 916,922 **** /* MMODE == 10 データ用EEPROM書き込み開始 ---------------------- #LBL MMODE10 ! BCF PORTA, RA2 ;+12V OFF MOVLW #21 ;21 -> W MOVWF ADCNT1 ;W -> ADCNT1(ADDRES COUNTER1 SET) BCF MCON, RB1 ;MCON<1>=0 --- 942,948 ---- /* MMODE == 10 データ用EEPROM書き込み開始 ---------------------- #LBL MMODE10 ! CALL MCLROFF MOVLW #21 ;21 -> W MOVWF ADCNT1 ;W -> ADCNT1(ADDRES COUNTER1 SET) BCF MCON, RB1 ;MCON<1>=0 *************** BSF SENDC, RB4 ;WRITE ERROR =1( *** 1145,1152 **** GOTO MEND11 ;NOT CLR,INC /* MCON<3> == 0 #LBL MMODE1F01 - BCF STATUS, RP0 ;BANK 0 CALL RDATA ;READ DATA -> W SUBWF SBYTE0, WREG ;SBYTE0 - W -> W BTFSS STATUS, ZERO ;IF SBYTE0 == W THEN SKIP BSF SENDC, RB4 ;WRITE ERROR =1(YES) --- 1171,1178 ---- GOTO MEND11 ;NOT CLR,INC /* MCON<3> == 0 #LBL MMODE1F01 CALL RDATA ;READ DATA -> W + ANDLW #FE ; 0 bit 目をカット SUBWF SBYTE0, WREG ;SBYTE0 - W -> W BTFSS STATUS, ZERO ;IF SBYTE0 == W THEN SKIP BSF SENDC, RB4 ;WRITE ERROR =1(YES) *************** GOTO MEND11 ;NOT CLR,INC *** 1248,1254 **** /* MMODE == 2C 消去モード--------------------------------------------- #LBL MMODE2C ! BSF PORTA, RA2 ;+12V ON GOTO MEND11 ;NOT CLR,INC /* MMODE == 2D コンフィグレーションメモリにダミーの書き込み指令 ------ --- 1274,1280 ---- /* MMODE == 2C 消去モード--------------------------------------------- #LBL MMODE2C ! CALL MCLRON GOTO MEND11 ;NOT CLR,INC /* MMODE == 2D コンフィグレーションメモリにダミーの書き込み指令 ------ *************** GOTO MEND11 ;NOT CLR,INC *** 1285,1298 **** /* MMODE == 3B 消去OK (CR)'ERASE OK'(CR) /* キャラクター送信カウンタ(CNT)セット #LBL MMODE3B ! BCF PORTA, RA2 ;+12V OFF MOVLW #28 ;28 -> W MOVWF CSCNT ;W -> CHAR SEND CNT GOTO MEND11 ;NOT CLR,INC /* MMODE == 3E プログラムメモリ読みだし準備 -------------------------- #LBL MMODE3E ! BSF PORTA, RA2 ;+12V ON CLRF ADCNT0 ;ADDRES COUNTER0 CLR CLRF ADCNT1 ;ADDRES COUNTER1 CLR GOTO MEND11 ;NOT CLR,INC --- 1311,1324 ---- /* MMODE == 3B 消去OK (CR)'ERASE OK'(CR) /* キャラクター送信カウンタ(CNT)セット #LBL MMODE3B ! CALL MCLROFF MOVLW #28 ;28 -> W MOVWF CSCNT ;W -> CHAR SEND CNT GOTO MEND11 ;NOT CLR,INC /* MMODE == 3E プログラムメモリ読みだし準備 -------------------------- #LBL MMODE3E ! CALL MCLRON CLRF ADCNT0 ;ADDRES COUNTER0 CLR CLRF ADCNT1 ;ADDRES COUNTER1 CLR GOTO MEND11 ;NOT CLR,INC *************** GOTO MEND11 ;NOT CLR,INC *** 1459,1470 **** /* MMODE == 5D 終了判定 ---------------------------------------------- #LBL MMODE5D /* プログラムメモリ終わり? ! BCF PORTA, RA2 ;+12V OFF GOTO MEND11 ;NOT CLR,INC /* MMODE == 5E データ用EEPROM読みだし準備 -------------------- #LBL MMODE5E ! BSF PORTA, RA2 ;+12V ON CLRF ADCNT0 ;ADCNT0 CLR MOVLW #42 ;42 -> W MOVWF ADCNT1 ;W -> ADCNT1 --- 1485,1496 ---- /* MMODE == 5D 終了判定 ---------------------------------------------- #LBL MMODE5D /* プログラムメモリ終わり? ! CALL MCLROFF GOTO MEND11 ;NOT CLR,INC /* MMODE == 5E データ用EEPROM読みだし準備 -------------------- #LBL MMODE5E ! CALL MCLRON CLRF ADCNT0 ;ADCNT0 CLR MOVLW #42 ;42 -> W MOVWF ADCNT1 ;W -> ADCNT1 *************** RETFIE ;RETURN FROM INT *** 1569,1632 **** /* BUF PUT SUB. ------------------------------------------------------ #LBL BUFPUT ! MOVF RDBUF0, BACK ;RDBUF0 CHECK ! BTFSS STATUS, ZERO ;IF RDBUF0 == 0 THEN SKIP ! GOTO BP01 ;IF RDBUF0 != 0 THEN BP01 ! /* RDBUF0 == 0 ! MOVWF RDBUF0 ;W -> RDBUF0 ! RETURN ! /* RDBUF0 != 0 ! #LBL BP01 ! MOVF RDBUF1, BACK ;RDBUF1 CHECK ! BTFSS STATUS, ZERO ;IF RDBUF1 == 0 THEN SKIP ! GOTO BP02 ;IF RDBUF1 != 0 THEN BP02 ! /* RDBUF1 == 0 ! MOVWF RDBUF1 ;W -> RDBUF1 ! RETURN ! /* RDBUF1 != 0 ! #LBL BP02 ! MOVF RDBUF2, BACK ;RDBUF2 CHECK ! BTFSS STATUS, ZERO ;IF RDBUF2 == 0 THEN SKIP ! GOTO BP03 ;IF RDBUF2 != 0 THEN BP03 ! /* RDBUF2 == 0 ! MOVWF RDBUF2 ;W -> RDBUF2 ! RETURN ! /* RDBUF2 != 0 ! #LBL BP03 ! MOVF RDBUF3, BACK ;RDBUF3 CHECK ! BTFSS STATUS, ZERO ;IF RDBUF3 == 0 THEN SKIP ! GOTO BP04 ;IF RDBUF3 != 0 THEN BP04 ! /* RDBUF3 == 0 ! MOVWF RDBUF3 ;W -> RDBUF3 ! RETURN ! /* RDBUF3 != 0 ! #LBL BP04 ! MOVF RDBUF4, BACK ;RDBUF4 CHECK ! BTFSS STATUS, ZERO ;IF RDBUF4 == 0 THEN SKIP ! GOTO BP05 ;IF RDBUF4 != 0 THEN BP05 ! /* RDBUF4 == 0 ! MOVWF RDBUF4 ;W -> RDBUF4 ! RETURN ! /* RDBUF4 != 0 ! #LBL BP05 ! MOVF RDBUF5, BACK ;RDBUF5 CHECK ! BTFSS STATUS, ZERO ;IF RDBUF5 == 0 THEN SKIP ! GOTO BP06 ;IF RDBUF5 != 0 THEN BP06 ! /* RDBUF5 == 0 ! MOVWF RDBUF5 ;W -> RDBUF5 ! RETURN ! /* RDBUF5 != 0 ! #LBL BP06 ! MOVF RDBUF6, BACK ;RDBUF6 CHECK ! BTFSS STATUS, ZERO ;IF RDBUF6 == 0 THEN SKIP ! GOTO BP07 ;IF RDBUF6 != 0 THEN BP07 ! /* RDBUF6 == 0 ! MOVWF RDBUF6 ;W -> RDBUF5 ! RETURN ! /* RDBUF6 != 0 ! #LBL BP07 ! MOVWF RDBUF7 ;W -> RDBUF7 RETURN /* BUF GET SUB. ------------------------------------------------------ #LBL BUFGET --- 1595,1621 ---- /* BUF PUT SUB. ------------------------------------------------------ #LBL BUFPUT ! MOVWF TMPREG, WREG ; W -> TMPREG ! MOVLW RDBUF0 ; #RDBUF0 -> W ! MOVWF FSR ; W -> FSR ! ! /* LOOP BUF PUT ! #LBL BPSTART ! MOVF IND0, WREG ; (IND0) -> W ! BTFSS STATUS, ZERO ; IF (IND0) == 0 THEN SKIP ! GOTO BPNEXT ; IF (IND0) != 0 THEN NEXT ! /* (IND0) == 0 ! MOVF TMPREG, WREG ; TMPREG -> W ! MOVWF IND0 ; W -> IND0 RETURN + /* (IND0) != 0 + #LBL BPNEXT + INCF FSR, BACK ; FSR++ + MOVF FSR, WREG ; FSR -> W + SUBLW RDBUFB + BTFSC STATUS, CARY ; IF W > #RDBUFB THEN SKIP + GOTO BPSTART + RETURN ; バッファが溢れた時の挙動は知らない /* BUF GET SUB. ------------------------------------------------------ #LBL BUFGET *************** MOVF RDBUF6, WREG ;RDBUF6 -> W *** 1671,1677 **** MOVWF RDBUF5 ;W -> RDBUF5 MOVF RDBUF7, WREG ;RDBUF7 -> W MOVWF RDBUF6 ;W -> RDBUF6 ! CLRF RDBUF7 ;RDBUF7 CLR MOVF TMPREG, WREG ;TMPREG -> W RETURN --- 1660,1676 ---- MOVWF RDBUF5 ;W -> RDBUF5 MOVF RDBUF7, WREG ;RDBUF7 -> W MOVWF RDBUF6 ;W -> RDBUF6 ! ! MOVF RDBUF8, WREG ;RDBUF8 -> W ! MOVWF RDBUF7 ;W -> RDBUF7 ! MOVF RDBUF9, WREG ;RDBUF9 -> W ! MOVWF RDBUF8 ;W -> RDBUF8 ! MOVF RDBUFA, WREG ;RDBUFA -> W ! MOVWF RDBUF9 ;W -> RDBUF9 ! MOVF RDBUFB, WREG ;RDBUFB -> W ! MOVWF RDBUFA ;W -> RDBUFA ! ! CLRF RDBUFB ;RDBUFB CLR MOVF TMPREG, WREG ;TMPREG -> W RETURN *************** BTFSC PORTA, RA1 ;IF DATA == 0 TH *** 1806,1809 **** --- 1805,1818 ---- BSF TMPREG, RB7 ;DATA 7bit SET /* MOVF TMPREG, WREG ;TMPREG -> W + RETURN + + #LBL MCLROFF + BCF PORTA, RA2 ;+12V OFF + BSF PORTA, RA3 + RETURN + + #LBL MCLRON + BCF PORTA, RA3 + BSF PORTA, RA2 ;+12V ON RETURN