Xem mẫu
- *C¸c chØ dÉn cña hîp ng÷:
• Ch d n include
©y là ch d n cho ch ng tr×nh d ch bi t n i l u gi th vi n c¸c
thanh ghi .
CÊu tróc:
#include
Khi viÕt ch ng tr×nh cho MCS51
#include
• Ch d n ORG : Ch d n này gióp cho ch ng tr×nh d ch bi t c m·
l nh theo sau ch d n này.
c ghi vào t a ch nào trong ROM.
• Ch d n END: Ch d n này th«ng b¸o cho ch ng tr×nh d ch bi t
ch ng tr×nh ®· k 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
- 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:"
END
nguon tai.lieu . vn