*C¸c chØ dÉn cña hîp ng÷:
• Ch(cid:31) d(cid:31)n include
(cid:31)©y là ch(cid:31) d(cid:31)n cho ch(cid:31)(cid:31)ng tr×nh d(cid:31)ch bi(cid:31)t n(cid:31)i l(cid:31)u gi(cid:31) th(cid:31) vi(cid:31)n c¸c
thanh ghi .
CÊu tróc:
#include
Khi viÕt ch(cid:31)(cid:31)ng tr×nh cho MCS51
#include
• Ch(cid:31) d(cid:31)n ORG : Ch(cid:31) d(cid:31)n này gióp cho ch(cid:31)(cid:31)ng tr×nh d(cid:31)ch bi(cid:31)t (cid:31)(cid:31)(cid:31)c m·
l(cid:31)nh theo sau ch(cid:31) d(cid:31)n này.
(cid:31)(cid:31)(cid:31)c ghi vào t(cid:31) (cid:31)(cid:31)a ch(cid:31) nào trong ROM.
• Ch(cid:31) d(cid:31)n END: Ch(cid:31) d(cid:31)n này th«ng b¸o cho ch(cid:31)(cid:31)ng tr×nh d(cid:31)ch bi(cid:31)t
ch(cid:31)(cid:31)ng tr×nh ®· k(cid:31)t thóc.
• ChØ dÉn EQU: §−îc dïng ®Ó ®Þnh nghÜa mét h»ng sè. ChØ dÉn EQU
kh«ng sö dông « nhí ®Ó cÊt d÷ liÖu, mµ thùc hiÖn g¸n mét h»ng sè cho nh·n
sao cho khi nh·n xuÊt hiÖn trong ch−¬ng tr×nh th× gi¸ trÞ h»ng sè sÏ ®−îc thay
thÕ cho nh·n.
• ChØ dÉn DB: DB lµ chØ dÉn d÷ liÖu 8 bit vµ ®−îc sö dông hÕt søc réng
r·i khi lËp tr×nh hîp ng÷, 8 bit d÷ liÖu ®−îc ®Þnh nghÜa cã thÓ ë d¹ng thËp
ph©n, nhÞ ph©n , Hexa hay Ascii. §èi víi d÷ liÖu thËp ph©n th× cã “D” sau sè
thËp ph©n, sè nhÞ ph©n th× cã ch÷ “B” vµ d÷ liÖu d¹ng Hexa th× cã ch÷ “H” vµ
dï d÷ liÖu ë d¹ng nµo th× hîp ng÷ lu«n chuyÓn vÒ d¹ng hexa.
§Ó lËp tr×nh cho 8051 cã rÊt nhiÒu phÇn mÒm nh−ng c¸c lËp tr×nh
khuyªn lµ khi lËp tr×nh cho 8051 nªn sö dông phÇn mÒm Reads51. Sau khi
ch¹y file reads51.exe ta cã giao diÖn cña reads51 sau ®ã vµo Project chän
New project vµ ®Æt tªn sau ®ã nhÊn ok. TiÕp theo nhÊn chuét ph¶i vµo tªn vµ
chän Create New Module ®Æt tªn vµ lùa chän ng«n ng÷ lËp tr×nh. Sau khi lËp
tr×nh xong nhÊn F2 ®Ó dÞch ra file Hex
Giao diÖn cña Read51 nh− sau:
H×nh 5.6 - Giao diÖn cña Reads51.
Sau khi lËp tr×nh vµ dÞch ch−¬ng tr×nh xong ta tiÕn hµnh n¹p ch−¬ng
tr×nh vµo chÝp. §Ó n¹p ch−¬ng tr×nh cho bÊt kú mét chÝp vi ®iÒu khiÓn nµo th×
®Òu cÇn cã mét ch−¬ng tr×nh ®Ó n¹p. §èi víi hä 8051 phÇn mÒm ®−îc sö dông
phæ biÕn ®ã lµ EZDL víi c¸c phiªn b¶n EZDL.4, EZDL.4.1, EZDL.4.2.
Sau khi ch¹y file EZDL.4.1.exe nhÊn vµo send, chän file cÇn n¹p cã
®u«i .hex vµ ok, thÕ lµ ch−¬ng tr×nh sÏ ®−îc n¹p vµo chÝp
Giao diÖn cña phÇn mÒm n¹p chÝp cña 8051 nh− sau:
H×nh 5.7 - Giao diÖn cu¶ phÇn mÒm EZDL.4.1.
Sau ®©y lµ ch−¬ng tr×nh ®o vµ ®iÒu khiÓn nhiÖt ®é khÝ sÊy:
5.2.3. Ch−¬ng tr×nh ®o vµ ®iÒu khiÓn nhiÖt ®é khÝ sÊy n«ng s¶n d¹ng h¹t.
; ------------- READS51 generated header --------------
; created : 15:56:56, Friday, November 25, 2005
; -----------------------------------------------------
; CHUONG TRINH DIEU KHIEN NHIET DO KHI SAY NONG SAN DANG HAT
; SVTH : NGUYEN THI THU HIEN - LOP TDH46
; GVHD : Ths.NGUYEN THI HOAI SON
#include
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP Interrupt0
ORG 0013H
LJMP Interrupt1 ; Nhay den ngat ngoai INT1
; Chuong trinh chinh
MAIN:
MOV R7,#50
MOV P0,#0ffh ; Chon P0 lam cong vao
MOV IE,#10000110B ; Cho phep ngat ngoai 0,1
MOV IP,#00000001B ; Uu tien ngat mgoai0
MOV R5,#0 ; De dem so ngat 0 xay ra
MOV R4,#00h ; Thanh ghi thap cua T0
MOV R3,#DCh ; Thanh ghi cao cua T0
ACALL Display
Back:
MOV A,#CBh
ACALL Command
CLR P1.4 ; Cho CS = 0 de kich hoat chip
CLR P1.3
nop
nop
nop
SETB P1.3 ; Gui xung thap len cao toi WR de bat dau chuyen doi
Here1:
JB P3.7,Here1 ;Cho ket thuc chuyen doi khi INT=0
CLR P1.2 ; Ket thuc chuyen doi cho phep doc du lieu RD=0
MOV R6,P0 ; Luu tru gia tri doc duoc tu ADC
MOV A,P0 ; Doc du lieu vao A
ACALL Ascii ; Chuyen doi tu so Hexa ra ma Ascii
ACALL Delay
SETB P1.2
SJMP Back
; Chuong trinh con hien thi len LCD nhiet do dat va nhiet do lo say
Display:
Acall LCD_init
ACALL Ndodat
ACALL Ndolo
RET
; Chuong trinh con tao tre
Delay:
MOV R0,#FFH
Delay1:
MOV R1,#FFH
Delay2:
NOP
NOP
DJNZ R1,Delay2
DJNZ R0,Delay1
RET
; Chuong trinh con khoi tao LCD
LCD_init:
MOV A,#38H ; LCD 2 dong ma tran 5x7
ACALL Command ; Goi chuong trinh con lenh
MOV A,#0CH ; Bat hien thi, tat con tro
ACALL Command
MOV A,#01H ; Xoa man hinh
ACALL Command
MOV A,#06H ;Dich hien thi sang phai
ACALL Command
MOV A,#80H ; Dua con tro tro ve dau dong thu nhat
ACALL Command
RET
; Chuong trinh con hien thi nhiet do dat
Ndodat:
MOV R1,#11
MOV DPTR,#STR1
Read1:
CLR A ; Xoa A
MOVC A,@A+DPTR ; Xuat mot ki tu
ACALL Datastr
INC DPTR
DJNZ R1,Read1
MOV A,R7
ACALL Ascii
RET
; Chuong trinh con hien thi nhiet do lo say
Ndolo:
MOV A,#C0H ; Dua con tro ve dau dong thu 2
ACALL Command ; Xuat lenh
MOV R1,#11
MOV DPTR,#STR2
Read2:
CLR A ; Xoa A
MOVC A,@A+DPTR ; Xuat mot ki tu
ACALL Datastr
INC DPTR ; Tang Dptr
DJNZ R1,Read2
RET
; Chuong trinh de LCD thuc hien lenh
Command:
ACALL Ready
MOV P2,A ; Dua du lieu thanh ghi A ra cong P2
CLR P3.5 ; RS = 0, Cho phep thu hien lenh
CLR P3.6 ; RW = 0, Cho phep ghi lenh
SETB P3.4; E = 1
CLR P3.4 ; E = 0
RET
; Chuong trinh de LCD viet du lieu
Datastr:
ACALL Ready
MOV P2,A ; Dua du lieu thanh ghi A ra cong P2
SETB P3.5; RS =1, Cho phep lam viec voi du lieu
CLR P3.6 ; RW = 0, Cho phep ghi du lieu
SETB P3.4; E = 1
CLR P3.4 ; E = 0
RET
; Chuong trinh kiem tra LCD da thuc hien xong lenh chua
Ready:
SETB P2.7; LCD dang ban
CLR P3.5 ; RS=0
SETB P3.6; RW=1
Back1:
CLR P3.4 ; E=0
SETB P3.4 ; E=1
JB P2.7,Back1 ;P2.7#0 quay ve BACK1
RET
; Chuong trinh chuyen doi tu so nhi phan ra ma Ascii
Ascii:
; Chuyen doi tu so nhi phan ra BCD va luu vao o nho co dia chi
;30H,31H,32H
MOV B,#10
DIV AB
MOV R2,A
MOV 32H,B
MOV A,R2
MOV B,#10
DIV AB
MOV 31H,B
MOV 30H,A
; Chuyen tu BCD ra Acsii va cho hien thi len LCD
MOV A,30H
ORL A,#30H
ACALL Datastr
MOV A,31H
ORL A,#30H
ACALL Datastr
MOV A,32H
ORL A,#30H
ACALL Datastr
RET
; Chuong trinh vi dieu khien lam viec khi co ngat ngoai INT0
ORG 100H
Interrupt0:
; dieu khien thyristor
; R6 luu tru gia tri tu ADC
; R7 luu tru gia tri nhiet do dat
SETb P1.5
MOV TMOD,#01 ; Chon Timer0 che do 1 (16bit)
ACALL NapT0
ACALL DelayT0
CLR P1.5; Kich thyristor
CLR C; Xoa co nho De chi tru R7 cho R6 (khong phai tru cho co nho)
MOV A,R7; Dua noi dung R7 vao A
SUBB A,R6; Tru noi dung thanh ghi A cho noi dung thanh ghi R6 va co nho
JNZ next1; Neu R6=R7 thi giu nguyen goc mo truoc do
SJMP Wait
Next1: JNC next2 ; Co nho khong duoc dat (R6 > R7)
; R6 Next2:; Tang goc mo triac NapT0: MOV TL1,R4 MOV TH1,R3 Wait: RETI DelayT0: SETB TR0 ; Khoi dong Timer0 AGAIN : JNB TF0,AGAIN; Kiem tra co bo dinh thoi CLR TR0 ; Dung Timer0 CLR TF0 ; Xoa co bo dinh thoi 0 RET ; Chuong trinh VDK lam viec khi co ngat ngoai INT1 ORG 200H Interrupt1: Start: MOV A,P1 ACALL Delay ; Goi chuong trinh tao tre ANL A,#11000000B CJNE A,#00000000B,Case1 ; Neu la phim tang thi thuc hien tang nhiet ;do dat CJNE R7,#100,Tang SJMP Jump1 Tang: INC R7 ; Tang gia tri trong thanh ghi R7 Jump1: ACALL LCD_init ACALL Ndodat case1: CJNE A,#01000000B,Case2 ;Neu la phim giam thi thuc hien giam nhiet ;do dat CLR C MOV A,R7 SUBB A,R6 CJNE A,#0,Giam SJMP Jump2 Giam: DEC R7 ; Giam gia tri trong thanh ghi R7 Jump2: ACALL LCD_init ACALL Ndodat ; Goi chuong trinh hien thi nhiet do dat Case2:CJNE A,#10000000B,Start ; Neu la phim lua chon thi hien thi nhu ban ;dau khoi dong ACALL Ndolo RETI STR1: DB "N DO DAT :" STR2: DB "N DO BUONG:" ENDCó thể bạn quan tâm
Tài liêu mới