⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inv.asm

📁 Library for the 8051 microcontroller. such as math routine, hexBCD, LCD, Keyboard, I2C, Remote, Ke
💻 ASM
📖 第 1 页 / 共 2 页
字号:

; 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 + -