My name is Bob Smith but people call me Smithy. Here is my home page: www.example.com I live in Albuquerque, NM and work as an engineer at ACME Corp.

Monday, December 20, 2004

:: my poem ::...

;******* TES SERIAL ******************************************************
; Deskripsi:
; sistem pengendali berbasis mikrokontroller MCS-51 dengan kristal 11Mhz
; komunikasi serial 9600bps
; sistem pengendali dengan sistem acknowledgment
; sistem pengaman: CCITT CRC-8
; yg dikendalikan:
; 1. lampu rem (on/off)
; 2. lampu sen (off/left/right/both)
; 3. lampu mundur (on/off)
; 4. lampu malam (on/off)
;
; pemakaian register:
; R0 : data untuk dikirimkan ke SBUF
; R1 : data kondisi lampu rem
; R2 : data kondisi lampu sen
; R3 : data kondisi lampu malam
; R4 : -not defined-
; R5 : -not defined-
; R6 : -not defined-
; R7 : tempat penyimpanan sementara pembacaan data/port
;
; pemakaian port:
; p0.0 - p0.7 : -not defined-
; p1.0 : interface rem
; p1.1 - p1.2 : interface lampu sen
; p1.3 : interface lampu malam
; p2.0 : indikator negative ack
; p2.1 - p2.2 : -not defined-
; p2.3 - p2.4 : pemantau ack lampu rem
; p2.5 : pemantau ack lampu sen
; p2.6 - p2.7 : -not defined-
; p3.0 : penerima data serial
; p3.1 : pengirim data serial
; p3.2 - p3.7 : -not defined-
;**************************************************************************
;
;==inisialisasi
;
ORG 00H
MOV SCON,#52H
MOV TMOD,#20H
MOV TH1,#-3
SETB TR1
MOV A,#00H
MOV P1,#0FFH
MOV P2,A
JMP RDBRK
;
;==baca kondisi interface rem (PORT 1.0)
;
RDBRK: MOV A,#00000001B
MOV R7,P1
ANL A,R7
SETB P2.0
CJNE A,01H,BRK
;
;==baca kondisi interface lampu sen (PORT 1.1 = LEFT, PORT 1.2 = RIGHT)
;
RDSGN: MOV A,#00000110B
MOV R7,P1
ANL A,R7
SETB P2.1
CJNE A,02H,SGN
;
;==baca kondisi interface lampu malam (PORT1.3)
;
RDMLM: MOV A,#00001000B
MOV R7,P1
ANL A,R7
CJNE A,03H,MLM
CPL P2.2
JMP RDBRK
;
;==BACA KONDISI ACKNOWLEDGMENT
;
;RDACK: JNB RI,RDBRK ;jika ada data masuk maka...
; CLR RI ;kosongkan RI
; MOV A,SBUF ;baca dan pindahkan data ke Acc
;=======baca alamat
; MOV 07H,A ;simpan data utk sementara ke R7
; ANL A,#11100000B ;siapkan Acc utk membaca ADDRESS
; CJNE A,#11100000B,RDBRK ;baca data, jika sesuai maka LANJUTKAN
;=======baca negative ack
; MOV 07H,A ;simpan data utk sementara ke R7
; CJNE A,#11111111B,NXTACK ;baca data, jika sesuai maka NegACK...
; SETB P2.0
; JMP RDBRK ;jika NegACK maka nyalakan p2.0
;=======baca isi pesan jika ack
;NXTACK: MOV A,07H ;simpan data utk sementara ke R7
; ANL A,#00011111B ;siapkan Acc utk membaca isi pesan
; CJNE A,#00000100B,ACBRK0 ;baca data, jika sesuai maka lanjutkan
; CLR P2.3 ;kondisi rem 00(tidak nyala)
; CLR P2.4 ;p2.3 dan p2.4 CLEAR
; JMP RDBRK ;kembali ke awal
;
;==AKSI ACKNOWLEDGMENT
;
;ACBRK0: CJNE A,#00000110B,ACBRK1
; SETB P2.3 ;kondisi rem intensitas 01
; CLR P2.4 ;
; JMP RDBRK
;ACBRK1: CJNE A,#00000101B,ACBRK2
; CLR P2.3
; SETB P2.4
; JMP RDBRK
;ACBRK2: CJNE A,#00000111B,ACBRK3
; SETB P2.3
; SETB P2.4
; JMP RDBRK
;ACBRK3: CJNE A,#00001000B,ACSGN0
; CLR P2.5
; JMP RDBRK
;ACSGN0: CJNE A,#00001011B,ACSGN1
; SETB P2.5
;ACSGN1: JMP RDBRK
;
;==aksi rem (R1 = kondisi rem)
;
BRK: MOV R1,A
CJNE R1,#00000000B,NEXT0
MOV R0,#10001000B
JMP TES
NEXT0: CJNE R1,#00000001B,RDSGN
MOV R0,#10001001B
JMP TES
;
;==aksi lampu sen (R2 = kondisi lampu sen)
;
SGN: MOV R2,A
CJNE R2,#00000000B,SGN0
MOV R0,#10010000B
JMP TES
SGN0: CJNE R2,#00000010B,SGN1
MOV R0,#10010001B
JMP TES
SGN1: CJNE R2,#00000100B,SGN2
MOV R0,#10010010B
JMP TES
SGN2: CJNE R2,#00000110B,RDMLM
MOV R0,#10010011B
JMP TES
;
;==aksi lampu malam (R1 = kondisi rem)
;
MLM: MOV R3,A
CJNE R3,#00000000B,MLM0
MOV R0,#10011000B
JMP TES
MLM0: CJNE R3,#00001000B,RDBRK
MOV R0,#10011001B
JMP TES
;
;==AKSI PENGIRIMAN SINYAL KENDALI
;
TES: MOV A,R0
MOV B,#00H
CALL CRC8_ADD_TABLE
TES0: JNB TI,TES0
CLR TI
CPL P2.3
MOV SBUF,A
CLR RI
TES1: JNB TI,TES1
CLR TI
MOV SBUF,B
CLR RI
CPL P2.4
JMP RDBRK

;
;****************************************************************************
;
; Description:
; Calculates Value In Acc Into The Running CRC In 'B', Using The Table
; Method. (Faster But Larger)
;
; Entry Requirements:
; Acc Has Value To Add To CRC
; 'B' Contains Running CRC Value
;
; On Exit:
; 'B' Has Updated CRC Value
;
; Affected:
; PSW.CY, B
;
; Stack:
; 3 Bytes, Not Including Called Routines
;
; Comments:
; None
;
;
CRC8_ADD_TABLE: push dph ; Save DPH
push dpl ; Save DPL
push acc ; Save Acc
;
mov dptr,#CRC8_DATA ; Point To Table
xrl a,b ; XOR In CRC
movc a,@a+dptr ; Get New CRC Byte
mov b,a ; Store Back
;
pop acc ; Recover Acc
pop dpl ; Recover DPL
pop dph ; Recover DPH
ret ; Return To Caller

;
;****************************************************************************
;
; Data For Table Method
;
CRC8_DATA db 000h, 05eh, 0bch, 0e2h, 061h, 03fh, 0ddh, 083h
db 0c2h, 09ch, 07eh, 020h, 0a3h, 0fdh, 01fh, 041h
db 09dh, 0c3h, 021h, 07fh, 0fch, 0a2h, 040h, 01eh
db 05fh, 001h, 0e3h, 0bdh, 03eh, 060h, 082h, 0dch
db 023h, 07dh, 09fh, 0c1h, 042h, 01ch, 0feh, 0a0h
db 0e1h, 0bfh, 05dh, 003h, 080h, 0deh, 03ch, 062h
db 0beh, 0e0h, 002h, 05ch, 0dfh, 081h, 063h, 03dh
db 07ch, 022h, 0c0h, 09eh, 01dh, 043h, 0a1h, 0ffh
db 046h, 018h, 0fah, 0a4h, 027h, 079h, 09bh, 0c5h
db 084h, 0dah, 038h, 066h, 0e5h, 0bbh, 059h, 007h
db 0dbh, 085h, 067h, 039h, 0bah, 0e4h, 006h, 058h
db 019h, 047h, 0a5h, 0fbh, 078h, 026h, 0c4h, 09ah
db 065h, 03bh, 0d9h, 087h, 004h, 05ah, 0b8h, 0e6h
db 0a7h, 0f9h, 01bh, 045h, 0c6h, 098h, 07ah, 024h
db 0f8h, 0a6h, 044h, 01ah, 099h, 0c7h, 025h, 07bh
db 03ah, 064h, 086h, 0d8h, 05bh, 005h, 0e7h, 0b9h
db 08ch, 0d2h, 030h, 06eh, 0edh, 0b3h, 051h, 00fh
db 04eh, 010h, 0f2h, 0ach, 02fh, 071h, 093h, 0cdh
db 011h, 04fh, 0adh, 0f3h, 070h, 02eh, 0cch, 092h
db 0d3h, 08dh, 06fh, 031h, 0b2h, 0ech, 00eh, 050h
db 0afh, 0f1h, 013h, 04dh, 0ceh, 090h, 072h, 02ch
db 06dh, 033h, 0d1h, 08fh, 00ch, 052h, 0b0h, 0eeh
db 032h, 06ch, 08eh, 0d0h, 053h, 00dh, 0efh, 0b1h
db 0f0h, 0aeh, 04ch, 012h, 091h, 0cfh, 02dh, 073h
db 0cah, 094h, 076h, 028h, 0abh, 0f5h, 017h, 049h
db 008h, 056h, 0b4h, 0eah, 069h, 037h, 0d5h, 08bh
db 057h, 009h, 0ebh, 0b5h, 036h, 068h, 08ah, 0d4h
db 095h, 0cbh, 029h, 077h, 0f4h, 0aah, 048h, 016h
db 0e9h, 0b7h, 055h, 00bh, 088h, 0d6h, 034h, 06ah
db 02bh, 075h, 097h, 0c9h, 04ah, 014h, 0f6h, 0a8h
db 074h, 02ah, 0c8h, 096h, 015h, 04bh, 0a9h, 0f7h
db 0b6h, 0e8h, 00ah, 054h, 0d7h, 089h, 06bh, 035h
;
;****************************************************************************
;
akhir: end