Logo del sito i2viu

LISTATO TXBYTE
by Vittorio Crapella - i2viu

            .title  "TXBYTE"          ; 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_    .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          ; Significa: da qui in poi memorizziamo il

                                          ; programma nella memoria ROM

inizio                                            ;Inizializzazione del micro

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

 

;***  Setta la porta A

            ldi     port_a,00000000b          ;pa0=OUT

            ldi     pdir_a,00000001b       

            ldi     popt_a,00000001b        

 

;***  Setta la porta B

            ldi     port_b,00000000b       

            ldi     pdir_b,00000000b        ;tutti INPUT

            ldi     popt_b,00000000b 

            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

            ld         a,port_b           ;mette in a il byte da trasmettere

            ldi        x,8                   ;numero dei bit da tx

unbit     rlc        a                      ;ruota nrl cy il bit 7 del byte

            jrnc      zero                 ;se cy=0 salta a zero

            jp         uno                  ;se cy=1 salta a uno

zero     set        0,port_a           ;mette linea=1

            ldi        w,6                  ;resta a 1 per 1/4 T

decw    dec      w

            jrnz      decw

            res       0,port_a           ;mette linea=0

            ldi        w,19                ;resta a 0 per 3/4 T

dew     dec      w

            jrnz      dew

            jp         decx

uno      set        0,port_a           ;lineaa=1

            ldi        w,19                ;resta per 3/4 T

decc     dec      w

            jrnz      decc    

            res       0,port_a           ;lineaa=0

            ldi        w,6                  ;resta a 0 per 1/4 T

decw_  dec      w

            jrnz      decw_

decx     dec      x

            jrz        ldiw                 ;se i bit tx sono 8 ritorna

            jp         unbit                ;altrimenti ne prende un'altro

ldiw      ldi        w,35                ;pausa fra byte = circa 2T

duet     ldi        wdog,255

            dec      w

            jrnz      duet

            jp         main                 ;altro byte

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

;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