?? inv.asm
字號:
; D3 INSTRUMENTASI DAN ELEKTRONIKA JURUSAN FISIKA FAKULTAS MIPA UNIVERSITAS DIPONEGORO 2007 |
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Program square wafe osilator dengan memanfaatkan ISR (Interrupt Service Routine) timer0 dan 1.
; Pembangkitan pulsa dengan sistem ISR bertujuan untuk mendapatkan kepresisian output pulsa
; tanpa terpengaruh oleh delay pada routine atau subroutine normal..
; Output pulsa berupa gelombang kotak (flip-flop Port2.0 dan Port2.1)dengan freQuency 50Hz -
; pada operasi X-tall 12Mhz.
; difungsikan untuk membangkitan GGL induksi pada kumparan primer transformator STEP-UP -
; pada rangkaian Square wafe Inverter.
; Display output tegangan inverter pada LCD 16X2 + Status PLN + Status Inverter
; input data tegangan dari ADC 8bit 0804.
; deteksi pln OFF/ON pada port 2.2 sedangkan untuk deteksi sensor suara pada port2.3.
; pada saat PLN padam inverter tidak langsung aktif, menunggu picuan dari sensor suara
; hal ini bertujuan untuk penghematan daya bila dalam ruangan tidak ada orang.
;
; Originally Created by: Herlambang Aribowo
; D3 Instrumentasi dan Elektronika (D3INSEL) UNDIP
; J0D005037
; CP : 081328828042
; Email : inselinside@yahoo.com
; FS : http://www.friendster.com/bowox
;---------------------------------------------------------------------------------------------
Q bit p2.0
Qinv bit p2.1
cntx equ 20h ; interrupt dikali 2 biar 10ms . counter disamakan dengan alamat 20h (untuk timer0)
cnty equ 21h ; interrupt dikali 2 biar 10ms . counter disamakan dengan alamat 21h (untuk timer1)
rs bit p2.6 ; pin rs pada LCD
e bit p2.7 ; pin E pada LCD
;-------------------------------------
Org 00h ; iki routine pengorganisasian memori usage
sjmp mulai ; 00h buat operasi routine normal
Org 0bh ; 0bh adalah memory alocation buat interrupt timer0
Ljmp Qnormal ; iki alamat routin interrupt
Org 1bh ; 1bh adalah alamat alocation buat interrupt timer1
Ljmp Qinverse ; alamat routine interrupt timer1
mulai: clr Q
clr Qinv
mov cntx,#02h ; counter timer0 biar 10ms |
mov cnty,#02h ; counter timer1 biar 10ms |Jadi 10ms+10ms=20ms
InitTimer: mov tmod,#11h ; setting timer mode
mov tl0,#0ffh ; ngisi tl dan th timer 0 dengan ffh
mov th0,#0ffh ;
setb tf0 ; kondisikan overflow
setb et0 ; aktifkan layanan interrupt timer0
mov tl0,#078h ; -5000us (low) | Pengkondisian interrupt setiap 5ms
mov th0,#0ech ; -5000us (high) | 65536 - 5000 = 60536 d or EC78h
setb et1 ; aktifkan layanan interrupt timer1
setb ea ; aktifkan master layanan interrupt
;setb tr0 ; Dinyalain hanya untuk operasi without detections (direct operation)
ljmp looping
;------------------------------------------------------------------------------------------------
; Procedure Flip-flop dengan layanan interupt ET0 dan ET1
;------------------------------------------------------------------------------------------------
Qnormal: mov tl0,#078h ; -5000us (low) | Pengkondisian interrupt setiap 5ms
mov th0,#0ech ; -5000us (high) | 65536 - 5000 = 60536 d or EC78h
djnz Cntx,endint ; uwis 10ms po durung?
clr tf0 ; bersihkan flag timer 0 overflow
clr tr0 ; mateni timer internal
clr Q ; pulsa low
cpl Qinv ; pulsa high
mov Cntx,#2 ; tiap overflow dikali2 ben 10ms dab
mov tl0,#078h ; ngiseni nilai awal -5000us (low)
mov th0,#0ech ; ngiseni nilai awal -5000us (high)
setb tr1 ; nyumet timer1
endint: reti ; return from ISR to address caller
Qinverse: mov tl1,#078h ; -5000us (low) | Pengkondisian interrupt setiap 5ms
mov th1,#0ech ; -5000us (high) | 65536 - 5000 = 60536 d or EC78h
djnz Cnty,endint2 ; uwis 10ms po durung?
clr tf1 ; bersihkan flag timer 0 overflow
clr tr1 ; mateni timer internal
cpl Q ; pulsa high
cpl Qinv ; pulsa low
mov Cnty,#2 ; tiap overflow dikali2 ben 10ms dab
mov tl1,#078h ; ngiseni nilai awal -5000us (low)
mov th1,#0ech ; ngiseni nilai awal -5000us (high)
setb tr0 ; nyumet timer1
endint2: reti ; return from ISR to address caller
;------------------------------------------------------------------------------------------------
; SCHEMATICS TIMING CHART GELOMBANG OUTPUT..
;------------------------------------------------------------------------------------------------
; 20ms (50hz) 20ms (50hz)
; |-------------------------|-------------------------|
; ____________ ____________ ____________
; | | | | | |
; Q | 10ms | 10ms | 10ms | 10ms | 10ms |
;|___________| |____________| |____________| |____
;
;
; ___________ ____________ ____________ ____
;| | | | | | |
;| Qinv | 10ms | 10ms | 10ms | 10ms | 10ms |
;| |____________| |____________| |____________|
;
;Diatas adalah bentuk output gelombang untuk pemicuan inverter...
;output pulsa di dapat dari routine fip-flop dengan sistem ISR (Interrupt Service Routine)
;65536 adalah nilai maksimal counter dalam menampung hasil cacahan sedangkan nilai 5000 adalah nilai
;waktu berapa lama kita ingin mengkondisikan interrupt disini ialah 5000 / 5000us / 5ms / 0.05s
;microcontroller mencacah atau mengeksekusi satu perintah dengan kecepatan (X-tall/12) maka dari itu
;untuk mendapatkan hasil yang presisi yaitu sebesar 1 mikrodetik, diperoleh dari perhitungan
; (1us= Xtall/12 jadi X-tall= 12Mhz)
;sedangkan untuk mendapatkan timing sesuai dengan kebutuhan, bisa dilakukan dengan sistem looping
;misal : untuk timing 10ms, dengan interrupt setiap 5ms bisa di dapat dengan cara mengkondisikan
;looping interrupt selama 2 kali.
;
; Herlambang.inc
; D3_INSEL UNDIP 2005
;------------------------------------------------------------------------------------------------
; Routine buat inisialisasi LCD hehehehe :)
;------------------------------------------------------------------------------------------------
initLCD: clr rs
mov a,#01h
acall intruksi
mov a,#38h
acall intruksi
acall delay
acall intruksi
acall delay
acall intruksi
acall delay
mov a,#12
acall intruksi
acall delay
mov a,#06h
acall intruksi
acall delay
ret
intruksi: mov p0,a
nop
clr rs
nop
setb e
acall delay
clr e
ret
nulis: mov p0,a
setb e
acall delay
clr e
ret
;------------------------------------------------------------------------------------------------
; Routine buat masukin sumber data awal tuk tampilan LCD
;------------------------------------------------------------------------------------------------
judul: mov 40h,#'P'
mov 41h,#'L'
mov 42h,#'N'
mov 43h,#':'
mov 44h,#'O'
mov 45h,#'F'
mov 46h,#'F'
mov 47h,#' '
mov 48h,#'I'
mov 49h,#'N'
mov 4ah,#'V'
mov 4bh,#':'
mov 4ch,#'O'
mov 4dh,#'N'
mov 4eh,#' '
mov 4fh,#' '
mov 50h,#'V'
mov 51h,#'o'
mov 52h,#'u'
mov 53h,#'t'
mov 54h,#'p'
mov 55h,#'u'
mov 56h,#'t'
mov 57h,#' '
mov 58h,#':'
mov 59h,#' '
mov 5ah,#'0'
mov 5bh,#'0'
mov 5ch,#'0'
mov 5dh,#'0'
mov 5eh,#' '
mov 5fh,#'V'
ret
;------------------------------------------------------------------------------------------------
; Routine buat proses masukan sumber data dari luar
;------------------------------------------------------------------------------------------------
looping: acall initLCD
acall judul
acall tulram
acall ADC
muter: acall datascan
mov 4ch,#'O' ;Inverter OFF
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -