home *** CD-ROM | disk | FTP | other *** search
/ 8051 Assembly Language Programming / easm51.iso / EMON51.DOC < prev    next >
Encoding:
Text File  |  1991-11-17  |  16.4 KB  |  392 lines

  1. EMON51.DOC
  2.  
  3. voir aussi:
  4.     EMON51.A51  ; EMON51 code source
  5.     EMON51.LST  ; Listing
  6.     EMON51.HEX  ; Listing hexadécimal avec somme de vérification d'EMON51
  7.                   (voir EASM51.DOC)
  8.  
  9. Pour pouvoir fonctionner, EMON51 nécessite les adresses de 30H à 4FH en RAM
  10. interne et celles de 4000H à 40FFH en mémoire de données.
  11.  
  12. Pour commencer EMON51 vérifie si RxD et TxD sont reliés directement. Si cela
  13. est le cas, la ligne TxD produit des sons (auto-test). EMON51 vérifie ensuite
  14. si la ligne RxD se trouve au niveau haut pour sauter à l'adresse 04100H (si,
  15. en effet, cette ligne se trouve au niveau haut). En présence d'une interface
  16. V24 fonctionnant normalement, la ligne RxD se trouve au niveau bas et EMON51
  17. initialise l'interface sérielle interne pour une communication à 4 800 baud (à
  18. une fréquence d'horloge de 12 MHz) en affichant un message correspondant.
  19. Maintenant EMON51 entre en mode de communication en faisant paraître sur
  20. l'écran le "caractère d'invite" de dialogue (prompt) #.
  21.  
  22. ┌────────────────────────────────────┬──────────────────────────────────────┐
  23. │ Commandes de dialogue              │Signification                         │
  24. ├────────────────────────────────────┼──────────────────────────────────────┤
  25. │ X adresse hex.<enter>              │eXécute                               │
  26. │ P adresse hex.<enter>              │affichage de la mémoire pour Programme│
  27. │ D adresse hex.<enter>              │affichage de la mémoire de Données    │
  28. │ R adresse hex.<enter>              │affichage de la RAM                   │
  29. │ F adresse hex.{bytes<blank>}<enter>│remplir mémoire de données            │
  30. │ M adresse hex.{bytes<blank>}<enter>│Modifier la RAM                       │
  31. │ H {chargement}                     │téléchargement hexadécimal            │
  32. └────────────────────────────────────┴──────────────────────────────────────┘
  33.  
  34. ---> La commande  X
  35.      sert à lancer un programme à une certaine adresse. Après le X, EMON51 se
  36.      manifeste par l'affichage des caractères d'invite "H>" et attend donc
  37.      l'entrée d'un nombre hexadécimal. Cette entrée se termine avec une action
  38.      sur la touche <enter>. Le programme est alors lancé à l'adresse
  39.      indiquée.
  40.  
  41. ---> La commande P
  42.      permet d'afficher le contenu de la mémoire pour programme. Après le P,
  43.      EMON51 montre les caractères d'invite "H>" et attend donc l'entrée d'un
  44.      nombre hexadécimal. Il faudra terminer cette entrée par une action sur la
  45.      touche <enter>. Le contenu des 128 octets de la mémoire de programme est
  46.      alors visualisé sur l'écran de votre moniteur. La première colonne
  47.      contient l'adresse actuelle.
  48.      Si, après l'apparition de "H>", on appuie sur la touche <enter> au lieu
  49.      d'entrer une adresse hexadécimale, la dernière adresse utilisée servira
  50.      d'adresse initiale. De multiples actions sur <enter> permettent donc de
  51.      vérifier tout un domaine dans la mémoire de programme.
  52.  
  53. ---> La commande D
  54.      sert à afficher le contenu de la mémoire de données. Pour une explication
  55.      de son fonctionnement il faudra se référer au paragraphe concernant la
  56.      commande P.
  57.  
  58. ---> La commande R
  59.      sert à afficher le contenu de la RAM. Pour une explication de son
  60.      fonctionnement on se référera au paragraphe concernant la commande
  61.      P.
  62.  
  63. ---> La commande F
  64.      permet de modifier le contenu de la mémoire de données. Après le F, EMON51
  65.      montre les caractères d'invite "H>" et attend donc l'entrée d'un nombre
  66.      hexadécimal. Il faudra terminer cette entrée par une action sur la touche
  67.      <enter>. Ce nombre hexadécimal est l'adresse initiale du domaine de la
  68.      mémoire à remplir.
  69.  
  70.      EMON51 visualise ensuite l'adresse et le contenu de l'emplacement en
  71.      mémoire choisi et fait paraître les caractères d'invite "H>". Il faudra
  72.      maintenant entrer un nombre hexadécimal correspondant au nouveau contenu
  73.      de l'emplacement en mémoire. Ce nouveau contenu est écrit dans la mémoire
  74.      et EMON51 continue avec l'emplacement en mémoire suivant.
  75.  
  76.      Si, après l'apparition de "H>", l'on entre un espace (blanc) au lieu d'un
  77.      nombre hexadécimal représentant le nouveau contenu de l'emplacement en
  78.      mémoire, EMON51 continuera avec l'emplacement en mémoire suivant.
  79.  
  80.      Si, après l'apparition de "H>", l'on appuie sur <enter> au lieu d'entrer
  81.      un nombre hexadécimal, EMON51 quitte le mode F et retourne au dialogue
  82.      standard.
  83.  
  84. ---> La commande M
  85.      sert à modifier le contenu de la RAM interne. Pour une explication de son
  86.      fonctionnement il faudra se référer au paragraphe concernant la commande
  87.      F.
  88.  
  89. ---> La commande H
  90.      sert à effectuer un téléchargement automatique, tout en faisant appel au
  91.      programme de communication V24COM. Pour en savoir quant au déroulement de
  92.      ce processus de téléchargement, il faudra se référer aux fichiers
  93.      EMON51.A51 et V24COM.PAS.
  94.      Maintenant EMON51 redevient actif sans visualiser pourtant le caractère
  95.      d'invite "#". Une fois le téléchargement terminé, V24COM envoie au SIMCAD
  96.      un CR (carriage return = retour à la ligne) qui force le caractère
  97.      d'invite "#" à apparaître.
  98.  
  99.  
  100. -------------------------------------------------------------------------------
  101. Routines du MONITEUR:
  102.  
  103. EMON51 met à la disposition du programmeur toute une gamme de programmes
  104. de soutien, facilitant la programmation en assembleur. Tous ces programmes
  105. peuvent être appelés par l'instruction CALL à l'adresse d'entrée dans EMON51:
  106.  
  107.                MON = 0200H.
  108.  
  109. La fonction à exécuter est définie par le contenu de l'octet COMMAND avec
  110. l'adresse 030H, dans la RAM interne. En général, les différents paramètres sont
  111. à transférer dans les registres ou reviennent dans ces registres.
  112.  
  113. ATTENTION:     les routines modifient des registres internes !!
  114.  
  115. Voici un exemple destiné à un appel (DEMO3.A51):
  116.  
  117. -------------------------------------------------------------------------------
  118. ;
  119. ccCHR   EQU 1                 ; instruction de sortie de caractère
  120. COMMAND EQU 030H              ; adresse COMMAND
  121. MON     EQU 0200H             ; adresse d'entrée dans le MONITEUR
  122. ;
  123.         ORG    04100H         ; adresse initiale
  124. CHR     MOV    COMMAND,#ccCHR ; je veux transférer le caractère
  125.         MOV    A,#'x'         ; x
  126.         LCALL  MON            ; appel du MONITEUR
  127.         RET                   ; retour à l'initialisateur
  128.         END
  129. -------------------------------------------------------------------------------
  130. Les routines du MONITEUR suivantes sont à votre disposition:
  131.  
  132. Nom          Code
  133. ;
  134. ;
  135. ccCHR   EQU  001H
  136. ccSTXT  EQU  002H
  137. ccBYTE  EQU  003H
  138. ccHEX16 EQU  004H
  139. ccdRO16 EQU  005H
  140. ccdRO32 EQU  006H
  141. cchRO16 EQU  007H
  142. cchRO32 EQU  008H
  143. ;
  144. ccGETC  EQU  010H
  145. ccTSTC  EQU  011H
  146. ccGET16 EQU  012H
  147. ccGET10 EQU  013H
  148. ccGETU  EQU  014H
  149. ;
  150. ccSNAP  EQU  020H
  151. ccLTIME EQU  021H
  152. ccSTIME EQU  022H
  153. ;
  154. ccLINK  EQU  040H
  155. ;
  156. ccADD   EQU  050H
  157. ccSUB   EQU  051H
  158. ccMUL   EQU  052H
  159. ccDIV   EQU  053H
  160. ccABS   EQU  054H
  161. ccNEG   EQU  055H
  162. ;
  163. -------------------------------------------------------------------------------
  164.  
  165. Nom :                 ccCHR
  166. Paramètre:            caractère dans A
  167. Registre modifié:     PSW
  168. Fonction:
  169.      Le caractère (ASCII) dans l'accumulateur A est transféré par
  170.      l'intermédiaire de V24.
  171.  
  172. -------------------------------------------------------------------------------
  173.  
  174. Nom :                 ccBYTE
  175. Paramètre:            octet dans A
  176. Registre modifié:     A,PSW
  177. Fonction:
  178.      L'octet dans l'accumulateur A est transféré sous forme hexadécimale par
  179.      l'intermédiaire de V24.
  180.  
  181. -------------------------------------------------------------------------------
  182.  
  183. Nom :                 ccHEX16
  184. Paramètre:            valeur à 16 bits dans DPTR
  185. Registre modifié:     A,PSW
  186. Fonction:
  187.      La valeur stockée dans DPTR est transférée sous forme hexadécimale
  188.      (à 4 positions) par l'intermédiaire de V24.
  189.  
  190. -------------------------------------------------------------------------------
  191.  
  192. Nom :                 ccdRO16
  193. Paramètre:            dans R0 :    pointeur sur valeur à 16 bits dans la RAM
  194.                                    interne
  195. Registre modifié:     A,PSW,tous les registres
  196. Fonction:
  197.      La valeur à 16 bits dans la RAM interne, pointée par R0, est transférée
  198.      sous forme décimale par l'intermédiaire de V24. R0 pointe l'octet de
  199.      poids faible, R0+1 l'octet de poids fort.
  200.  
  201. -------------------------------------------------------------------------------
  202.  
  203. Nom :                 ccdRO32
  204. Paramètre:            dans R0 :    pointeur sur la valeur à 32 bits dans la RAM
  205.                                    interne
  206. Registre modifié:     A,PSW,tous les registres
  207. Fonction:
  208.      La valeur à 32 bits dans la RAM interne, pointée par R0, est transférée
  209.      sous forme décimale par l'intermédiaire de V24. R0 pointe l'octet de
  210.      poids faible, R0+1 l'octet de poids fort.
  211.  
  212. -------------------------------------------------------------------------------
  213.  
  214. Nom :                 cchRO16
  215. Paramètre:            dans R0 :    pointeur sur la valeur à 16 bits dans la RAM
  216.                                    interne
  217. Registre modifié:     A,PSW,tous les registres
  218. Fonction:
  219.      La valeur à 16 bits dans la RAM interne, pointée par R0, est transférée
  220.      sous forme hexadécimale par l'intermédiaire de V24. R0 pointe l'octet de
  221.      poids faible, R0+1 l'octet de poids fort.
  222.  
  223. -------------------------------------------------------------------------------
  224.  
  225. Nom :                 cchRO32
  226. Paramètre:            dans R0 :    pointeur sur la valeur à 32 bits dans la RAM
  227.                                    interne
  228. Registre modifié:     A,PSW,tous les registres
  229. Fonction:
  230.      La valeur à 32 bits dans la RAM interne, pointée par R0, est transférée
  231.      sous forme hexadécimale par l'intermédiaire de V24. R0 pointe l'octet
  232.      de poids faible, R0+1 l'octet de poids fort.
  233.  
  234.  
  235. -------------------------------------------------------------------------------
  236.  
  237. Nom :                 ccGETC
  238. Paramètre:            placement d'un caractère dans A
  239. Registre modifié:     A,PSW
  240. Fonction:
  241.      Un caractère est pris en compte sur l'interface V24. En absence d'un
  242.      caractère, le programme attend la réception d'un caractère.
  243.  
  244. ---------------------------------------------------------------------
  245.  
  246. Nom :                 ccTSTC
  247. Paramètre:            placement d'une valeur dans A
  248. Registre modifié:     A,PSW
  249. Fonction:
  250.      Si un caractère est présent sur l'interface V24, la valeur 1 est
  251.      déplacée vers A; sinon, en absence de caractère, c'est un 0 que
  252.      l'on met dans l'accumulateur.
  253.  
  254. ---------------------------------------------------------------------
  255.  
  256. Nom :                 ccGETU
  257. Paramètre:            placement d'un caractère dans A
  258. Registre modifié:     A,PSW
  259. Fonction:
  260.      identique à ccGETC, minuscules sont transformées en majuscules.
  261.  
  262. ---------------------------------------------------------------------
  263.  
  264. Nom :                 ccGET10
  265. Paramètre:            pointeur sur une valeur à 16 bit dans R0
  266. Registre modifié:     A,B,PSW,tous les registres
  267. Fonction:
  268.      Un nombre décimal est pris de l'interface V24 (à l'aide de l'in-
  269.      struction "D>""). La valeur est stockée provisoirement dans la RAM
  270.      interne. Dans le registre R0 un pointeur est placé sur cette valeur.
  271.  
  272. ---------------------------------------------------------------------
  273.  
  274. Nom :                 ccGET16
  275. Paramètre:            pointeur sur une valeur à 16 bit dans R0
  276. Registre modifié:     A,B,PSW,tous les registres
  277. Fonction:
  278.      Un nombre hexadécimal est pris de l'interface V24 (à l'aide de
  279.      l'instruction "H>""). La valeur est stockée provisoirement dans la RAM
  280.      interne. Dans le registre R0 un pointeur est placé sur cette valeur.
  281.  
  282. ---------------------------------------------------------------------
  283.  
  284. Nom :                 ccSNAP
  285. Paramètre:            aucun
  286. Registre modifié:     aucun
  287. Fonction:
  288.      Le contenu actuel des registres est déplacé vers l'interface
  289.      V24 sans être modifié.
  290.  
  291. ---------------------------------------------------------------------
  292.  
  293. Nom :                 ccLTIME
  294. Paramètre:            valeur à 16 bit dans DPTR
  295. Registre modifié:     DPTR,codes complémentaires (flags)
  296. Fonction:
  297.      Une pause de 'n'-millisecondes environ est introduite. 'n' est
  298.      une valeur définie dans DPTR (indication valable uniquement pour
  299.      une fréquence d'horloge de 12 MHz).
  300.  
  301. ---------------------------------------------------------------------
  302.  
  303. Nom :                 ccSTIME
  304. Paramètre:            valeur à 16 bit dans DPTR
  305. Registre modifié:     DPTR,codes complémentaires (flags)
  306. Fonction:
  307.      Une pause de 15*'n'-millisecondes environ est introduite. 'n' est
  308.      une valeur définie dans DPTR (indication valable uniquement pour
  309.      une fréquence d'horloge de 12 MHz).
  310.  
  311. ---------------------------------------------------------------------
  312.  
  313. Nom :                 ccLINK
  314. Paramètre:            index dans A , adresse dans DPTR
  315. Registre modifié:     A,B,PSW,R6,R7
  316. Fonction:
  317.      Transfert de l'adresse d'une procédure d'interruption dans DPTR;
  318.      d'un index dans A:
  319.  
  320.        Index  Interruption  Adresse standard
  321.          1        IE0            0003H
  322.          2        TF0            000BH
  323.          3        IE1            0013H
  324.          4        TF1            001BH
  325.          5       RI+TI           0023H
  326.          6      TF2+EXF2         002BH
  327.  
  328.      LINK fait ensuite que l'interruption en question se traduise par
  329.      le lancement de la routine indiquée. Après une remise à zéro,
  330.      tous les LINK sont effacés et remplacés par des LINK de défaut.
  331.  
  332. ---------------------------------------------------------------------
  333. ROUTINES ARITHMÉTIQUES:
  334.  
  335. Les opérandes sont présents dans la RAM interne et sont adressés par des
  336. pointeurs, placés eux sur l'octet le moins significatif, dans les registres
  337. R0 et R1 respectivement. Le déplacement de valeurs s'effectue également à
  338. travers la RAM interne dans des tampons provisoires définis par EMON51.
  339. Les pointeurs placés sur ces valeurs sont présents dans le registre R0,
  340. voire R1.
  341. Du fait que d'autres appels du Moniteur utilisent les mêmes tampons
  342. provisoires, il faudra, avant de procéder à un traitement des valeurs,
  343. les copier dans d'autres emplacements en mémoire. Les routines détruisent
  344. le contenu de tous les registres concernés.
  345.  
  346. Les routines spécifiques:
  347.  
  348. Nom      :  ccADD
  349. Paramètre:  R0, R1 : pointeur placé sur opérandes à 16 bits,
  350. Effet    :  R0     : pointeur placé sur le résultat.
  351.          Les 2 nombres à 16 bits, @R0 et @R1 sont additionnés.
  352.          Dans R0 un pointeur est placé sur le résultat.
  353.  
  354. Nom      :  ccSUB
  355. Paramètre:  R0, R1 : pointeur placé sur opérandes à 16 bits,
  356. Effet    :  R0     : pointeur placé sur le résultat.
  357.          Soustraction du nombre à 16 bits @R1 du nombre à 16 bits @R0.
  358.          Dans R0 un pointeur est placé sur le résultat.
  359.  
  360. Nom      :  ccMUL
  361. Paramètre:  R0, R1 : pointeur placé sur opérandes à 16 bits,
  362. Effet    :  R0     : pointeur placé sur le résultat à 32 bits.
  363.          Multiplication des 2 nombres (non signé) à 16 bits, @R0 et @R1.
  364.          Dans R0 un pointeur est placé sur le résultat à 32 bits.
  365.  
  366. Nom      :  ccDIV
  367. Paramètre:  R0     : pointeur sur un nombre à 32 bits,
  368.             R1     : pointeur sur opérande à 16 bits,
  369. Effet    :  R0     : pointeur sur résultat à 16 bits,
  370.             R1     : pointeur sur le reste à 16 bits.
  371.          Le nombre @R0 à 32 bits est divisé par @R1 (sans signe !).
  372.          Dans R0 un pointeur est placé sur le quotient à 16 bits.
  373.          Dans R1 un pointeur est placé sur le reste à 16 bits.
  374.          Pour garantir le bon fonctionnement de cette routine il faudra
  375.          que le quotient soit inférieur au nombre 65 636.
  376.  
  377. Nom      :  ccABS
  378. Paramètre:  R0     : pointeur sur un nombre à 16 bits
  379. Effet    :  valeur modifiée et éventuellement le code complémentaire CY
  380.          Constitution de la valeur absolue du nombre à 16 bits @R0.
  381.          La nouvelle valeur écrase l'ancienne !  R0 ne change
  382.          pas lors de cette opération. Le code complémentaire CY est
  383.          positionné uniquement si la valeur d'origine était négative.
  384.          (Arithmétique de complément à deux)
  385.  
  386. Nom      :  ccNEG
  387. Paramètre:  R0     : pointeur sur un nombre à 16 bits,
  388. Effet    :  valeur modifiée.
  389.          Constitution de la valeur négative du nombre à 16 bits @R0.
  390.          Cette nouvelle valeur écrase l'ancienne. R0 ne
  391.          change pas ! (Arithmétique de complément à deux)
  392.