P O L I T E C H N I K A L U B E L S K A
w Lublinie
SPRAWOZDANIE
LABORATORIUM Z TECHNIK MIKROPROCESOROWYCH |
Ćwiczenie nr 2 |
TEMAT: TESTER TRANZYSTORÓW (MODEL M-02) |
Data: 2008-03-03 |
RACHWAŁ MAREK ID6.3
|
|
ZADANIE
Program klasyfikujący tranzystory w/g współczynnika wzmocnienia prądowego dla przyjętej wartości prądu bazy.
;TITLE 'DSM51-M02 TRANZYSTOR'
;***************************************
;Program mierzy rodzinę charakterystyk tranzystora
;dla 8 prądów bazy.
;Dla każdego punktu pomiarowego wykonywane są pomiary dwóch napięć:
;napięcia z przetwornika C/A i napięcia na badanym elemencie.
;Wyniki pomiarów przesyłane są przez złącze RS232 do komputera IBM PC.
;Program na IBMie przelicza wyniki i wykreśla na ekranie charakterystyki
;tranzystora.
;**************************************
;Ustawienie układu 8255
;PORT A - WYJ—CIE MOD 0 - regulacja prądu bazy tranzystora
;4 bitowy przetwornik D/A
;A0 -> Low bit
;A1 ->
;A2 ->
;A3 -> High bit
;A4..7 - nieużywane
;PORT B - WEJŚCIE MOD 0 - nieużywane
;PORT C - WEJŚCIE - nieużywane
SET_8255 EQU 10001011B
;**************************************
;Wykorzystanie przetworników A/C i C/A
;C/A -> napięcie pomiarowe 0..5V
; - do przetwornika wpisuję wartość 0..255
;A/C V0 <- pomiar faktycznego napięcia z wyjścia C/A
;A/C V1 <- pomiar napięcia na badanym elemencie
; - prąd na badanym elemencie można wyliczyć z równania:
; (V0 - V1)/200
;**************************************
LJMP START
;**************************************
ORG 13H
;obsługa przerwania z wejścia INT1
PUSH PSW ;przechowanie rejestru stanu
PUSH ACC ;i akumulatora na stosie
MOVX A,@R1 ;odczyt ze sterownika przerwań
ANL A,#03H ;numeru przerwania
MOVX @R1,A ;skasowanie przerwania
JZ INT_AD ;przerwanie z przetwornika A/C
POP ACC ;inne przerwanie - faktycznie nie wystąpi
POP PSW
RETI
;**************************************
ORG 23H
;przerwanie z portu szeregowego
JBC TI,NAD
CLR RI ;odbiór bajtu - faktycznie
RETI ;nic nie jest odbierane
;**************************************
;nadawanie zmierzonych danych
NAD: ;nadanie bajtu
MOV A,DPH ;czy nadane 256*16 bajtów
CJNE A,#20H,NADNEXT
MOV SBUF,R2 ;tak - nadaj sumę i zakończ nadawanie
CLR ES ;zablokuj przerwania od RSa - nadany
;jest ostatni bajt, dodatkowo ES użyty
;jako wskaźnik końca nadawania
RETI
NADNEXT: ;nadaj kolejny bajt
MOVX A,@DPTR
MOV SBUF,A
XRL A,R2 ;obliczaj sumę bajtów - XOR
MOV R2,A
INC DPTR ;zwiększ wskaźnik danych
RETI
;**************************************
;przerwanie z przetwornika A/C - koniec pomiaru
INT_AD:
MOV A,#10 ;odczekanie czasu do zakończenia
DJNZ ACC,$ ;wewnętrznego sygnału w przetw. A/C
;wywołującego przerwanie
MOVX A,@R0 ;odczyt wyniku z przetw. A/C
MOVX @DPTR,A ;zapamiętaj wynik pomiaru
INC DPTR ;zwiększ adres
CLR A ;skasowanie przerwania ze sterownika przerwać
MOVX @R1,A ;trzeba to zrobić po odczycie z A/C
POP PSW ;zdjęcie danej ze stosu
;ACC=0 jako znacznik końca pomiaru
POP PSW ;odtworzenie rejestru stanu
RETI
;**************************************
ORG 100H
START:
MOV R0,#CS55D ;inicjalizacja 8255
MOV A,#SET_8255
MOVX @R0,A
;**************************************
;ustawienie portu szeregowego
;mod 1 portu szeregowego:
;transmisja asynchroniczna
;1 bit startu, 8 bitów danych, 1 bit stopu
;prędkość transmisji ustawiana przez timer T1
MOV SCON,#01010000B
;Timer T1 pracuje w modzie 2:
;8 bitów auto-reload
MOV TMOD,#00100000B
;przy F=11.059 MHz v=19200 bod˘w
;dla TL1=256-3, SMOD=1
ORL PCON,#80H ;SMOD=1
MOV TL1,#256-3 ;Timer 1 liczy do trzech
MOV TH1,#256-3 ;Wartość automatycznie przeładowywana
SETB TR1 ;start Timera 1
;**************************************
;zerowanie sterownika przerwań
MOV R1,#CSAD ;skasowanie ewentualnego przerwania
MOVX A,@R1 ;wystawianego przez przetwornik A/C
MOV R1,#CSIC ;skasowanie przerwania 0 (A/C)
CLR A ;w sterowniku przerwań
MOVX @R1,A
;pozostałe przerwania zawieszone w sterowniku przerwań
;będą automatycznie skasowane w momencie zezwolenia na przerwania
;-przerwanie będzie wygenerowane i obsłużone - a więc skasowane
;**************************************
SETB EA ;zezwolenie na przerwania
;**************************************
;pomiar rodziny charakterystyk tranzystora
LOOP:
LCALL LCD_CLR
LCALL WAIT_ENTER ;oczekiwanie na rozkaz początku pomiarów
LCALL LCD_CLR
MOV DPTR,#TEXT1 ;wypisanie tekstu o rozpoczęciu pomiarów
LCALL WRITE_TEXT
SETB EX1 ;włączenie przerwań z wejścia INT1
;- tj. sterownika przerwań
MOV DPTR,#1000H ;adres - miejsce w RAMie na wyniki pomiarów
MOV R5,#8 ;8 charakterystyk tranzystora
;dla różnych prądów Bazy
;**************************************
;pomiar 1 charakterystyki
POM1:
MOV R0,#CS55A ;ustalenie prądu Bazy
MOV A,#8 ;R5=8 -> 0 ... R5=1 -> 7
CLR C
SUBB A,R5
MOVX @R0,A
ADD A,#31H ;wypisanie numeru mierzonej charakterystyki
LCALL WRITE_DATA
MOV R7,#0 ;nr pomiaru - napięcie z przetwornika C/A
MOV R6,#0 ;licznik pomiarów
POM:
ACALL POMIAR ;wykonanie pomiarów dwóch napięć
;- napięcie z przetwornika C/A
;i napięcie na badanym elemencie
INC R7 ;kolejny numer pomiaru
DJNZ R6,POM ;wykonanie kolejnego pomiaru (do 256)
;jednej charakterystyki tranzystora
DJNZ R5,POM1 ;wykonanie pomiaru kolejnej charakterystyki
CLR EX1 ;wyłączenie przerwań z wejścia INT1
;**************************************
LCALL LCD_CLR
MOV DPTR,#TEXT2 ;wypisanie tekstu o rozpoczęciu transmisji
LCALL WRITE_TEXT
MOV SBUF,#55H ;wysłanie znacznika początku transmisji
MOV A,#2 ;odczekanie czasu na 'obudzenie' IBMa
LCALL DELAY_100MS
MOV DPTR,#1000H ;adres początku wyników
SETB ES ;zezwolenie na przerwania od RSa
;ponieważ był wysyłany znacznik więc natychniast będzie wygenerowane
;przerwanie i rozpocznie się transmisja danych
JB ES,$ ;oczekiwanie na koniec transmisji
AJMP LOOP
;**************************************
;wykonanie pomiarów dwóch napięć
;- napięcie z przetwornika C/A i napięcie na badanym elemencie
POMIAR:
MOV R0,#CSDA ;ustawienie napięcia na przetw. C/A
MOV A,R7
MOVX @R0,A
MOV R0,#CSAD | 7 ;adres przetwornika A/C tak zmodyfikowany,
;aby po dodaniu 1 mieć adres multiplexera
MOV R2,#2 ;dwa pomiary
AN1:
MOV A,R2 ;pomiar w kanale 0 i 1
CLR ACC.1
INC R0 ;wpisanie numeru kanału do multiplexera
MOVX @R0,A
DEC R0
MOV A,#5 ;odczekanie czasu ok. 10 uS na ustabilizo-
DJNZ ACC,$ ;wanie napięć na wejściu przetwornika A/C
INC A ;A=1 <>0 - jako znacznik braku przerwania
MOVX @R0,A ;wpisanie dowolnej wartoci do przetwornika
;A/C - start przetwarzania
JNZ $ ;A=0 - ustawiane w przerwaniu od przetw. A/C
;jako zakończenie pomiaru
DJNZ R2,AN1 ;wykonaj drugi pomiar
RET
;**************************************
TEXT1:
DB 'POMIAR ',0
TEXT2:
DB 'TRANSMISJA',0
;**************************************
;END
Modyfikując jedną z pogrubionych linii otrzymujemy następujące wykresy.
Dla wartości 1:
|
Dla wartości 3:
|
Dla wartości 5:
|
Dla wartości 8:
|
Dla wartości 10:
|
Dla wartości 12:
|
Dla wartości 13:
|
Dla wartości 14:
|
Dla wartości 16:
|
|