• Non ci sono risultati.

Listato dei programmi B.1 Programma Assembler

N/A
N/A
Protected

Academic year: 2021

Condividi "Listato dei programmi B.1 Programma Assembler"

Copied!
17
0
0

Testo completo

(1)

Appendice B

Listato dei programmi

B.1 Programma

Assembler

;--- Programma per il calcolo delle accelerazioni dell'ADXL202JE e trasferimento dei dati in seriale

list P=PIC16F877, F=INHX8M, ST=OFF, N=42, MM=OFF, B=6 radix dec

include "p16f877.inc" errorlevel -302

__CONFIG _XT_OSC & _PWRTE_OFF & _BODEN_OFF & _CP_OFF & _WDT_OFF & _LVP_OFF

PORTB_CONF equ 240 ; setto i piedini RB7, RB6 e RB5 come ingressi RB7 equ 7 ; per sfruttare la proprieta di questa porta RB6 equ 6 ; di gestire interruzioni per il cambiamento RB5 equ 5 ; di stato dei piedini RB<7,6,5,4>

; RB7= assex , RB6=assey , RB5=assez. Corispondenza tra i piedini e il

RB4 equ 4 ;sensore

RBIE equ 3

TMR1ON equ 0 ; bit 0 del

registro T1CON, avvia il Timer1

tx equ 6 ; tx è nel

piedino RC6

rx equ 7 ; rx è nel

piedino RC7

baud equ 3 ; setto la trasmissione

a 57600 con oscillatore a FOSC = 3.6864 MHz, hi

KHi equ 2

KLo equ 13

(2)

Listato dei Programmi

asp ; controlla se è

la primaq esecuzione del programma Count1 ArgL ArgH AccHi AccLo DivCnt PRODW3 PRODW2 PRODW1 PRODW0 DIV0 DIV1 ANS0 ANS1 T2xHi T2xLo T2zHi T2zLo T1xLo T1xHi

T1yLo ; variabili per il conteggio di T1

T1yHi T1zLo T1zHi ZXcalHi ZXcalLo ZYcalHi ZYcalLo ZZcalHi ZZcalLo T2xcalHi T2xcalLo T2zcalHi T2zcalLo ZXActualHi ZXActualLo ZYActualHi ZYActualLo ZZActualHi ZZActualLo XAccel YAccel

(3)

Listato dei Programmi

ZAccel

LASTPB ; memorizza il

valore della porta B

TEMP ; memorizza il valore

dell'ultima lettura della porta B

conta ; variabile di comodo

nei conteggi

dato ; variabile che tiene

conto del dato ricevuto e da mandare alla seriale

canali ;

posto ;

comodo ;

STATO ; indica quante

volte si accede a quella procedura Temp0 Temp1 Temp2 Temp3 EADR EDATA endc org 00h goto start org 110h

;---Subroutine Controllo sulla attivazione della procedura di calibrazione--- ControllaCalibra

rip btfsc PORTB,RB4 ; RB4 è basso?

goto rip

avanti

call CalcoloT2 ; fa la procedura di calibrazione e salva i valori rilevati movf T2xHi,W movwf T2xcalHi movf T2xLo,W movwf T2xcalLo movf T2zHi,W movwf T2zcalHi movf T2zLo,W movwf T2zcalLo

(4)

Listato dei Programmi call CalcoloT1 movf T1xHi,W movwf ZXcalHi movf T1xLo,W movwf ZXcalLo movf T1yHi,W movwf ZYcalHi movf T1yLo,W movwf ZYcalLo movf T1zHi,W movwf ZZcalHi movf T1zLo,W movwf ZZcalLo return

;---calcolo del periodo nel primo ciclo utile del solo segnale X CalcoloT2

T2x

movlw 2

movwf conta

clrf T1CON ; Pulisco il registro

clrf TMR1L ; resetto il timer, parte

bassa

clrf TMR1H ; e parte alta

FronteAltox

btfss PORTB,RB7 ;

goto FronteAltox ;

bsf T1CON,TMR1ON ; Abilito il Timer1

FronteBassox btfsc PORTB,RB7 ; goto FronteBassox ; decf conta,1 ; FronteAlto2x btfss PORTB,RB7

(5)

Listato dei Programmi

goto FronteAlto2x

decfsz conta,1

goto fine ; Genera segnale d'erroe per esempio

interrupt Stopx

bcf T1CON,TMR1ON ; stoppo il Timer

movf TMR1H,w ; salvo il contenuto del

Timer1

movwf T2xHi

movf TMR1L,w ; salvo il contenuto

del Timer1

movwf T2xLo

T2z

clrf T1CON ; Pulisco il registro

clrf TMR1L ; resetto il timer, parte

bassa clrf TMR1H ; e parte alta movlw 2 movwf conta FronteAltoz btfss PORTB,RB5 ; goto FronteAltoz ;

bsf T1CON,TMR1ON ; Abilito il Timer1

FronteBassoz btfsc PORTB,RB5 ; goto FronteBassoz ; decf conta,1 ; FronteAlto2z btfss PORTB,RB5 goto FronteAlto2z decfsz conta,1

(6)

Listato dei Programmi

Stopz

bcf T1CON,TMR1ON ; stoppo il Timer

movf TMR1H,w ; salvo il contenuto del

Timer1

movwf T2zHi

movf TMR1L,w ; salvo il contenuto

del Timer1

movwf T2zLo

return

;---Subroutine Calcolo T1 dei tre segnali X, Y e Z---

CalcoloT1

bsf STATUS,RP0

;movlw B'10000000' ; Setto la direzione

dei pin nella porta B

;movwf TRISB

bcf STATUS,RP0

clrf T1CON ; Pulisco il registro

clrf TMR1L ; resetto il timer, parte

bassa

clrf TMR1H ; e parte alta

Aspetta_RB7

btfsc PORTB,RB7 ; cerco il momento in cui il

segnale torna a zero

goto Aspetta_RB7

Aspetta_RB7_up

btfss PORTB,RB7

goto Aspetta_RB7_up

bsf T1CON,TMR1ON ; attivo il timer

Aspetta_RB7_down

btfsc PORTB,RB7 ; cerco il momento in cui il

segnale torna a zero

goto Aspetta_RB7_down

bcf T1CON,TMR1ON ; stoppo il timer e ne

salvo il contenuto

movf TMR1L,0 ; in T1xlo e T1xhi

movwf T1xLo

movf TMR1H,0

movwf T1xHi

(7)

Listato dei Programmi

clrf TMR1L ; resetto il timer, parte

bassa

clrf TMR1H ; e parte alta

Aspetta_RB6

btfsc PORTB,RB6 ; cerco il momento in cui il

segnale torna a zero

goto Aspetta_RB6

Aspetta_RB6_up

btfss PORTB,RB6

goto Aspetta_RB6_up

bsf T1CON,TMR1ON ; attivo il timer

Aspetta_RB6_down

btfsc PORTB,RB6 ; cerco il momento in cui il

segnale torna a zero

goto Aspetta_RB6_down

bcf T1CON,TMR1ON ; stoppo il timer e ne

salvo il contenuto

movf TMR1L,0 ; in T1ylo e T1yhi

movwf T1yLo

movf TMR1H,0

movwf T1yHi

clrf T1CON ; Pulisco il registro

clrf TMR1L ; resetto il timer, parte

bassa

clrf TMR1H ; e parte alta

Aspetta_RB5

btfsc PORTB,RB5 ; cerco il momento in cui il

segnale torna a zero

goto Aspetta_RB5

Aspetta_RB5_up

btfss PORTB,RB5

goto Aspetta_RB5_up

bsf T1CON,TMR1ON ; attivo il timer

Aspetta_RB5_down

btfsc PORTB,RB5 ; cerco il momento in cui il

segnale torna a zero

goto Aspetta_RB5_down

bcf T1CON,TMR1ON ; stoppo il timer e ne

salvo il contenuto

movf TMR1L,0 ; in T1zlo e T1zhi

movwf T1zLo

(8)

Listato dei Programmi

movwf T1zHi

clrf T1CON ; Pulisco il registro

clrf TMR1L ; resetto il timer, parte

bassa

clrf TMR1H ; e parte alta

incf STATO,1

return

;--- Impostazioni delle porte

;--- portB usata per la comuncazione con l'accelerometro, PortC usata per la trasmissione tramite seriale al PC

start

bcf STATUS, RP0

bcf STATUS, RP1 ; accedo al banco di

memoria 0

clrf PORTB

bsf STATUS, RP0 ; accedo al

banco di memoria 1,

movlw 240

movwf TRISB ; setto

RB7, RB6, RB5 e RB4 in ingresso

movlw 128 ; setto RC6/Tx

in uscita e RC7/Rx in ingresso

movwf TRISC

bsf OPTION_REG,NOT_RBPU ; disabilita

esplicitamente il pull-up software sulla porta B

clrf STATUS ; Bank0

clrf INTCON ; Disable

interrupts and clear some flags

clrf PIR1 ; Clear all flag bits

bcf STATUS, RP0 ; Bank0

clrf T1CON goto Main

(9)

Listato dei Programmi

Main bsf STATUS,RP0

movlw baud

movwf SPBRG

clrf TXSTA ; trasmissione asincrona,8 bit bsf TXSTA,BRGH ; high speed

bsf TXSTA,TXEN ; Abilita la

comunicazione seriale

bcf STATUS,RP0 ; Banco 0

BSF RCSTA,SPEN ; configura il pin TX come uscita seriale...

call ControllaCalibra ; Controlla se abilitata la procedura di calibrazione

goto Invia_RS232

ripeti call CalcoloT1 Invia_RS232

bcf STATUS,RP0 ; Banco 0;

bsf RCSTA,SPEN ; configura il pin TX come uscita seriale...

bsf STATUS,RP0

bsf TXSTA,TXEN ; abilitazione comunicazione seriale

aspettax0 btfss TXSTA,TRMT ; aspetto che il registro TSR sia vuoto

goto aspettax0 bcf STATUS,RP0

movlw 115

MOVWF TXREG ; invia il carattere di sincronismo "s" BSF STATUS,RP0 aspettax1s BTFSS TXSTA,TRMT GOTO aspettax1s bcf STATUS,RP0 movlw 100

MOVWF TXREG ; invia il carattere di sincronismo "d" BSF STATUS,RP0

aspettax2s BTFSS TXSTA,TRMT GOTO aspettax2s

(10)

Listato dei Programmi

bcf STATUS,RP0

movlw 80

MOVWF TXREG ; invia il carattere di sincronismo "P" BSF STATUS,RP0

aspettax3s BTFSS TXSTA,TRMT GOTO aspettax3s

bcf STATUS,RP0

movf T1xHi,0

MOVWF TXREG ; invia il valore T1xHi BSF STATUS,RP0

aspettas8 BTFSS TXSTA,TRMT GOTO aspettas8

bcf STATUS,RP0

movf T1xLo,0

MOVWF TXREG ; invia il valore T1xLo BSF STATUS,RP0

aspettas7 BTFSS TXSTA,TRMT GOTO aspettas7

bcf STATUS,RP0

movf T1yHi,0

MOVWF TXREG ; invia il valore T1yHi BSF STATUS,RP0

aspettasA BTFSS TXSTA,TRMT GOTO aspettasA

bcf STATUS,RP0

movf T1yLo,0

MOVWF TXREG ; invia il valore T1yLo BSF STATUS,RP0

aspettas9 BTFSS TXSTA,TRMT GOTO aspettas9

bcf STATUS,RP0

movf T1zHi,0

MOVWF TXREG ; invia il valore T1zHi BSF STATUS,RP0

aspettasB BTFSS TXSTA,TRMT GOTO aspettasB

bcf STATUS,RP0

movf T1zLo,0

MOVWF TXREG ; invia il valore T1zLo BSF STATUS,RP0

aspettasC BTFSS TXSTA,TRMT GOTO aspettasC

(11)

Listato dei Programmi

BCF STATUS,RP0 bcf STATUS,RP0

movf T2xHi,0

MOVWF TXREG ; invia il valore T2xh BSF STATUS,RP0

aspettaT2xh BTFSS TXSTA,TRMT GOTO aspettaT2xh

bcf STATUS,RP0

movf T2xLo,0

MOVWF TXREG ; invia il valore T2xLo BSF STATUS,RP0

aspettaT2xl BTFSS TXSTA,TRMT GOTO aspettaT2xl

bcf STATUS,RP0

movf T2zHi,0

MOVWF TXREG ; invia il valore T2zh BSF STATUS,RP0

aspettaT2zh BTFSS TXSTA,TRMT GOTO aspettaT2zh

bcf STATUS,RP0

movf T2zLo,0

MOVWF TXREG ; invia il valore T2zl BSF STATUS,RP0

aspettaT2zl BTFSS TXSTA,TRMT GOTO aspettaT2zl

bcf STATUS,RP0

movf ZXcalHi,0

MOVWF TXREG ; invia il valore ZXcalHi BSF STATUS,RP0 aspettaZXcalH BTFSS TXSTA,TRMT GOTO aspettaZXcalH bcf STATUS,RP0 movf ZXcalLo,0

MOVWF TXREG ; invia il valore ZXcalLo BSF STATUS,RP0 aspettaZXcalL BTFSS TXSTA,TRMT GOTO aspettaZXcalL bcf STATUS,RP0 movf ZYcalHi,0

MOVWF TXREG ; invia il valore ZYcalHi BSF STATUS,RP0

(12)

Listato dei Programmi aspettaZYcalH BTFSS TXSTA,TRMT GOTO aspettaZYcalH bcf STATUS,RP0 movf ZYcalLo,0

MOVWF TXREG ; invia il valore ZYcalLo BSF STATUS,RP0 aspettaZYcalL BTFSS TXSTA,TRMT GOTO aspettaZYcalL bcf STATUS,RP0 movf ZZcalHi,0

MOVWF TXREG ; invia il valore ZZcalHi BSF STATUS,RP0 aspettaZZcalH BTFSS TXSTA,TRMT GOTO aspettaZZcalH bcf STATUS,RP0 movf ZZcalLo,0

MOVWF TXREG ; invia il valore ZZcalLo BSF STATUS,RP0 aspettaZZcalL BTFSS TXSTA,TRMT GOTO aspettaZZcalL ; ; return goto ripeti fine end

B.2 Programma Visual Basic

Dim canali(1 To 16) As Integer Dim B(1 To 19) As Integer Dim grafico(1 To 3) As Double

(13)

Listato dei Programmi

Dim conta As Integer Dim stato As Integer Dim ris(1 To 6) As Double Dim T2(1 To 6) As Double Dim Zcal(1 To 6) As Double Dim T1(1 To 6) As Double Dim Accel(1 To 3) As Double Dim cal(1 To 4) As Double Dim somma As Integer

Dim vett(1 To 3, 1 To 200) As Double Dim Control As Boolean

Dim X(1 To 1024) As Double Dim Y(1 To 1024) As Double Dim Z(1 To 1024) As Double Dim i, j, k, r, p, h, conf As Integer Private Sub CmdExit_Click() End

End Sub

Private Sub Cmdstart_Click() MSComm1.CommPort = 1

' 57600 baud, no parity, 8 data, and 1 stop bit. MSComm1.Settings = "57600,N,8,1"

' Tell the control to read entire buffer when Input ' is used. MSComm1.InputLen = 0 MSComm1.PortOpen = True Timer1.Interval = 50 Timer1.Enabled = True End Sub

Private Sub CmdStop_Click() Timer1.Enabled = False MSComm1.PortOpen = False End Sub

Private Sub Command1_Click() Control = True

Salvadati.ShowSave

Open Salvadati.FileName For Output As #1 End Sub

(14)

Listato dei Programmi 'For j = 1 To 1024 ''Write #1, X(j), Y(j), Z(j), ''Write #1, 'Text1(28).Text = X(j) 'Text1(29).Text = Y(j) 'Text1(30).Text = Z(j) 'Next j Close #1 End Sub

Private Sub Form_Load()

'MsgBox "FASE DI CALIBRAZIONE TERMINATA", 64, "Procedura Calibrazione" Timer1.Enabled = False

Control = False conta = 0 stato = 0

'MsgBox "ATTENZIONE!!Controllare il Periodo", 64, "Controllo Periodo" End Sub

Private Sub Timer1_Timer() Dim A As String

A = MSComm1.Input PrimaS = InStr(A, "s") Text2.Text = PrimaS

A = Right(A, Len(A) - PrimaS + 1) Text3.Text = A 'For p = 1 To 19 ' B(p) = Asc(Mid(A, p, 1)) sottos = Left(A, 19) 'Next p Text4.Text = sottos

If Left(sottos, 1) = "s" Then 'And Left(sottos, 2) = "d" And Left(sottos, 3) = "P" Text5.Text = "Pippo"

conta = conta + 1 If conta = 20 Then

MsgBox "FASE DI CALIBRAZIONE TERMINATA", 64, "Procedura Calibrazione" stato = 1

(15)

Listato dei Programmi

i = 1

For j = 1 To 6

' memorizza i valori di calibrazione di T2 If i = 2 Then T2(j) = Asc(Mid(sottos, (i + 9), 1)) If somma = 0 Then i = 0 somma = somma + 1 End If Else T2(j) = Asc(Mid(sottos, (i + 9), 1)) End If

Text1(j - 1).Text = T2(j) ' voglio fare l'estensione a 16 bit i = i + 1

Next j For j = 1 To 6

Zcal(j) = Asc(Mid(sottos, (j + 13), 1)) ' memorizza i valori di calibrazione di Zcal Text1(j + 5).Text = Zcal(j)

Next j For i = 1 To 4 cal(i) = Asc(Mid(sottos, (i + 9), 1)) Text1(i + 11) = cal(i) Next i End If If stato = 0 Then sottos = Left(A, 19) Else

sottos = Left(A, 9) 'prendo i 6 dati T1xHi, T1xLo, T1yHi, T1yLo, T1zHi, T1zLo ' For i = 0 To 10 'Next i 'Text5.Text = "Pippo" ' 'For k = 1 To 3 ' For i = 1 To 6 T1(i) = Asc(Mid(sottos, i + 3, 1))

(16)

Listato dei Programmi

Text1(i + 15).Text = T1(i) Next i

'k = i - 1 j = 1 For i = 1 To 3

Accel(i) = 720 * ((T1(j) * 256 + T1(j + 1)) - (Zcal(j) * 256 + Zcal(j + 1))) / (T2(j) * 256 + T2(j + 1))

Text1(i + 21).Text = Accel(i) j = j + 2 Next i For i = 1 To 3 grafico(i) = Accel(i) Next i ' ' j = 1 ' ' ' If j < 1024 Then ' If Control Then ' For i = 1 To 3 ' If i = 1 Then ' X(j) = Accel(i) ' Text1(25).Text = X(j) ' ElseIf 2 = 2 Then ' Y(j) = Accel(i) ' Text1(26).Text = Y(j) ' ElseIf i = 3 Then ' Z(j) = Accel(i) ' Text1(27).Text = Z(j) ' End If ' ' End If ' j = j + 1 ' Next i n = 1

(17)

Listato dei Programmi For n = 1 To 1024 For i = 1 To 3 'grafico(i) = Accel(i) If Control Then If i = 1 Then X(n) = Accel(i) Text1(25).Text = X(n) ElseIf i = 2 Then Y(n) = Accel(i) Text1(26).Text = Y(n) ElseIf i = 3 Then Z(n) = Accel(i) Text1(27).Text = Z(n) End If End If Next i If Control Then ' For n = 1 To 1024 Write #1, X(n), Y(n), Z(n), Write #1, End If Next n MSChart2.ChartData = grafico End If End If End Sub

Riferimenti

Documenti correlati

l’esame d’idoneità occorre possedere la ECDL (così hanno deciso i vari CCdS nel 2001/02). • chi possiede altri tipi di attestati può avere

Calcoli di campo magnetico, nota la distribuzione delle correnti.. Moto di cariche in campi elettrici

Modulo 4: Le disequazioni lineari Intervalli e loro rappresentazione Disequazioni lineari intere e fratte Sistemi di disequazioni. Modulo 5: I sistemi di equazioni lineari

• Per produrre il file eseguibile è necessario collegare (utilizzando il linker) tra loro i diversi file oggetto e le librerie di funzioni standard che sono file forniti insieme

Sviluppo di Taylor con resto di Peano e Lagrange fino allʼordine n per funzioni più variabili a valori scalari.. 3- FUNZIONI IMPLICITE E

L’ultimo incontro si terrà all’interno delle scuderie di Palazzo Farnese di Caprarola dove, oltre alla consegna ufficiale degli attestati di partecipazione, verrà effettuata

PROCEDURA DI AFFIDAMENTO CODICE CUP DI UN LAVORO O DI ALTRA ACQUISIZIONE PRESENTE IN PROGRAMMAZIONE DI LAVORI,. FORNITURE

Spettacolo di magia per bambini a cura di Mario Dalle ore 17.00 alle ore 18.00 – Sala “G.Grandi”. In occasione dei 500 anni dalla morte del grande