Logo del sito i2viu

LISTATO RXBYTE
by Vittorio Crapella - i2viu

 

            .title  "RXBYTE"          ; Titolo del programma

            .vers   "ST62E10"        ; Microprocessore usato 

            .w_on             ; Abilita la memoria a finestre

            ;       8 Mhz                  ;vers 31/7/96

;----------------------------------------------------------------------------

;|                       VARIABILI DEL MICROPROCESSORE                      |

 

a                  .def    0ffh    ;Registro accumulatore

x                  .def    080h    ;Registro x

y                  .def    081h    ;Registro y

v          .def    082h    ;Registro v

w         .def    083h    ;Registro w

port_a              .def    0c0h    ;Registro Dati porta A

port_b         .def    0c1h    ;Registro Dati porta B

port_c              .def    0c2h    ;Registro Dati porta C

pdir_a              .def    0c4h    ;Registro Direzione porta A

pdir_b              .def    0c5h    ;Registro Direzione porta B

pdir_c              .def    0c6h    ;Registro Direzione porta C

popt_a             .def    0cch    ;Registro Opzioni porta A

popt_b             .def    0cdh    ;Registro Opzioni porta B

popt_c             .def    0ceh    ;Registro Opzioni porta C

ior        .def    0c8h    ;Registro Opzioni per le Interruzioni

addr    .def    0d0h    ;Registro Dati dell'A/D converter

adcr    .def    0d1h    ;Registro di Controllo dell'A/D converter

psc       .def    0d2h    ;Registro per il Prescaler del Timer

tcr        .def    0d3h    ;Registro Dati del Timer

tscr      .def    0d4h    ;Registro TSCR del Timer

wdog               .def    0d8h    ;Registro del WatchDog

drw     .def    0c9h    ;Registro della zona dati ROM (Rom Data Window)

;--------------------------------------

;VARIABILI usate da questo PROGRAMMA  

;--------------------------------------

prima_var        .def      084h   

;fino a   0bfh    massimo

;------------------------

;SETTAGGIO  INIZIALE

;------------------------

            .org    0880h                 

 

inizio                ldi     wdog,0ffh       ;Carico il Watch-Dog.

 

;***  Setta la porta A

            ldi     port_a,00000000b          ;pa0=input

            ldi     pdir_a,00000000b       

            ldi     popt_a,00000000b        

 

;***  Setta la porta B

            ldi     port_b,00000000b        ;default out=0

            ldi     pdir_b,11111111b        ;tutti out

            ldi     popt_b,11111111b 

 

            reti                 

            jp      main  

;------------------------

;GESTORI di INTERRUPT  

;------------------------

ad_int   reti

tim_int reti

BC_int  reti

A_int   reti

nmi_int             reti

;------------------------

;PROGRAMMA PRINCIPALE

;------------------------

main     ldi        wdog,255        ;RICEVE UN BYTE

            ldi        w,25                ;resta in questo loop fino a che input

testa     jrs        0,port_a,main   ;da alto torna basso e permane + di un T

            dec      w                     ;per assicurarsi che sia un nuovo byte

            jrnz      testa

            ldi        x,8                   ;numero bit da ricevere x confronto

input     ldi        wdog,255

            jrr        0,port_a,input  ;resta qui se non riceve dalla linea

            ldi        w,13                ;predispone per la campionatura a 1/2 T

decr     dec      w

            jrnz      decr

            jrr        0,port_a,zero   ;se dopo 1/2 T e` 0 salta

uno      set        0,a                   ;altrimenti setta bit0 di a

            dec      x                      ;conta un bit ricevuto

            jrz        out                   ;se sono finiti salta

            sla        a                      ;altrimenti sposta a sinistra bit0 e preapara

resta     jrs        0,port_a,resta  ;per il prossimo

            jp         input                ;se linea =1 resta altrimenti input

out       ld         port_b,a           ;ha ricevuto il byte e lo mette su port_b

            jp         main                 ;ricomincia per altro byte

zero     res       0,a                   ;bit0= 0

            dec      x

            jrz        out                   ;se sono finiti salta

            sla        a                      ;altrimenti sposta a sinistra e libera x prox

            jp         input                 ;ne aspetta un altro

                       

;-------------------------

;VETTORI DI INTERRUPTS 

;-------------------------

            .org    0ff0h

            jp      ad_int     ;A/D int        vector #4

            jp      tim_int     ;timer int      vector #3

            jp      BC_int    ;port B & C int vector #2

            jp      A_int      ;port A int     vector #1

            .org    0ffch

            jp      nmi_int    ;nmi int        vector #0

            jp         inizio    ;reset vector    

.end                             ; Fine del programma

Disclaimer     INDEX             Torna indietro