; test09.asm ; ; Programme de test de l'interface E2P ; ; (C) CHAMOUARD 1996 ; (Libre de droits pour utilisation non ; commerciale et à vos propres risques) ; ; Matériel requis : ; carte 8031 base 1, programme chargé en 2000h ; clavier standard (clavier 16 touches/6 leds) relié à la carte 8031 base1 ; afficheur connecté au port afficheur de la carte 8031 base 1 ; E2PROM (9314 en l'occurence) sur support connectée au port de la carte 8031 base 1 : ; Signal E2PROM Port 8031 ; E2PCS P1.0 ; E2PCK P1.1 ; E2PDI P1.2 ; E2PDO P1.3 ; +5V et 0/+5V ; Bibliothèques requises : ; libasc.asm ; libcla1.asm ; libe2p.asm ; liblcd.asm ; libret.asm ; Sortie : ; chenillard sur les leds en attendant qu'on tape une touche ; affichage "Test des E2PROM series" ; les touches sont rangées C D E F ; 8 9 A B ; 4 5 6 7 ; 0 1 2 3 ; l'afficheur étant placé avec les leds en haut ; Commandes : ; - Touche 0 : retour au moniteur ; - Touche 1 : deverouillage en ecriture ; - Touche 2 : verouillage en ecriture ; - Touche 3 : non utilisee ; - Touche 4 : dump adresses 0 a 3 ; - Touche 5 : dump adresses 4 a 7 ; - Touche 6 : dump adresses 8 a B ; - Touche 7 : dump adresses C a F ; - Touche 8 : dump d'une adresse ; - Touche 9 : ecriture d'une adresse ; - Touche A : ecriture de toutes les adresses ; - Touche B : effacement de toutes les adresses ; - Touche C : non utilisee ; - Touche D : non utilisee ; - Touche E : non utilisee ; - Touche F : non utilisee word LcdCmdReadAdd, #C000h word LcdCmdWriteAdd, #A000h word LcdDataReadAdd, #C001h word LcdDataWriteAdd, #A001h word ClaAdd, #E000h direct ClaLedReg, 08h byte ClaAntiRebonDly, #20 bit E2PCS, P1.0 bit E2PCK, P1.1 bit E2PDI, P1.2 bit E2PDO, P1.3 byte E2PNAD, #6 byte To0, #10h byte To1, #11h byte To2, #12h byte To3, #13h byte To4, #14h byte To5, #15h byte To6, #16h byte To7, #17h byte To8, #18h byte To9, #19h byte ToA, #1ah byte ToB, #1bh byte ToC, #1ch byte ToD, #1dh byte ToE, #1eh byte ToF, #1fh ORG 2000h Begin: mov SP,#0Fh ; Debut de pile en 10h lcall LcdInit mov DPTR,#Mes1 lcall LcdWriteString lcall LcdCurseurOff Boucle: lcall ClaTestLed lcall ClaRead cjne A,#0,Boucle2 ; Test si touche tapee sjmp Boucle Boucle2: cjne A,#1,Bouclesuite ; Test si double touche lcall ClaAntiRebond ljmp Boucle Bouclesuite: cjne A,#To0,Suiteaction1 ; Test si touche 0 lcall LcdHome ; Touche 0 = retour au moniteur 8051 mov DPTR,#Mes2 lcall LcdWriteString ljmp 0000h Suiteaction1: cjne A,#To1,Suiteaction2 ; Test si touche 1 lcall E2PWriteEnable ; Touche 1 = deverrouillage en ecriture lcall LcdHome mov DPTR,#Mes3 lcall LcdWriteString mov A,#20 lcall Ret100ms ljmp Begin Suiteaction2: cjne A,#To2,Suiteaction3 ; Test si touche 2 lcall E2PWriteDisable ; Touche 2 = verrouillage en ecriture lcall LcdHome mov DPTR,#Mes4 lcall LcdWriteString mov A,#20 lcall Ret100ms ljmp Begin Suiteaction3: cjne A,#To3,Suiteaction4 ; Test si touche 3 ljmp Begin Suiteaction4: cjne A,#To4,Suiteaction5 ; Test si touche 4 lcall LcdHome ; Touche 4 dump adresse 0 a 3 mov DPTR,#Mes5 lcall LcdWriteString mov A,#7 lcall LcdCurseur mov A,#0 lcall LcdWriteByte mov A,#12 lcall LcdCurseur mov A,#3 lcall LcdWriteByte mov A,#16 lcall LcdCurseur mov DPL,#0 Action4boucle1: push DPL lcall E2PRead push ACC mov A,B lcall LcdWriteByte pop ACC lcall LcdWriteByte pop DPL inc DPL mov A,DPL cjne A,#4,Action4boucle1 lcall ClaAntiRebond lcall ClaReadTouche ljmp Begin Suiteaction5: cjne A,#To5,Suiteaction6 ; Test si touche 5 lcall LcdHome ; Touche 5 dump adresse 4 a 7 mov DPTR,#Mes5 lcall LcdWriteString mov A,#7 lcall LcdCurseur mov A,#4 lcall LcdWriteByte mov A,#12 lcall LcdCurseur mov A,#7 lcall LcdWriteByte mov A,#16 lcall LcdCurseur mov DPL,#4 Action5boucle1: push DPL lcall E2PRead push ACC mov A,B lcall LcdWriteByte pop ACC lcall LcdWriteByte pop DPL inc DPL mov A,DPL cjne A,#8,Action5boucle1 lcall ClaAntiRebond lcall ClaReadTouche ljmp Begin Suiteaction6: cjne A,#To6,Suiteaction7 ; Test si touche 6 lcall LcdHome ; Touche 6 dump adresse 8 a b mov DPTR,#Mes5 lcall LcdWriteString mov A,#7 lcall LcdCurseur mov A,#8 lcall LcdWriteByte mov A,#12 lcall LcdCurseur mov A,#11 lcall LcdWriteByte mov A,#16 lcall LcdCurseur mov DPL,#8 Action6boucle1: push DPL lcall E2PRead push ACC mov A,B lcall LcdWriteByte pop ACC lcall LcdWriteByte pop DPL inc DPL mov A,DPL cjne A,#12,Action6boucle1 lcall ClaAntiRebond lcall ClaReadTouche ljmp Begin Suiteaction7: cjne A,#To7,Suiteaction8 ; Test si touche 7 lcall LcdHome ; Touche 7 dump adresse c a f mov DPTR,#Mes5 lcall LcdWriteString mov A,#7 lcall LcdCurseur mov A,#12 lcall LcdWriteByte mov A,#12 lcall LcdCurseur mov A,#15 lcall LcdWriteByte mov A,#16 lcall LcdCurseur mov DPL,#12 Action7boucle1: push DPL lcall E2PRead push ACC mov A,B lcall LcdWriteByte pop ACC lcall LcdWriteByte pop DPL inc DPL mov A,DPL cjne A,#16,Action7boucle1 lcall ClaAntiRebond lcall ClaReadTouche ljmp Begin Suiteaction8: cjne A,#To8,Suiteaction9 ; Test si touche 8 lcall LcdHome ; Touche 8 dump adresse mov DPTR,#Mes6 lcall LcdWriteString mov A,#10 ; Saisie de l'adresse lcall LcdCurseur lcall LcdCurseurOn lcall ClaAntiRebond lcall ClaReadTouche ; Premiere touche anl A,#0fh push ACC lcall AscHexa2Car lcall LcdWriteChar pop ACC rl A rl A rl A rl A mov DPL,A push DPL lcall ClaAntiRebond lcall ClaReadTouche ; Seconde touche anl A,#0fh push ACC lcall AscHexa2Car lcall LcdWriteChar pop ACC pop DPL orl A,DPL mov DPL,A push DPL lcall LcdCurseurOff mov A,#10 ; Reaffichage de l'adresse par securite lcall LcdCurseur pop ACC push ACC lcall LcdWriteByte mov A,#25 lcall LcdCurseur pop DPL lcall E2PRead push ACC mov A,B lcall LcdWriteByte pop ACC lcall LcdWriteByte lcall ClaAntiRebond lcall ClaReadTouche ljmp Begin Relai1: ljmp Suiteaction10 Suiteaction9: cjne A,#To9,Relai1 ; Test si touche 9 lcall LcdHome ; Touche 9 ecriture adresse mov DPTR,#Mes6 lcall LcdWriteString mov A,#10 ; Saisie de l'adresse lcall LcdCurseur lcall LcdCurseurOn lcall ClaAntiRebond lcall ClaReadTouche ; Premiere touche anl A,#0fh push ACC lcall AscHexa2Car lcall LcdWriteChar pop ACC rl A rl A rl A rl A mov DPL,A push DPL lcall ClaAntiRebond lcall ClaReadTouche ; Seconde touche anl A,#0fh push ACC lcall AscHexa2Car lcall LcdWriteChar pop ACC pop DPL orl A,DPL mov DPL,A push DPL mov A,#10 ; Reaffichage de l'adresse par securite lcall LcdCurseur pop ACC push ACC lcall LcdWriteByte mov A,#25 ; Saisie de la donnee lcall LcdCurseur lcall ClaAntiRebond lcall ClaReadTouche ; Premiere touche anl A,#0fh push ACC lcall AscHexa2Car lcall LcdWriteChar pop ACC rl A rl A rl A rl A mov DPL,A push DPL lcall ClaAntiRebond lcall ClaReadTouche ; Seconde touche anl A,#0fh push ACC lcall AscHexa2Car lcall LcdWriteChar pop ACC pop DPL orl A,DPL mov DPL,A push DPL mov A,#25 ; Reaffichage du MSB de la donnée par securite lcall LcdCurseur pop ACC push ACC lcall LcdWriteByte lcall ClaAntiRebond lcall ClaReadTouche ; Troisieme touche anl A,#0fh push ACC lcall AscHexa2Car lcall LcdWriteChar pop ACC rl A rl A rl A rl A mov DPL,A push DPL lcall ClaAntiRebond lcall ClaReadTouche ; Quatrieme touche anl A,#0fh push ACC lcall AscHexa2Car lcall LcdWriteChar pop ACC pop DPL orl A,DPL mov DPL,A push DPL mov A,#27 ; Reaffichage du LSB de la donnée par securite lcall LcdCurseur pop ACC push ACC lcall LcdWriteByte pop ACC pop B pop DPL push B push ACC lcall E2PErase pop ACC pop B lcall E2PWrite ljmp Begin Relai2: ljmp Suiteaction11 Suiteaction10: cjne A,#ToA,Relai2 ; Test si touche A lcall LcdHome ; Touche 10 ecriture all mov DPTR,#Mes8 lcall LcdWriteString mov A,#25 ; Saisie de la donnee lcall LcdCurseur lcall LcdCurseurOn lcall ClaAntiRebond lcall ClaReadTouche ; Premiere touche anl A,#0fh push ACC lcall AscHexa2Car lcall LcdWriteChar pop ACC rl A rl A rl A rl A mov DPL,A push DPL lcall ClaAntiRebond lcall ClaReadTouche ; Seconde touche anl A,#0fh push ACC lcall AscHexa2Car lcall LcdWriteChar pop ACC pop DPL orl A,DPL mov DPL,A push DPL mov A,#25 ; Reaffichage du MSB de la donnée par securite lcall LcdCurseur pop ACC push ACC lcall LcdWriteByte lcall ClaAntiRebond lcall ClaReadTouche ; Troisieme touche anl A,#0fh push ACC lcall AscHexa2Car lcall LcdWriteChar pop ACC rl A rl A rl A rl A mov DPL,A push DPL lcall ClaAntiRebond lcall ClaReadTouche ; Quatrieme touche anl A,#0fh push ACC lcall AscHexa2Car lcall LcdWriteChar pop ACC pop DPL orl A,DPL mov DPL,A push DPL mov A,#27 ; Reaffichage du LSB de la donnée par securite lcall LcdCurseur pop ACC push ACC lcall LcdWriteByte lcall E2PEraseAll pop ACC pop B lcall E2PWriteAll ljmp Begin Suiteaction11: cjne A,#ToB,Suiteaction12; Test si touche B lcall E2PEraseAll ; Touche 11 = effacement de toute l'E2PROM lcall LcdHome mov DPTR,#Mes7 lcall LcdWriteString mov A,#20 lcall Ret100ms ljmp Begin Suiteaction12: cjne A,#ToC,Suiteaction13; Test si touche C Suiteaction13: cjne A,#ToD,Suiteaction14; Test si touche D Suiteaction14: cjne A,#ToE,Suiteaction15; Test si touche E Suiteaction15: cjne A,#ToF,Suiteaction16; Test si touche F Suiteaction16: ; Fin du test des touches ljmp Boucle ; Boucle infinie ; "xxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyy" Mes1: DB " Test des E2PROM series ",0 Mes2: DB " Moniteur ",0 Mes3: DB " Ecriture E2P deverrouillee ",0 Mes4: DB " Ecriture E2P verrouillee ",0 Mes5: DB " Add xx a xx yyyyyyyyyyyyyyyy",0 Mes6: DB " Add = xx Do = xxxx ",0 Mes7: DB " E2PROM effacee totalement ",0 Mes8: DB " Add = All Do = xxxx ",0 INCLUDE lib\libasc.asm INCLUDE lib\libcla1.asm INCLUDE lib\libe2p.asm INCLUDE lib\liblcd.asm INCLUDE lib\libret.asm