id equ 2fh ;noi chua dia chi cua chip
recbuff equ 30h; dia chi dau vung cat du lieu nhan
trabuff equ 35h ; dia chi dau vung cat du lieu truyen
receiveprobuff equ 3ah ; dia chi vung luu tam de xu ly nhan
header equ 45h
addr equ 46h
command equ 47h
da_ta equ 48h
lampstore equ 49h ; noi chua trang thai den
temstore equ 50h ;noi chua mau nhiet do
cpstore equ 51h ;noi chua trang thai cong tac to
top_sp equ 6fh; dia chi dinh ngan xep
;==========================================
;Buff nhan co dia chi nhu sau:
;header = 30h
;recive_addr = 31h
;command = 32h
;data = 33h
;fsc = 34h
;==========================================
;Buff truyen co dia chi nhu sau:
; header = 35h
;trans_addr = 36h
;command = 37h
;data = 38h
;fsc = 39h
;==========================================
;Buff tam de xu ly co dia chi nhu sau:
;header = 3ah
;pro_addr = 3bh
;command = 3ch
;data = 3dh
;fsc = 3eh
;==========================================
;Dinh nghia cac co trang thai:
fla_fsc bit 20h.0 ; cho biet frame nhan tot(=1) hay khong(=0)
fla_ack bit 20h.1 ; cho biet phai tra loi ack(=1) hay khong(=0)
fla_timeout bit 20h.2 ;cho biet het thoi gian doi(=1)
fla_trans bit 20h.3 ; cho biet can phat du lieu(=1)
fla_tem bit 20h.4 ;cho biet can truyen data(=1)
fla_lamp bit 20h.5 ;cho biet can truyen trang thai den (=1)
fla_cp bit 20h.6 ;cho biet can truyen trang thai cong tac to (=1)
;==========================================
org 0
jmp main
org 23h
jmp ng_nt
org 30h
main:
mov sp,#top_sp ; nap dinh ngan xep
mov scon,#50h ; che do uart 8 bit
mov tmod , # 21h ; bo dinh thoi 1,he do 2 va bo dinh thoi 0 che do 1
mov th1,#- 3;toc do baud 9600
mov tl1,#-3
setb tr1
mov id,p2 ;nap dia chi duoc set boi p2
clr fla_trans
clr fla_fsc
mov r7,#0 ; dinh so byte nhan ban dau
mov ie,#90h ; cho phep ngat port noi tiep
;=======================================================
;jb fla_fsc,xulydata ; fla_fsc = 1 cho biet data nhan duoc dung
; va tien hanh xuly data
stop: jb fla_trans,transmit ; fl_trans = 1 thi tien hanh chuan bi frame truyen
jmp stop ; va truyen dulieu
;===============================================================
ng_nt:
jnb ri,kt_ke; 2ck/du lieu duoc nhan do ngat
call receive ;2ck
kt_ke: jnb ti,int_exit
call start
int_exit: reti
;===============================================================
receive:
mov a,sbuf ;2ck
cjne r7,#0,recont ;2ck ,kiem tra xem phai byte thu 1 khong
cjne a,#0f0h,exit ; 2ck ,kiem tra byte dau co dung khong
;neu la byte nhieu thi loai bo
mov b,#recbuff ;2ck, B chua dia chi cat so lieu
mov r0,b ;1ck
mov @r0,a;1ck
push acc ;2ck,cat gia tri cua a
mov a,r0;1ck
add a,#10;1ck
mov r0,a;1ck
pop acc;2ck
mov @r0,a ;1ck,luu byte dau vao vung xu ly
mov r7,#1;1ck,cho biet so byte nhan duoc
clr ri;1ck
ret;2ck
recont:
inc b ;1ck,chu y b va r7 khong bi thay doi boi tac vu khac
inc r7;1ck
mov r0,b;1ck
mov @r0,a;1ck
push acc;2ck
mov a,r0;1ck
add a,#10;1ck
mov r0,a;1ck
pop acc;2ck
mov @r0,a ;1ck
cjne r7,#5,exit;2ck
call fsc ;2ck goi chuong trinh tinh fsc
jb fla_fsc,xulydata;2ck
exit:
clr ri;1ck
ret;2ck
;==================================================
;Chuan bi frame truyen
;==================================================
transmit:
jnb fla_ack,next1
call trans_ack
next1: jnb fla_lamp,next2
call trans_lampstate
next2: jnb fla_tem ,next3
call trans_tem
next3: jnb fla_cp,next4
call trans_cp
next4: clr fla_trans ;sau khi truyen het cac yeu cau thi xoa co truyen
jmp stop
;=======================================================
xulydata:
clr fla_fsc ;1ck,xoa fla_fsc truoc khi xu ly dulieu de khoi gay lap lai trong
; cac vong chuong trinh con vi day chi la dk de xuly data
mov r0,#recbuff ;1ck,nap dia chi dau vung du lieu nhan
inc r0 ;1ck,tro den vitri byte dia chi
mov a,@r0;1ck , nap byte dia chi vao a
swap a ;doi vi tri hai dia chi nguon va dich
cjne a,id,exit ;2ck, kiem tra dia chi xem data nhan �uoc phai cua kit khong
inc r0;1ck,tro den de lay command
mov a,@r0;1ck
cjne a,#0ah,kt_dk ;2ck,kiem tra xem phai ack khong
;neu ack thi xoa co phat va timeout
setb TF0 ;dung timer
clr fla_timeout ;1ck,xoa co timeout
clr fla_trans ;1ck,xoa co phat
mov r6,#1 ;1ck,xoa bien so lan phat
jmp exit;2ck
kt_dk:cjne a,#0bh,exit ; kiem tra xem phai byte dieu khien khong
setb fla_ack ; tao dk de tra loi ack vi data nhan dung
setb fla_trans ;tao dk de truyen
mov a,#recbuff
add a,#3;
mov r0,a
mov a,@r0 ; lay byte data cua dieu khien
;=======================================
;Mo ta cac bit dieu khien
;acc.0 turnon(=1)/turnoff(=0) thiet bi cho phep
;acc.1 cho phep / khong cho phep dieu khien cp
;acc.2 cho phep /khong cho phep dieu khien den
;acc.5 = 1 yeu cau goi trang thai cong tac to
;acc.6 = 1 yeu cau goi nhiet do
;acc.7 = 1 yeu cau goi trang thai den
;=======================================
jb acc.1,cpcontrol
jb acc.2,lampcontrol
jb acc.5,state_cp
jb acc.6,temsampl
jb acc.7, state_lamp
cpcontrol: jb acc.0 ,cpturnon
setb p3.3 ; p3.3 noi voi dk cp
jmp exit
cpturnon: clr p3.3 ; dk bat cp
jmp exit
lampcontrol: jb acc.0,lampturnon
setb p3.2
;mov p0,#0fh ; tn
jmp exit
lampturnon: clr p3.2 ;p3.2 noi voi dk den
jmp exit
temsampl: push acc
mov a,p1
mov temstore,a
pop acc
;pop r0
;pop acc
setb fla_tem
;setb fla_trans ;tao dk de truyen nhiet
jmp exit
state_cp: jb p3.3,statecpoff ;
push acc
mov a,#1
mov cpstore,a;luu trang thai cong tac to
;vao noi chua trang thai cong tac to
pop acc
setb fla_cp
jmp exit
statecpoff:
push acc
mov a,#0
mov cpsto