*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:"

END