Programmateur pour 68705P3S

Bon, d'accord, la photo est un peu floue...
Le micro-contrôleur 68705P3S a été très utilisé il y a quelques années. Il se fait vieux, mais suffit toujours dans certaines applications. Il faut normalement le programmer via une Eprom, et j'ai réalisé pour gagner un peu de temps ce petit programmateur qui envoie directement le fichier binaire du PC au microcontrôleur, par l'intermédiaire du port parallèle.
schéma théorique

typon (à remettre à l'échelle: trait extérieur 100 * 80 mm)

schéma d'implantation


Petit programme Basic associé
' Logiciel de programmation d'un micro-controleur 68705P3
' dB 21/04/2000
' Pour carte spécifique sur port parallèle
Init:
DIM Octet%(2048)
DIM Message$(12)
DIM Tampon AS STRING * 1
REM Donneeprn% = 956 '3BCh data
REM Statusprn% = 957 '3BDh status
REM Commdeprn% = 958 '3BEh commande
Donneeprn% = 888 '378h data
Statusprn% = 889 '379h status
Commdeprn% = 890 '37Ah commande
Message$(1) = "Couper l'alimentation carte puis presser une touche "
Message$(2) = "Fermer K1 K2,placer micro, alimenter, presser une touche"
Message$(3) = "Ouvrir l'interrupteur K2 (22V), presser une touche "
Message$(4) = "Ouvrir l'interrupteur K1 (démarrage micro) "
Message$(5) = "Programmation octet N° (touche pour échappement) "
Message$(6) = "Mauvais déroulement de la programmation "
Message$(7) = "Vérification octet N° (touche pour échappement) "
Message$(8) = "Mauvais déroulement de la vérification "
Message$(9) = "Microcontroleur correctement programmé (presser touche) "
Message$(10) = "Refermer K2 (22V), puis K1 (reset) et presser une touche"
Message$(11) = "Couper l'alimentation, et retirer le microcontroleur "
COLOR 15, 1
CLS
LOCATE 1, 25: PRINT "Logiciel de programmation de 68705P3"
LOCATE 6, 10: PRINT "Programme 68705.bin chargé"
LOCATE 8, 10: PRINT "Opération en cours : "
OPEN "c:\temp\68705.bin" FOR BINARY AS #1
IF LOF(1) <> 2048 THEN LOCATE 10, 10: PRINT "Fichier non valide": END
FOR Pointeur% = 1 TO 2048
GET #1, Pointeur%, Tampon
Octet%(Pointeur%) = 255 - ASC(Tampon)
NEXT
CLOSE
LOCATE 10, 10: PRINT Message$(1)
WHILE INKEY$ = ""
WEND
LOCATE 10, 10: PRINT Message$(2)
WHILE INKEY$ = ""
WEND
LOCATE 10, 10: PRINT Message$(3)
WHILE INKEY$ = ""
WEND
LOCATE 10, 10: PRINT Message$(4)
WHILE (INP(Statusprn%) AND 16) = 16
WEND
Pointeur% = 1
Clock% = 32
Mem% = Clock%
LOCATE 10, 10: PRINT Message$(5)
WHILE (INKEY$ = "") AND (Pointeur% < 2049)
LOCATE 10, 32: PRINT Pointeur%
OUT Donneeprn%, Octet%(Pointeur%)
Clock% = (INP(Statusprn%) AND 32)
IF (Clock% = 0) AND (Mem% = 32) THEN
Pointeur% = Pointeur% + 1
END IF
Mem% = Clock%
WEND
IF (Pointeur% <> 2049) OR ((INP(Statusprn%) AND 64) <> 64) THEN
LOCATE 10, 10: PRINT Message$(6): END
END IF
Pointeur% = 1
Clock% = 32
Mem% = Clock%
LOCATE 10, 10: PRINT Message$(7)
WHILE (INKEY$ = "") AND (Pointeur% < 2049) AND ((INP(Statusprn%) AND 128) <> 0)
LOCATE 10, 32: PRINT Pointeur%
OUT Donneeprn%, Octet%(Pointeur%)
Clock% = (INP(Statusprn%) AND 32)
IF (Clock% = 0) AND (Mem% = 32) THEN
Pointeur% = Pointeur% + 1
END IF
Mem% = Clock%
WEND
LOCATE 10, 10
PRINT Message$(8)
IF ((INP(Statusprn%) AND 128) = 0) THEN
LOCATE 10, 10
PRINT Message$(9)
END IF
WHILE INKEY$ = ""
WEND
LOCATE 10, 10: PRINT Message$(10)
WHILE INKEY$ = ""
WEND
LOCATE 10, 10: PRINT Message$(11)
WHILE INKEY$ = ""
WEND
END
Le même, compilé (vu de DOS), à télécharger (33 ko)
Et enfin 3 exemples de fichiers binaires