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

thi nghiem vi xu ly

41 440 0

Đ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 41
Dung lượng 239,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Thí nghiệm 1: Viết chương trình thực hiện đọc liện tục trạng thái nút nhấn được nối đến P1.0 và hiển thị ra Led được nối tại chân P1.1 bit thứ 1 của port 1 b.. Thí nghiệm 2: Viết chươn

Trang 1

THÍ NGHIỆM VI XƯ LÝ EME – MC8

BÀI 1: THÍ NGHIỆM VỚI NÚT NHẤN VÀ LED ĐƠN

1 Thí nghiệm 1: Viết chương trình thực hiện đọc liện tục trạng thái nút nhấn

được nối đến P1.0 và hiển thị ra Led được nối tại chân P1.1 ( bit thứ 1 của port 1)

b Các bit của 4 port được sử dụng trong thì nghiệm trên: Vì EME-MC8 thiết kế hoat động ở chế độ 3 bus, nên port 0: bus dữ liệu, port 2: bus địa chỉ, P3.0, P3.1, P3.6, P3.7 dùng làm bus điều khiển Các chân còn lại của các port đều có thể dùng trong thí nghiệm này

2 Thí nghiệm 2: Viết chương trình tạo xung vuông 1Hz được nối đến chân P1.0

với tần số dao động dùng trong hệ thống là 11.059MHz

Trang 2

Dùng vòng lặp để tạo trễ 0.5s, với giá trị nạp cho R5, R6, R7 như trên tính theo công thức gần đúng là t=2*m*n*p

Với giá trị nạp: R5 = 10, R6 = 200, R7 = 250 để giảm sai số

ORG 2000HLAP:

MOV R1,#3 MOV R2,#7

CLR P1.0LAP1:

ACALL DL DJNZ R1,LAP1

SETB P1.0LAP2:

ACALL DLDJNZ R2,LAP2SJMP LAPDL:

L2: MOV R5,#4

L1: MOV R6,#200

MOV R7,#250DJNZ R7,$

DJNZ R6,L1DJNZ R5,L2RET

END

3 Thí nghiệm 3:

ORG 2000HMAIN:

CPL P1.0ACALL DL500SJMP MAINDL500:

MOV TMOD,#01HMOV R7,#10LOOP:

MOV TH0,#HIGH(-50000) ; giá trị nạp là 50000*10 = 500000us = 0.5sMOV TL0,#LOW(-50000)

SETB TR0

Trang 3

JNB TF0,$ ; đợi cờ TF0 tràn và xóa cờ tràn

4 Thí nghiệm 4: Viết chương trình làm cho led nối đến chân P1.0 chớp tắt với

tần số có thể tăng hoặc giảm bằng cách nhấn nút nối đến chân P1.1 hoặc P1.2 Chu kì chớp tắt trung bình là 1s

Trang 4

MOV R7,A SJMP LAP ; mỗi lần giảm là 1*25000us = 0.025sKT_GIAM:

JNB P1.2,LAPINC A

MOV R7,ALAP:

ACALL DL500DJNZ R7,LAPSJMP MAINDL500:

MOV TMOD,#01HMOV TH0,#HIGH(-25000) ; giá trị là 50000*R7 (R7TB = 10) = 500000us = 0.5sMOV TL0,#LOW(-25000)

SETB TR0JNB TF0,$ ; đợi cờ TF0 tràn và xóa cờ trànCLR TF0

CLR TR0RET END

BÀI TẬP:

1 Viết chương trình thực hiện cổng logic: XOR 2 ngõ vào

ORG 2000HMAIN:

CLR AMOV C,P1.0MOV ACC.0,CMOV R0,AMOV C,P1.1MOV ACC.0,CXRL A,R0MOV C,ACC.0MOV P1.5,CSJMP MAINEND

2 Viết chương trình thực hiện mạch đèn chạy: SSSSTTTT…….-SSSSSSSS-TTTTTTT Thời gian thực hiện chương trình là 4.5s (với S: đèn sáng, T: đèn tắt)

STTTTTT-SSTTTTTT-SSSTTTTT-ORG 2000HMAIN:

CLR A

Trang 6

BÀI 2: THÍ NGHIỆM HIỂN THỊ DÙNG LED 7 ĐOẠN

1 Thí nghiệm 1:Viết chương trính thực hiện bộ đếm từ 0->9 và hiển thị trên led

7 đoạn, mỗi lần cách nhau 2s

ORG 2000HMAIN:

MOV R7,#10MOV R5,#0LOOP:

MOV DPTR,#TABLEMOV A,R5

MOVC A,@A+DPTR

ACALL DL2S

MOV DPTR,#0000HMOVX @DPTR,AINC R5

DJNZ R7,LOOPSJMP MAINDL2S:

MOV R6,#40MOV TMOD,#01HLAP:

MOV TH0,#HIGH(-50000)MOV TL0,#LOW(-50000)SETB TR0

JNB TF0,$

CLR TF0CLR TR0DJNZ R6,LAPRET

TABLE:

DB 70H,71H,72H,73H,74H,75H,76H,77H,78H,79HEND

2 Thí nghiệm 2:

a Viết chương trình hiển thị giá trị 1234 lên led 7 đoạn

ORG 2000HMAIN:

MOV R7,#4

Trang 7

MOV R5,#0LOOP:

MOV DPTR,#TABLEMOV A,R5

MOV DPTR,#0000HMOVX @DPTR,AINC R5

DJNZ R7,LOOPSJMP MAINDL2MS:

MOV TMOD,#01HMOV TH0,#HIGH(-2000)MOV TL0,#LOW(-2000)SETB TR0

JNB TF0,$

CLR TF0CLR TR0RET

MOV R7,#12HMOV R6,#34HMOV A,R7ANL A,#0F0HSWAP A

ADD A,#70HMOV R1,A ; R1 chưa gía trị 71H tương ứng với giá trị 1 đươc xuất ra led 1MOV A,R7

ANL A,#0FHADD A,#0B0HMOV R2,A ; R2 chưa giá trị 0B2H tương ứng với giá trị 1 được xuất ra led 2MOV A,R6

ANL A,#0F0H

Trang 8

3 Thí nghiệm 3: Viết chương trình hiển thị giá trị nhị phân trong thanh ghi R7

lên led 7 đoạn

Trang 9

DIV ABMOV R3,B ; R3 chứa giá trị hàng chụcMOV R2,A ; R2 chưa giá trị hàng trămLAP:

MOV DPTR,#0MOV A,R2ADD A,#0B0HMOVX @DPTR,AACALL DL2MSMOV A,R3ADD A,#0D0HMOVX @DPTR,AACALL DL2MSMOV A,R4ADD A,#0E0HMOVX @DPTR,AACALL DL2MSSJMP LAPDL2MS:

MOV TMOD,#01HMOV TH0,#HIGH(-2000)MOV TL0,#LOW(-2000)SETB TR0

JNB TF0,$

CLR TF0CLR TR0RET

END

BÀI TẬP:

1 Đếm số từ 0-99 (giả sử <100) xuất ra led 7 đoạn Mỗi lần xuất cách nhau

ORG 2000HMAIN:

MOV DPTR,#0MOV R7,#0MOV R6,#0

JB P1.0,NHAY ; nhảy khi nhấn P1.0SJMP MAIN

NHAY:

INC R7CJNE R7,#0AH,SKIP ; nhảy đến SKIP khi R7 # 0AH

Trang 11

BÀI 3: THÍ NGHIỆM HIỂN THỊ BẰNG LCD

1 Thí nghiệm 1: Hiển thị chuỗi “Hello world” lên LCD

Trang 13

MOV R5,#200LOP:

MOV R4,#250DJNZ R4,$

DJNZ R5,LOPDJNZ R6,LOP1RET

DELAY2:

MOV R3,#1LOOP2:

MOV R7,#50DJNZ R7,$

DJNZ R3,LOOP2RET

MOV DPTR,#8000HMOV R1,#6

ACALL CLEAR

ACALL INIT_LCDACALL HIEN_CHUACALL DELAYLAP1:

MOV A,#1CH ; dịch phảiACALL WRITECOM

ACALL DELAYDJNZ R1,LAP1MOV R1,#6LAP:

MOV A,#18H ; dịch tráiACALL WRITECOM

ACALL DELAYDJNZ R1,LAPMOV R1,#6SJMP LAP1

Trang 15

BÀI 4: THÍ NGHIỆM GIAO TIẾP QUA CỔNG NỐI TIẾP

1 Thí nghiệm 1: Phát chuỗi “Hello World” ra port nối tiếp

ORG 2000H

MAIN:

MOV SCON,#52H

MOV TMOD,#20H

Trang 16

MOV TH1,#-3SETB TR1MOV DPTR,#TABLELAP:

CLR AMOVC A,@A+DPTRINC DPTR

ACALL OUT_CHARJNZ LAP

SJMP $OUT_CHAR: ;phát kí tự ra port nối tiếp

JNB TI, $CLR TIMOV SBUF, ARET

MOV R4,#16LAP1:

ACALL IN_CHARACALL WRITE_TEXT DJNZ R4,LA

MOV R4,#16MOV A,#0C8H ;để con trỏ xuống hàngACALL WRITE_COM

LAP2:

ACALL IN_CHARACALL WRITE_TEXT

Trang 17

DJNZ R4,LAP2ACALL CLEARSJMP LOOP

;============================================ Chương trình con port nối tiếp

UART_INIT:

MOV SCON,#52HMOV TMOD,#20HMOV TH1,#-3SETB TR1RET

OUT_CHAR:

JNB TI, $ ;khi phát hết TI=1CLR TI

MOV SBUF, A RET

IN_CHAR:

JNB RI, $CLR RIMOV A, SBUFRET

;============================================== Chương trình con LCDLCD_INIT:

MOV A,#38HACALL WRITE_COMMOV A,#0EH

ACALL WRITE_COMMOV A,#06H

ACALL WRITE_COM RET

CLEAR:

MOV A,#01HACALL WRITE_COMRET

WAIT_LCD:

MOV R7, #100DEL1:

MOV R6, #250DJNZ R6, $ DJNZ R7, DEL1RET

WRITE_TEXT:

ACALL WAIT_LCDSETB RS

Trang 18

3 Thí nghiệm 3: Nhận kí tự từ port nối tiếp hiển thị ra LCD đồng thời phát ra

lại port nối tiếp (tốc độ port chọn là 9600pbs)

Trang 19

SJMP LOOP

;========================================= Chương trình con port nối tiếp

UART_INIT: ; khởi đđộng port nối tiếp

OUT_CHAR: ; phát kí tự ra port nối tiếp

JNB TI, $ ;khi phát hết TI = 1

Trang 20

WRITE_TEXT: ; ghi kí tự ra LCD

ACALL WAIT_LCDSETB RS

MOVX @DPTR, A SETB EN

CLR EN RET

WRITE_COM: ; ghi lệnh ra LCD

ACALL WAIT_LCDCLR RS

MOVX @DPTR, ASETB EN

CLR ENRETEND

BÀI TẬP:

Viết chương trình nhập kí tự từ bàn phím về làm công việc sau đây:

a Kiểm tra xem kí tự nhận được là A-Z hoặc a-z thì hiển thị lên LCD

b Kiểm tra xem kí tự nhận nhấn được số từ 0-9 thì hiển thị qua led 7 đoạn

c Nếu nhấn phím Enter thì xuống hàng mã ASCII 13H

d Nếu nhấn phím ESC thì xóa màn hình LCD mã ASCII 27H

MOV R4,#16

LAP1:

ACALL IN_CHARACALL NHANKYTUACALL OUT_CHARDJNZ R4,LAP1

Trang 22

DEL1:

MOV R6, #250DJNZ R6, $ DJNZ R7, DEL1RET

WRITE_TEXT:

ACALL WAIT_LCDSETB RS

MOVX @DPTR, A SETB EN

CLR EN RET

WRITE_COM:

ACALL WAIT_LCDCLR RS

MOVX @DPTR, ASETB EN

CLR ENRET

;=========Chương trình con kiểm tra kí tự nhận ñược từ Port nối tiếp veà xử lí theo ñề

SJMP THOATSKIP1:

CJNE A,#27,TIEPACALL CLEARSJMP THOAT

; kiểm tra 0-9

TIEP:

CJNE A,#30H,$+3JNC KTRA3SJMP THOATKTRA3:

CJNE A,#3AH,$+3

Trang 24

BÀI 5: THÍ NGHIỆM ĐIỀU KHIỂN ADC

1 Thí nghiệm 1: Viết chương trình thực hiện đọc điện áp của biến trở trên

kênh 0 và hiển thị ra led 7 đoạn.

Trang 27

BÀI 6: THÍ NGHIỆM VỚI LED MA TRẬN

1 Thí nghiệm 1: Viết chương trình hiển thị kí tự A lên LED ma trận.

Trang 28

2 Thí nghiệm 2: Viết chương trình chạy chữ A B từ phải sang trái hiển thị lên

Trang 29

BÀI 7: THÍ NGHIỆM VỚI ĐỘNG CƠ DC

1 Thí nghiệm 1: Viết chương trình cho phép động cơ chạy theo chiều thuận

trong vòng 2s, nghỉ 2s, chạy theo chiều ngược 2s, nghỉ 2s và lặp lại.

Trang 30

2 Thí nghiệm 2: Viết chương trình điều khiển động cơ với phương pháp PWM,

trong đó thời gian “bật” của xung là 50% chu kỳ.

Trang 31

3 Thí nghiệm 3: Viết chương trình điều khiển động cơ vơi phương pháp PWM,

trong đó thời gian “bật” của xung lần lượt là 20%, 50%, 80% chu kỳ Mỗi độ rộng xung cách nhau 5s Qui trình được lặp lại liên tục.

Trang 32

CLR TR1

MOV TH1,#HIGH(-200)MOV TL1,#LOW(-200)SETB TR1

SJMP THOAT

NHAY:

CJNE R3,#1,NHAY1DJNZ R7,LOP2

CLR TR1

MOV TH1,#HIGH(-500)MOV TL1,#LOW(-500)SETB TR1

Trang 33

4 Thí nghiệm 4: Viết chươg trình thực hiện việc tăng hoặc giảm dần tốc độ

động cơ nhờ hai nút nhấn P1.4 và P1.5 Khi không nhấn nút, tốc độ động cơ không đổi Khi nút P1.4 được nhấn và giữ thì tốc độ động cơ tăng dần Khi nút P1.5 được nhấn và giữ thì tốc độ động cơ giảm dần.

Trang 34

MOV A,#01HMOVX @DPTR,AACALL DLCMOV A,#00HMOVX @DPTR,AACALL DLTSJMP KT

NHAY1:

INC R3

DEC R4

MOV A,#01HMOVX @DPTR,AACALL DLCMOV A,#00HMOVX @DPTR,AACALL DLTSJMP KT

DLC:

MOV R6,03HLAP1:

MOV R5,#100DJNZ R5,$

DJNZ R6,LAP1RET

DLT:

MOV R6,04HLAP:

MOV R5,#100DJNZ R5,$

DJNZ R6,LAPRET

END

Trang 35

THÍ NGHIỆM VI XỬ LÝ PHẦN PIC 16F690

BÀI 1: THÍ NGHIỆM VỚI LED ĐƠN

1 Thí nghiệm 1: Viết chương trình chớp tắt LED được nối đến chân RC2 của

PIC 16F690 với tần số chớp tắt là 1Hz.

2 Thí nghiệm 2: Viết chương trình thực hiện mạch LED chạy được nối đến 4

LED port C của PIC 16F690 như sau, biết thời gian giữa các trạng thái S (sáng) và T (tắt) la 0.5s: STTT – TSTT – TTST – TTTS – STTT -

Trang 36

3 Thí nghiệm 3: Viết chương trình thực hiện mạch đếm lên bắt đầu từ 0 đến

15, kết quả xuất ra 4 LED đơn được nối đến port C của PIC16F690 Giá trị mạch đếm tăng lên 1 đơn vị cách nhau 1s.

4 Thí nghiệm 4: Viết chương trình thực hiện mạch đếm lên bắt đầu từ 0 đến

15, kết quả xuất ra 4 LED đơn được nối đến port C của PIC16F690 Mạch chỉ đếm khi SW1 được nhấn.

#include <16F690.h>

Trang 37

5 Thí nghiệm 5: Viết chương trình thực hiện mạch đếm lên bắt đầu từ 0 đến

15, kết quả xuất ra 4 LED đơn được nối đến port C của PIC16F690 Trong quá trình đếm nếu SW1 được nhấn thì sẽ thực hiện đếm ngược tại giá trị đó về 0 Sau đó lại thực hiện đếm lên từ 0.

Trang 38

{

output_C(a[i]);

delay_ms(1000);

if (input(pin_a0)==0) {

lap: if (i==0) {

while(i<16) {

output_C(a[i]);

delay_ms(1000);

i++;

}

}

else //i>0 {

while(i!=0) {

output_c(a[i]); delay_ms(500); i ;

}

}

}

else //tang i tiep khi khong nhan i++;

}

i = 0;

} goto lap;

}

BÀI 2: THÍ NGHIỆM VỚI LED 7 ĐOẠN

1 Thí nghiệm 1: Viết chương trình thực hiện mạch đếm lên từ 0 đến F (số

Hex), kết quả xuất ra LED 7 đoạn, giá trị bộ đếm tăng lên 1 đơn vị cách nhau mỗi 0.5s

#include<16F690.h>

#use delay(clock = 4000000)

#use fast_io(c)

Trang 39

#use fast_io(a)

int const a[16] = {0x06,0x04,0x07,0x07,0x05,0x03,0x03,0x06,0x07,0x07,0x07,0x01,0x02, 0x05,0x03,0x03} ;

int const c[16] = {0x0f,0x01,0x06,0x03,0x09,0x0b,0x0f,0x01,0x0f,0x0b,0x0d,0x0f,0x0e, 0x07,0x0e,0x0c} ;

BÀI 3: THÍ NGHIỆM ĐIỀU KHIỂN ADC

1 Thí nghiệm 1: Viết chương trình đọc giá trị điện áp của biến trở RP1 và xuất

mức điện áp tương ứng với giá trị điện áp đọc được ra LED (dùng ADC với độ phân giải 10 bits) được cho bởi bảng sau:

Mức (ngõ ra bộ ADC) Giá trị hiển thị trên LED

Trang 40

2 Thí nghiệm 2: Viết chương trình đọc giá trị ngõ ra ADC với độ phân giải 10

bits dùng để điều khiển thời gian chớp tắt LED đơn được nối đến chân RC0 của PIC 16F690.

Trang 41

adc = read_adc(); adc = adc*4;

output_c(0xff); delay_ms(adc+100); output_c(0x00); delay_ms(adc+100); }

}

Ngày đăng: 15/03/2017, 10:45

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w