1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Bài tập lớn "Hệ vi xử lý ONCHIP 8" ppt

13 850 23

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 13
Dung lượng 850,29 KB

Nội dung

LỜI MỞ ĐẦUNgày nay, nhờ sự phát triển của công nghệ điện tử, nhất là công nghệ chế tạo vi điện tử, đồng thời cùng với sự phát triển của các thế hệ máy vi tính, các bộ vi điều khiển cũng

Trang 1

LỜI MỞ ĐẦU

Ngày nay, nhờ sự phát triển của công nghệ điện tử, nhất là công nghệ chế tạo vi điện tử, đồng thời cùng với sự phát triển của các thế hệ máy vi tính, các

bộ vi điều khiển cũng được ra đời và phát triển Các bộ vi điều khiển đang có ứng dụng ngày càng rộng rãi và thâm nhập ngày càng nhiều trong lĩnh vực kỹ thuật và đời sống xã hội Hầu hết các thiết bị kỹ thuật từ phức tạp cho đến đơn giản như thiết bị điều khiển tự động, thiết bị văn phòng,và các thiết bị chất lượng cao trong gia đình đều có dùng các bộ vi điều khiển Hệ vi xử lý ONCHIP 89C51 là một hệ vi điều khiển có đầy đủ chức năng của hệ vi xử lý 8bit có nhiều chức năng đặc biệt, được áp dụng điều khiển các thiết bị thông tin, viễn thông như trong các hệ thống điều khiển đèn giao thông, truyền tin nối tiếp, truyền tin song song, đo độ rộng xung Trong đó,đo độ rộng xung dùng 89C51 được sử dụng rất nhiều trong các thiết bị phát hiện xung, đồng hồ đo xung, đồng hồ đo tốc độ, cũng có thể được sử dụng trong thiết bị điều chỉnh độ rộng xung, ứng dụng trong công nghệ Rada, thông tin để thu tin và phát hiện mục tiêu,vv…

Em xin chân thành cảm ơn thầy Nguyễn Hải Dương đã giúp em hoàn thành

đồ án này

1

Trang 2

I. MÔ TẢ CHỨC NĂNG CỦA HỆ THỐNG

Thiết kế hệ thống đo độ rộng xung 6 kênh trên hệ VXL on-chip 89C51 với

focs= 12 MHz trên hệ vi xủa Bài toán đặt ra là thiết kế hệ thống đo độ rộng

xung dùng 89C51 Chức năng của hệ thống gắn liền với yêu cầu thực tế đặt ra là xuất hiện một xung bất kỳ và nhiệm vụ là phải tính toán được độ rộng của xung tai thời điểm bất kỳ Xung xuất hiện là không biết trước dạng và đặc tính của

nó, xung có thể được đưa tới từ một bộ thu tin nào đó hay từ một bộ tạo xung Xung cần đo độ rộng được đưa vào chân tín hiệu INTO(bit P3.2 – chân IC 12), kết quả đo phải chứa trong 2 thanh ghi: R1 chứa byte cao của kết quả, R0 chứa byte thấp của kết quả

Hệ thống hiển thị sử dụng mà hình LCD 16*2 với thông tin hiển thị gồm

số hiệu kênh và độ rộng xung Việc lựa chọn kênh hiển thị qua bàn phím điện thoại

2.1 Sơ đồ khối của hệ thống

Hình 1: Sơ đồ khối của hệ thống

DISPLAY

Trang 3

Chức năng của các khối:

1. Khối nguồn +5V( Source +5V) : Cung cấp nguồn để VĐK hoạt động

2. Bàn phím (Key pad) : để lựa chọn kênh hiển thị

3. VĐK (MCU): Xử lý tín hiệu đưa vào để tính toán độ rộng xung và đưa giá trị tương ứng đến LCD

4. Khối hiển thị (LCD) : Hiện thị kết quả đo được

5. 6 kênh xung cần đo( 6 channel input): Có thể là xung từ bộ thu tin hoặc

bộ tạo xung

6. Bộ chuyển mạch (Switch) lựa chọn kênh xung cần đo

2.2 Sơ đồ nguyên lý của hệ thống ( thiết kế trên phần mềm proteus)

3

Hình 2: Sơ đồ nguyên lý của hệ thống

Trang 4

Các linh kiện được sử dụng

1. Vi điều khiển AT89C51

2. Key pad –phone

Bàn phím này gồm 12 phím chia làm 4 hàng, 3 cột

3. LCD 16*2

Các địa chỉ của vị trí con trỏ của LCD 16*2 như sau

16 × 2 LCD 80

C0

81 C0

82 C2

83 C3

84 C4

85 C5

86 C6

Through Through

8F CF

4. IC cầu W005G và IC 7805 để tạo nguồn 5V

5. IC MUX 74151

IC 74151 có chân lý như sau:

Yêu cầu bài toán là đo độ rộng xung 6 kênh nên ta sử dụng tổ hợp

6 tín hiệu đầu tương ứng như sau:

6. Thạch anh 12MHZ

7. Điện trở, tụ điện, LED

Trang 5

III.1. Phân tích bài toán

Hệ thống đo độ rộng xung có sơ đồ như trên hình 3.Phương pháp đo độ rộng: ta chèn một chuỗi xung chuẩn(xung răng lược) có độ rộng xác định trước trong thời gian tồn tại của xung cần đo

Độ rộng xung cần đo=(chu kỳ xung răng lược)*(số lượng xung răng lược) Sai số của phép đo max = ½ chu kỳ xung răng lược

Vì tần số dao động nội = 12MHz/12 = 1MHz nên chu kỳ xung răng lược =

1 micro giây nên nội dung Timer0 chính là kết quả Sử dụng Timer0 chạy ở mode 1-16bit để tạo xung răng lược Muốn vậy, thanh ghi TMOD = 09H = 00001001(gate0=1, tạo điều kiện cho INTO được kích hoạt Timer0, C/TO = 0 làm việc với dao động nội, M1M0=01 cho Timer0 = mode 1)

Khởi đầu cần xóa cờ TF0 và cấm Timer0 chạy TR0 Do đó TCON =00H=

0000 0000 (TF0 = TR0 =0)

III.2. Lưu đồ thuật toán

5 INT0

Hình 3: Sơ đồ hệ đo độ rộng xung

Trang 6

Hình 4: Lưu đồ thuật toán của hệ thống

Y

Trang 7

IV. XÂY DỰNG PHẦN MỀM

; - -KHAI BA0 VA DINH

NGHIA -E_LCD EQU P1.0 ;chan cho phep cua LCD

RW_LCD EQU P1.1 ;chan dieu khien doc/ghi

RS_LCD EQU P1.2 ;chan chon thanh ghi data/command

CHECK EQU P1.3

PORT_LCD EQU P2 ;cong du lieu cua LCD

READY_PIN EQU P2.7 ;chan kiem tra su san sang cua LCD

LCD_CLR EQU 01H

RDY_LCD EQU 20H

ROW1 EQU P0.0

ROW2 EQU P0.1

COL1 EQU P0.4

COL2 EQU P0.5

COL3 EQU P0.6

STATE1 EQU P1.5

STATE2 EQU P1.6

STATE3 EQU P1.7

INPUT_PULSE EQU P3.2 ;chan tin hieu dau vao

; -CHUONG TRINH

CHINH -ORG 0000H

CLR CHECK

LJMP MAIN ;goi den chuong trinh chinh va bo qua cac ISR ngat RET

ORG 30H

; -MAIN:

ACALL INSTALLATION ;khoi tao he thong

JB CHECK, MAIN_SUB

MAINLOOP:

SETB PSW.4

CLR ROW1

JNB COL1,KEY1

JNB COL2,KEY2

JNB COL3,KEY3

SETB ROW1

CLR ROW2

JNB COL1,KEY4

JNB COL2,KEY5

JNB COL3,KEY6

SETB ROW2

; -

JMP MAINLOOP

7

Trang 8

; -KEY1:

JNB COL1, KEY1

MOV R7,#'1'

SETB ROW1

CLR STATE1

CLR STATE2

CLR STATE3

JMP FREE

KEY2:

JNB COL2, KEY2

MOV R7,#'2'

SETB ROW1

SETB STATE1

CLR STATE2

CLR STATE3

JMP FREE

KEY3:

JNB COL3, KEY3 MOV R7,#'3'

SETB ROW1

CLR STATE1 SETB STATE2 CLR STATE3 JMP FREE KEY4:

JNB COL1, KEY4 MOV R7,#'4' SETB ROW2

SETB STATE1 SETB STATE2 CLR STATE3 JMP FREE

KEY5:

JNB COL2, KEY5 MOV R7,#'5' SETB ROW2

CLR STATE1 CLR STATE2 SETB STATE3 JMP FREE KEY6:

JNB COL3, KEY6 MOV R7,#'6'

SETB ROW2

SETB STATE1 CLR STATE2 SETB STATE3 JMP FREE

; -FREE:

SETB CHECK

CLR PSW.4

; -

MAIN_SUB:

ACALL MEASURE_PULSE_WIDTH

RET ;Ket thuc chuong

trinh chinh

thong

dau vao

RET

; -MODULE DO DO RONG

XUNG -MEASURE_PULSE_WIDTH:

MOV R1,#00

MOV R0,#00

MOV TMOD,#09H

MOV TCON,#00H

SETB TR0

; -PULSE_CHECK:JB INPUT_PULSE,PULSE_CHECK

Trang 9

CLR TF0

MOV TH0,#00

MOV TL0,#00

; -PULSE_LOW:

JNB INPUT_PULSE,PULSE_LOW ;neu xung vao co muc thap

; -neu co Xung vao co muc tich cuc cao thi bat dau do

PULSE_HIGH:

JB INPUT_PULSE,PULSE_HIGH ;van dang co xung

; -neu da het xung thi doc tin hieu Do Rong

JB TF0,PULSE_CHECK

MOV R1,TH0 ;byte cao > R1

RET

; -Chuong trinh con xu ly tin tuc do duoc va Hien thi len LCD

PROCESS_AND_DISPLAY:

; -Dong

1 -MOV A,#80h

ACALL

COMMWRT

MOV A,#"("

ACALL

DATAWRT

MOV A,#"^"

ACALL

DATAWRT

MOV A,#"_"

ACALL

DATAWRT

MOV A,#"^"

ACALL

DATAWRT

MOV A,#")"

ACALL

DATAWRT

MOV A,#" "

ACALL DATAWRT

MOV A,#"C"

ACALL DATAWRT

MOV A,#"H"

ACALL DATAWRT

MOV A,#"A"

ACALL DATAWRT

MOV A,#"N"

ACALL DATAWRT

MOV A,#"N"

ACALL DATAWRT

MOV A,#"E"

ACALL DATAWRT

MOV A,#"L" ACALL DATAWRT

MOV A,#" " ACALL DATAWRT

SETB PSW.4 MOV A,R7 ACALL DATAWRT

CLR PSW.4

9

Trang 10

; -Dong

2 -MOV A,#0C0h

MOV A,#"P"

ACALL DATAWRT

MOV A,#"W"

ACALL DATAWRT

MOV A,#"="

ACALL DATAWRT

MOV R3

,#HIGH(10000)

MOV R2

,#LOW(10000)

LCALL DIV16_16

MOV A ,R2

ADD A ,#30H

ACALL DATAWRT;

R5

MOV R3 ,#HIGH(1000) MOV R2 ,#LOW(1000) LCALL DIV16_16 MOV A ,R2

ADD A ,#30HACALL DATAWRT; R4

MOV R3 ,#HIGH(100) MOV R2 ,#LOW(100) LCALL DIV16_16 MOV A ,R2

ADD A ,#30H ACALL DATAWRT ; R3

MOV R3 ,#HIGH(10) MOV R2 ,#LOW(10) LCALL DIV16_16 MOV A ,R2

ADD A ,#30H ACALL DATAWRT ; R2

MOV A ,R0 SUBB A,# ;bu sai so

ADD A ,#30H ACALL DATAWRT MOV A,#"u"

ACALL DATAWRT MOV A,#"s"

ACALL DATAWRT

MOV R0,#0000H

MOV R1,#0000H

MOV R2,#0000H

MOV R3,#0000H

MOV R4,#0000H

MOV R5,#0000H

JMP MAIN

; -Chuong trinh chia so 16 bit duoc tham khao tu:

; -http://www.8052.com/div16.phtml

div16_16:

CLR C ;Clear carry initially

MOV R4,#00h ;Clear R4 working variable initially

MOV R5,#00h ;CLear R5 working variable initially

MOV B,#00h ;Clear B since B will count the number of left-shifted bits

div1:

INC B ;Increment counter for each left shift

MOV A,R2 ;Move the current divisor low byte into the

accumulator

RLC A ;Shift low-byte left,

MOV R2,A ;Save the updated divisor low-byte

MOV A,R3 ;Move the current divisor high byte into the

accumulator

Trang 11

RLC A ;Shift high-byte left high, rotating in carry from low-byte

MOV R3,A ;Save the updated divisor high-byte

JNC div1 ;Repeat until carry flag is set from high-byte

div2: ;Shift right the divisor

MOV A,R3 ;Move high-byte of divisor into accumulator

RRC A ;Rotate high-byte of divisor right and into carry

MOV R3,A ;Save updated value of high-byte of divisor

MOV A,R2 ;Move low-byte of divisor into accumulator

RRC A ;Rotate low-byte of divisor right, with carry from high-byte

MOV R2,A ;Save updated value of low-byte of divisor

CLR C ;Clear carry, we don't need it anymore

MOV 07h,R1 ;Make a safe copy of the dividend high-byte

MOV 06h,R0 ;Make a safe copy of the dividend low-byte

MOV A,R0 ;Move low-byte of dividend into accumulator

SUBB A,R2 ;Dividend - shifted divisor = result bit (no factor, only

0 or 1)

MOV R0,A ;Save updated dividend

MOV A,R1 ;Move high-byte of dividend into accumulator

SUBB A,R3 ;Subtract high-byte of divisor

MOV R1,A ;Save updated high-byte back in high-byte of divisor JNC div3 ;If carry flag is NOT set, result is 1

MOV R1,07h ;Otherwise result is 0, save copy of divisor to undo subtraction

MOV R0,06h

div3:

CPL C ;Invert carry, so it can be directly copied into result MOV A,R4

RLC A ;Shift carry flag into temporary result

MOV R4,A

MOV A,R5

RLC A

MOV R5,A

DJNZ B,div2 ;Now count backwards and repeat until "B" is zero MOV R3,05h ;Move result to R3/R2

MOV R2,04h ;Move result to R3/R2

RET

; -MODULE

LCD -INSTALL_LCD: ;chuong trinh con khoi tao cho LCD

11

Trang 12

MOV A,#0CH ;gui lenh hien thi man hinh va tat con tro

MOV A,#80H ;dua con tro ve hang 1, cot 1

RET

; -COMMWRT:

CALL READY

MOV PORT_LCD, A

CLR RS_LCD

CLR RW_LCD

SETB E_LCD

NOP

NOP

CLR E_LCD

RET

; -DATAWRT:

CALL READY

MOV PORT_LCD, A

SETB RS_LCD

CLR RW_LCD

SETB E_LCD

NOP

NOP

CLR E_LCD

RET

; -READY:

CLR E_LCD

CLR RS_LCD

SETB RW_LCD

MOV PORT_LCD, #0FFH

SETB E_LCD

JB PORT_LCD.7, READY

CLR E_LCD

CLR RW_LCD

RET

DELAY:

MOV R5, #250

DELAY1:

MOV R6, #255

DELAY2:

Trang 13

DJNZ R5, DELAY1 RET

END

; -

V NẠP CHƯƠNG TRÌNH CHO HỆ LÀM VIỆC

KẾT LUẬN

Chương trình cho phép đo chính xác độ rộng xung 6 kênh

Lựa chọn kênh hiển thị qua bàn phím, có thể mở rộng đo nhiều kênh hơn Giá trị hiển thị trên màn hình là 16 bít cho nên có thể đo xung có tần số nhỏ Ví dụ, với xung có độ rộng 90% thì tần số có thể là 15Hz

13

Ngày đăng: 26/07/2014, 15:21

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w