.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