CHƯƠNG TRÌNH CON RUN ĐIEĂU KHIEƠN XE CHÁY:

Một phần của tài liệu Đồ án tốt nghiệp: Lý thuyết mạch điện (Trang 47)

5.6.1. Lưu đoă:

5.6.2. Giại thích:

Khi chương con Run đieău khieơn xe được gĩi, đaău tieđn nó kieơm tra xem thời gian vaơn RUN

Khởi đoơng Timer 0

Khởi đoơng Timer 1 Khởi đoơng motor kéo

RET Dừng 3s, baơt đèn báo hieơu Cháy 1s, taĩt đèn báo hieơu Num1 = 0 S Đ P1.7 = 0? (Go/stop) S S S S S Đ Đ Đ Đ Đ Num1 = 0? P1.3 = 0? Cạm biên (4) P1.4 = 0? Cạm biên (5) Taíng tôc bánh xe (2) Giạm tôc bánh xe (3) P1.4 = 0? Cạm biên (5) Giạm tôc bánh xe (2) Taíng tôc bánh xe (3) Num1 = 0?

Taĩt motor kéo R6 = 15 R7 = 60 TF1=1? Giạm R6 R6 = 0? Giạm R7 R7 = 0? S Đ S Đ S Đ Giạm Num1

các giá trị 70 và15. Sau đó, khởi đoơng các motor kéo làm cho xe cháy tới. Trong quá trình cháy tới 8051 kieơm tra xem phím Go/Stop có được ân khođng, nêu được ân thì nó gán cho biên Num1 giá trị 0, giá trị này sẽ được chương trình kieơm tra sau đó, khi kieơm tra đúng là Num1 baỉng 0 thì chương trình sẽ taĩt các motor làm cho xe dừng lái roăi kêt thúc chương trình. Trường hợp phím Go/Stop khođng được ân thì 8051 sẽ tiêp túc kieơm tra tráng thái cụa các boơ phaơn cạm biên nôi với các chađn P1.3 và P1.4 cụa nó. Các khạ naíng có theơ xạy ra ứng với moêi tráng thái khác nhau cụa các boơ cạm biên được chư rõ dưới đađy:

- Trường hợp ngõ ra cạ hai boơ cạm biên đeău ở mức 1 thì xe sẽ tiêp túc chuyeơn đoơng với vaơn tôc khođng đoơi.

- Trường hợp ngõ ra cụa 1 trong hai boơ cạm biên ở mức 0 thì bánh xe ở phía beđn boơ cạm biên đó sẽ giạm tôc đoơ quay, đoăng thời tôc đoơ quay cụa bánh xe ở phía beđn kia sẽ taíng leđn nhaỉm làm cho xe tiêp túc di chuyeơn đúng hướng cụa nó. - Trường hợp ngõ ra cạ hai boơ cạm biên đeău ở mức 0 thì xe sẽ dừng lái trong ba

giađy và baơt đèn báo hieơu, sau đó tiêp túc cháy trong 1 giađy mà khođng quan tađm đên tín hieơu cụa các boơ cạm biên. Sau đó, hốt đoơng cụa xe trở lái như mođ tạ ở tređn.

Trong quá trình hốt đoơng 8051 sẽ luođn kieơm tra tráng thái cờ tràn cụa boơ định thời 1, sau 15 laăn tràn tức là ứng với 1 giađy nó sẽ giạm R7 moơt đơn vị, sau 60 laăn giạm giá trị R7 tức là ứng với 1 phút, biên Num1 sẽ giạm giá trị đi 1, quá trình hốt đoơng cụa xe tiêp túc như dieên ra như tređn cho đên khi giá trị lưu trong biên Num1 baỉng 0 thì dừng lái. Chương trình kêt thúc và trở lái chương trình chính.

5.7. CHƯƠNG TRÌNH INDEC NHAƠP VAØO MOƠT SÔ THAƠP PHAĐN:

5.7.1. Lưu đoă:

5.7.2. Giại thích:

Chương trình con Indec được sử dúng đeơ nhaơn vào moơt sô thaơp phađn hai chữ sô từ bàn phím, đoăng thời lưu vào 2 biên Led1 và Led2 mã hieơn thị led 7 đốn cụa hai chữ sô thaơp phađn đó.

Đaău tieđn, chương trình sẽ kieơm tra xem biên Keybuf có phại chứa giá trị 1 khođng, nêu phại nghĩa là phím 1 được ân, nêu khođng phại nghĩa là phím 2 được ân. Trường hợp phím 1 được ân thì chữ sô hàng chúc chứa trong biên Keybuf1 được taíng leđn 1 nêu nó chưa baỉng 9, còn nêu nó đã baỉng 9 thì gán nó baỉng 0, sau đó mã hieơn thị led 7 đốn cụa chữ sô

INDEC S Đ Keybuf = 1? Đ Đ S S

Taíng Keybuf2 theđm 1

Keybuf1 = 0

Taíng Keybuf1 theđm 1

Keybuf1 = 9? Keybuf2 = 9?

Num1 = Keybuf1 x 10 + Keybuf2

RET

Keybuf2 = 0

Lưu mã hieơn thị led 7 đốn cụa sô Keybuf1 vào biên led 1

Lưu mã hieơn thị led 7 đốn cụa sô Keybuf2 vào biên led 2

được ân thì quá trình nhaơn phím và lưu mã hieơn thị led 7 đốn cụa chữ sô hàng đơn vị cũng dieên ra hoàn toàn tương tự như tređn. Sau khi đã hoàn tât các cođng vieơc tređn chương trình kêt thúc và trở veă lái chương trình gĩi nó đeơ thực hieơn các leơnh tiêp theo.

PHÚ LÚC

I. CHƯƠNG TRÌNH NÁP CHO 8051:

;====================================================== ; Khai bao cac bien su dung trong RAM noi cua 8051

;====================================================== ;Bo nho RAM noi. Dia chi byte: 30h-7fh

led1 equ 30h ;bien luu du lieu de hien thi led1 led2 equ 31h ; bien luu du lieu de hien thi led2 duty equ 32h

dutyC equ 33h

keybuf equ 34h ;ma ban phim skeybuf equ 35h

keybuf1 equ 36h keybuf2 equ 37h keybuf3 equ 38h temp data 40h

num1 data 43h ;bien luu thoi gian van hanh keybit bit 00h ;bit trang thai ban phim run bit 01h ;bit trang thai motor PAout equ 6000h ;dia chi cong PA cua 8255 addled1 equ 6001h ;dia chi cua led1

addled2 equ 6002h ;dia chi cua led2

;====================================================== ; Chuong trinh chinh

;====================================================== Org 2000h

START: acall Init

S_loop: mov DPTR,#Table ;hien thi tin hieu san sang mov A,#10

mov Led1,A mov Led2,A

acall Display ;hien thi tin hieu san sang S_read: acall Keyscan ;cho nhan phim

jnb Keybit,S_read

clr Keybit ;xoa bit trang thai ban phim mov R1,Keybuf ;an phim Go/stop?

cjne R1,#3,Indec lcall Run0

sjmp S_loop

;======================================================

; Chuong trinh doc vao 1 so thap phan

;====================================================== Indec:

cjne R1,#2,Inkey2 ;an phim 1 hay 2? mov A,Keybuf1 ;thay doi so hang chuc cjne A,#9,In_tiep0

mov A,#0 sjmp In_tiep1 In_tiep0: inc A

In_tiep1: mov Keybuf1,A

mov DPTR,#Table ;xuat ra led1

movc A,@A+DPTR

mov Led1,A sjmp In_tiep5

sjmp In_tiep3 In_tiep2: inc A

In_tiep3: mov Keybuf2,A

mov DPTR,#Table ;xuat ra led2

movc A,@A+DPTR

mov Led2,A

In_tiep5: acall Display

mov A,Keybuf1 ;Num1=10 x Keybuf1+Keybuf2 mov B,#10 mul AB mov R0,Keybuf2 add A,R0 da A mov Num1,A sjmp S_loop ;====================================================== ; Chuong trinh khoi tao cac trang thai dau va cac bien

;====================================================== Init:

mov DPTR,#6003h ;khoi tao 8255 pa,pb,pc: out mov A,#80h

movx @DPTR,A

mov TMOD,#12h ;timer1 che do 1,timer0 che do 2 mov Num1,#0 mov Keybuf1,#0 mov Keybuf2,#0 mov Keybuf3,#0 ret ;======================================================

;====================================================== Display: mov DPTR,#addled1 mov A,led1 movx @DPTR,A mov DPTR,#addled2 mov A,led2 movx @DPTR,A ret ;====================================================== ; Chuong trinh quet phim

;====================================================== Keyscan: jnb keybit,Kstt ret Kstt: jnb P1.5,Kstt1 jnb P1.6,Kstt2 jnb P1.7,Kstt3 ret Kstt1: mov Keybuf,#1 setb Keybit Kstt2: mov Keybuf,#2 setb Keybit Kstt3: mov Keybuf,#3 setb Keybit Ksnha: jnb P1.5,Ksnha

ret ;scankey end

;====================================================== ; Chuong trinh ma hoa so 8 bit thanh ky tu dang so thap phan ;====================================================== NumDecChar: mov A,Num1 mov B,#10 div AB mov DPTR,#Table movc A,@A+DPTR mov R2,A mov DPTR,#Table mov A,B movc A,@A+DPTR mov R1,A ret ;end NumDecChar ;====================================================== ; Chuong trinh dieu khien xe chay

;====================================================== Run0:

mov A,Num1 cjne A,#0,R_tiep ret

R_tiep: mov duty,#200 mov A,duty cpl A

clr ACC.0 ;tat motor clr ACC.1 mov DPTR,#PAout movx @DPTR,A mov TH0,dutyC setb TR0

R_loop: mov A,Num1 cjne A,#0,R_tiep0 mov A,#0 mov DPTR,#PAout movx @DPTR,A ret R_tiep0: mov R7,#60 R_loop0: mov R6,#15 R_loop1: mov TH1,#0 mov TL1,#0 setb TR1 R_loop2: jb TF1,R_tiep3 jnb TF0,R_loop2 clr TF0 jb run,Turn_off

Turn_on: jb P1.7,R_tiep4 ;kiem tra phim Go/Stop mov Num1,#0

sjmp R_loop

R_tiep4: jnb P1.3,Turn_on1 ;ktra cam bien 1 jnb P1.4,Turn_on2 ;cam bien 2

setb ACC.1 sjmp Ttuc1 Turn_on1: jnb P1.4,R_dung1 clr ACC.0 setb ACC.1 sjmp Ttuc1

R_dung1: clr ACC.0 ;dung tam thoi clr ACC.1

setb ACC.2

mov DPTR,#PAout

movx @DPTR,A

sjmp R_dung2 Turn_on2: setb ACC.0

clr ACC.1

Ttuc1: mov DPTR,#PAout

movx @DPTR,A mov TH0,duty setb run sjmp R_loop2 Turn_off: jnb P1.3,Turn_off1 jnb P1.4,Turn_off2 clr ACC.0 clr ACC.1 sjmp Ttuc2

Turn_off1: setb ACC.0

clr ACC.1 sjmp Ttuc2

Ttuc2: mov DPTR,#PAout movx @DPTR,A mov TH0,dutyC clr run sjmp R_loop2 R_tiep3: clr TF1 djnz R6,R_loop1 djnz R7,R_loop0 mov A,Num1 dec A mov Num1,A acall NumDecChar mov Led1,R2 mov Led2,R1 acall Display ljmp R_loop R_dung2: clr TR1 clr TF1 mov R5,#45 ;dung 3s R_loop4: mov TH1,#0 mov TL1,#0 setb TR1 R_loop5: jnb TF1,R_loop5 clr TF1 djnz R5,R_loop4 setb ACC.0

clr ACC.2 mov DPTR,#PAout movx @DPTR,A clr TR1 clr TF1 mov R5,#15 R_loop6: mov TH1,#0 mov TL1,#0 setb TR1 R_loop7: jnb TF1,R_loop7 clr TF1 djnz R5,R_loop6 ljmp R_loop0 ;====================================================== ; Bang ma ky tu ;====================================================== Table: c0 : db 3fh c1 : db 06h c2 : db 5bh c3 : db 4fh c4 : db 66h c5 : db 6dh c6 : db 7dh c7 : db 07h c8 : db 7fh c9 : db 6fh ct10: db 04h ;'-' END

8051: Option Explicit

Dim data As Byte, d As Byte Const maxtime = 10000 Dim path As String

Dim b() As Byte, truyen As Byte Dim thu As Boolean

Private Sub cmdTim_Click()

CommonDialog1.CancelError = True On Error GoTo DoNothing

CommonDialog1.ShowOpen

Text1.Text = CommonDialog1.FileName Exit Sub

DoNothing: End Sub

Public Sub truyen_file()

Dim number As Integer, n As Integer, i As Integer path = Text1.Text ' ten file can truyen number = FreeFile ' lay ID con trong Open path For Binary As #number

n = LOF(number) - 8192 ' kich thuoc cua mang ReDim Preserve b(n) ' cap phat mang

StatusBar1.SimpleText = "Kich thuoc ma lenh: " & Hex(n) & "H bytes" Get #number, 8193, b

truyen = (n And &HFF)

viet (Hex(truyen) + "H") ' Byte thap cua kich thuoc TxD

RxD

viet (Hex(data) + "H") ' Byte thap cua kich thuoc truyen = n \ (&HFF) ' byte cao cua kich thuoc viet (Hex(truyen) + "H") TxD RxD viet (Hex(data) + "H") viet (Hex(n)) '============ truyen ma lenh =========================== For i% = 0 To n - 1 truyen = b(i) TxD RxD

viet ("Byte: " & (i + 1) & " Truyen: " & Hex(truyen) & "H" & " Nhan: " & Hex(data) & "H")

If truyen <> data Then

MsgBox "Co mot loi xay ra khi truyen ! " & vbCrLf & " Truyen: " & Hex(truyen) & "H" & vbCrLf & " Nhan: " & Hex(data) & "H"

End If Next i%

'====================================================== TxD

RxD

MsgBox "Da truyen file xong ! Tong so bytes: " & n End Sub

End Sub

Public Sub delay(max As Byte) d = 0

Timer1.Enabled = True

Timer1.Interval = Val(Text2.Text) Do

DoEvents

Loop Until d >= max Timer1.Enabled = False End Sub

Private Sub cmdTruyen_Click()

' vo hieu hoa cac nut lenh va cac nut chon OptCom1.Enabled = False optcom2.Enabled = False cmdTruyen.Enabled = False cmdTim.Enabled = False Text1.Enabled = False Text2.Enabled = False

' xac dinh cong COM da duoc nguoi dung chon If OptCom1.Value Then

MSComm.CommPort = 1 Else

MSComm.CommPort = 2 End If

MSComm.PortOpen = False End If

MSComm.Settings = "4800,N,8,1" ' 4800 baud

MSComm.InputLen = 1 ' moi lan doc 1 ki tu MSComm.InBufferSize = 1024 ' Bo dem nhan

MSComm.OutBufferSize = 1 'moi lan chi xuat 1 ki tu

MSComm.SThreshold = 0 'khong cho phep ngat CPU khi dem truyen rong MSComm.RThreshold = 0 'khong cho phep ngat CPU moi khi nhan duoc ki tu

MSComm.CommPort = 1 'If Not (thu) Then

'On Error GoTo tiep

MSComm.PortOpen = False ' Mo cong 'Else

'tiep:

' MsgBox "Co loi khi mo cong COM " & MSComm.CommPort & ". Cong da duoc dung boi ung dung khac !"

' GoTo Thoat ' End If

'===================================================== Call hand_shake ' qua trinh bat tay voi KIT

If data = 0 Then

MSComm.PortOpen = False ' va dong cong COM lai GoTo Thoat

End If

Call truyen_file

MSComm.PortOpen = False ' va dong cong COM lai

'===================================================== Thoat:

OptCom1.Enabled = True optcom2.Enabled = True If MSComm.CommPort = 1 Then OptCom1.Value = True optcom2.Value = False Else OptCom1.Value = False optcom2.Value = True End If cmdTim.Enabled = True Text1.Enabled = True Text2.Enabled = True cmdTruyen.Enabled = True End Sub

Public Sub hand_shake() Dim dem As Integer truyen = 85

dem = 0 Do

dem = dem + 1

StatusBar1.SimpleText = "Đang liên lac vơi KIT ! Cố gắng ..." & Str$(dem) & " lần. Nhận được " & Hex(data) & "H"

TxD ' truyen ki tu 55H xuong KIT RxD1 ' nhan ki tu tra loi tu KIT Loop Until (data = 85) Or (dem >= 10)

MsgBox "Khong lien lac duoc voi KIT ! Ban can kiem tra lai cap noi va RESET lai KIT !"

data = 0 Else 'Exit Sub StatusBar1.SimpleText = "" RxD Do

StatusBar1.SimpleText = StatusBar1.SimpleText & Chr(data) RxD

Loop While data <> Asc("$") End If

End Sub

Public Sub TxD() Do

DoEvents

Loop Until MSComm.OutBufferCount <= 0 MSComm.Output = Chr$(truyen)

'delay (1) End Sub

Public Sub RxD()

Dim dem As Integer Dim i As Integer dem = 0

Do

DoEvents

End Sub

Public Sub RxD1()

Dim dem As Integer Dim i As Integer dem = 0

Do

DoEvents dem = dem + 1

Loop Until (MSComm.InBufferCount >= 1) Or (dem > maxtime) If dem > maxtime Then

data = 0 Else

data = Asc(MSComm.Input) End If

End Sub

Private Sub Form_Load() MSComm.CommPort = 2 If MSComm.PortOpen Then MSComm.PortOpen = False End If

End Sub

Private Sub Form_Unload(Cancel As Integer) ' Turn off COM Port

End If End Sub

Private Sub Text1_Change() Dim n As Long

If (Text1.Text <> "*.BIN") And (Text1.Text <> "") Then cmdTruyen.Enabled = True

StatusBar1.SimpleText = "Nếu đã sẵn sàng thì bấm TRUYỀN" Else

cmdTruyen.Enabled = False

StatusBar1.SimpleText = "Hãy thiết lập các thơng số cần thiết" End If

n = InStrRev(Text1.Text, "\") + 1

Form1.Caption = "PC --> KIT 8051 ...\" & Mid(Text1.Text, n) End Sub

Private Sub Timer1_Timer() d = d + 1

1. Kỹ Thuaơt Vi Xử Lý. Tác giạ: Vaín Thê Minh.

Nhà xuât bạn giáo dúc naím 1997. 2. Hĩ Vi Đieău Khieơn 8051.

Tác giạ: Tông Vaín On - Hoàng Đức Hại. Nhà xuât bạn Lao Đoơng - Xã Hoơi.

3. THE 8051 MICROCONTROLLER

Tác Giạ: Scott MacKenzie 4. Trình Bieđn Dịch ASM51.

Contents

CHƯƠNG 1: TOƠNG QUAN... 1

1.1. GIỚI THIEƠU: ... 1

1.2. GIỚI HÁN ĐEĂ TAØI : ... 1

1.3. MÚC ĐÍCH NGHIEĐN CỨU : ... 1

1.4. KHÁI QUÁT VEĂ ĐEĂ TAØI: ... 2

1.4.1. Bàn phím và boơ phaơn hieơn thị: ... 2

1.4.2. Quá trình vaơn hành cụa xe: ... 2

CHƯƠNG 2: TOƠNG QUAN VEĂ HĨ VI ĐIEĂU KHIEƠN MCS-51. ... 4

2.1. CÂU TÁO VI ĐIEĂU KHIEƠN 8051: ... 4

2.1.1. Giới thieơu hĩ MSC-51: ... 4

2.1.1. Câu trúc beđn trong và sơ đoă chađn cụa 8051: ... 5

2.2. TAƠP LEƠNH CỤA HĨ 8051 :... 12

2.2.1. Các kieơu định địa chư (addressing mode): ... 12

2.2.2. Các lối leơnh cụa 8051: ... 13

2.3. HỐT ĐOƠNG ĐỊNH THỜI CỤA 8051: ... 13

2.3.1. Giới Thieơu: ... 13

2.3.2. Thanh ghi chê đoơ định thời TMOD: ... 14

2.3.3. Thanh ghi đieău khieơn định thời TCON: ... 14

2.3.4. Các chê đoơ định thời và cờ tràn: ... 14

2.3.5. Các nguoăn xung clock định thời: ... 15

2.3.6. Khởi đoơng dừng và đieău khieơn các boơ định thời: ... 15

2.3.7. Khởi đoơng và truy xuât các thanh ghi định thời: ... 15

2.4. HỐT ĐOƠNG CỤA PORT NÔI TIÊP: ... 16

2.4.1. Giới thieơu: ... 16

2.4.2. Thanh ghi đieău khieơn port nôi tiêp:... 16

2.4.3. Các chê đoơ hốt đoơng: ... 16

2.4.4. Khởi đoơng và truy xuât các thanh ghi coơng nôi tiêp: ... 17

2.4.5. Tôc đoơ baud cụa port nôi tiêp: ... 18

2.5. HỐT ĐOƠNG NGAĨT: ... 18

2.5.1. Giới thieơu: ... 18

2.5.2. Toơ chức ngaĩt: ... 19

2.5.3. Xử lý ngaĩt: ... 19

CHƯƠNG 3: KHẠO SÁT CÁC IC NGỐI VI ... 21

3.1. VI MÁCH GIAO TIÊP NGỐI VI 8255A: ... 21

3.1.1. Câu trúc cụa 8255A:... 21

3.1.2. Các mode hốt đoơng: ... 23

3.2. KHẠO SÁT BOƠ NHỚ EPROM 2764: ... 25

3.2.1. Sơ đoă chađn: ... 25

3.3.1. Sơ đoă chađn: ... 27

3.3.2. Bạng tráng thái làm vieơc cụa SRAM 6264: ... 27

3.4. KHẠO SÁT IC GIẠI MÃ 74LS138 : ... 27

3.4.1. 1. Sơ đoă chađn: ... 27

3.4.2. Bạng tráng thái làm vieơc cụa 74138: ... 28

3.5. KHẠO SÁT VI MÁCH GIAO TIÊP MAX232: ... 29

3.5.1. Sơ đoă chađn : ... 29

CHƯƠNG 4: THIÊT KÊ VAØ THI COĐNG. ... 30

4.1. CÂU TRÚC PHAĂN CỨNG KIT VI ĐIEĂU KHIEƠN: ... 30

4.1.1. Sơ đoă khôi : ... 30

4.1.2. Sơ đoă chi tiêt : ... 31

4.1.3. Các khôi trong kit vi đieău khieơn 8051: ... 32

4.2. CÁC MÁCH ĐIEĂU KHIEƠN GIAO TIÊP VỚI KIT VI ĐIEĂU KHIEƠN 8051: ... 36

4.2.1. Mách hieơn thị led 7 đốn: ... 36

4.2.2. Mách đieău khieơn motor kéo: ... 38

4.2.3. Mách bàn phím: ... 39

4.2.4. Mách cạm biên: ... 39

4.2.5. Mách đèn báo hieơu: ... 40

CHƯƠNG 5: LƯU ĐOĂ THUAƠT TOÁN CHƯƠNG TRÌNH. ... 42

5.1. CHƯƠNG TRÌNH CHÍNH: ... 42

5.1.1. Lưu đoă: ... 42

5.1.2. Giại thích: ... 42

5.2. CHƯƠNG TRÌNH INIT THIÊT LAƠP CHÊ ĐOƠ HỐT ĐOƠNG CHO CÁC VI MÁCH VAØ TRÁNG THÁI BAN ĐAĂU CHO CÁC BIÊN: ... 43

5.2.1. 1. Lưu đoă: ... 43

5.2.2. Giại thích: ... 43

5.3. CHƯƠNG TRÌNH KEYSCAN ĐĨC PHÍM: ... 44

5.3.1. 1. Lưu đoă: ... 44

5.3.2. Giại thích: ... 44

5.4. CHƯƠNG TRÌNH DISPLAY HIEƠN THỊ LED 7 ĐỐN:... 45

5.4.1. Lưu đoă: ... 45

5.4.2. Giại thích: ... 45

5.5. CHƯƠNG TRÌNH NUMDECCHAR MÃ HOÁ SÔ 8 BIT THAØNH KÝ TỰ DÁNG SÔ THAƠP PHAĐN: ... 46

5.5.1. Lưu đoă: ... 46

5.5.2. Giại thích: ... 46

5.6. CHƯƠNG TRÌNH CON RUN ĐIEĂU KHIEƠN XE CHÁY: ... 47

5.7.1. Lưu đoă: ... 49 5.7.2. Giại thích: ... 49 Phú Lúc.

Một phần của tài liệu Đồ án tốt nghiệp: Lý thuyết mạch điện (Trang 47)

Tải bản đầy đủ (PDF)

(71 trang)