Báo cáo Thí nghiệm Vi xử lý với EME-MC8

THÍ NGHIỆM 1: Viét chương trình liên tục đọc trạng thái của 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ứ nhất của Led thanh BL202)

ORG 2000H

MAIN: MOV C,P1.0

 MOV P1.1,C

 SJMP MAIN

 END

THÍ NGHIỆM 2: Viết chương trình tạo xung vuông 1Hz được nối đến chân P1.0

ORG 2000H

MAIN: CPL P1.0

 MOV R5,#10

LAP1: MOV R6,#100

LAP: MOV R7,#250

 DJNZ R7,$

 DJNZ R6,LAP

 DJNZ R5,LAP1

 SJMP MAIN

 END

 

doc40 trang | Chuyên mục: Xử Lý Tín Hiệu Số | Chia sẻ: tuando | Lượt xem: 555 | Lượt tải: 0download
Tóm tắt nội dung Báo cáo Thí nghiệm Vi xử lý với EME-MC8, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
1ms:
	MOV R7,#5
 	DL:	MOV R6,#100
	DJNZ R6,$
	DJNZ R7,DL
 	RET
	Dùng chương trình con trên hiển thị chữ A
	ORG 2000H
	MOV 30H,#03H
	MOV 31H,#0EDH
	MOV 32H,#0EEH
	MOV 33H,#0EEH
	MOV 34H,#0EDH
	MOV 35H,#03H
	MOV 36H,#0FFH
	MOV 37H,#0FFH
	LOOP:	ACALL HT_ONHO
	SJMP LOOP
	HT_ONHO:	
	MOV R1,#8
	MOV A,#00000001B
	MOV R0,#30H
 	LAP:	ACALL HT_COT
 	PUSH ACC
 	CLR A
	MOV A,@R0
	ACALL HT_HANG
 	INC R0
	POP ACC
	RL A
	DJNZ R1, LAP
	RET
 	HT_COT:
 	PUSH DPH
 	PUSH DPL
 	MOV DPTR,# 0C000H
 	MOVX @DPTR,A
 	POP DPL
 	POP DPH
 	RET
 	HT_HANG:
 	PUSH DPH
 	PUSH DPL
 	MOV DPTR,# 0A000H
 	MOVX @DPTR,A
 	ACALL DELAY_1ms
 	POP DPL
 	POP DPH
 	RET
 	DELAY_1ms:
	MOV R7,#5
 	DL:	MOV R6,#100
	DJNZ R6,$
	DJNZ R7,DL
 	RET
	END
	Dùng chương trình con trên hiển thị chữ B
	ORG 2000H
	MOV 30H,#00H
	MOV 31H,#76H
	MOV 32H,#76H
	MOV 33H,#76H
	MOV 34H,#89H
	MOV 35H,#0FFH
	MOV 36H,#0FFH
	MOV 37H,#0FFH
	LOOP:	ACALL HT_ONHO
	SJMP LOOP
	HT_ONHO:	
	MOV R1,#8
	MOV A,#00000001B
	MOV R0,#30H
 	LAP:	ACALL HT_COT
 	PUSH ACC
 	CLR A
	MOV A,@R0
	ACALL HT_HANG
 	INC R0
	POP ACC
	RL A
	DJNZ R1, LAP
	RET
 	HT_COT:
 	PUSH DPH
 	PUSH DPL
 	MOV DPTR,# 0C000H
 	MOVX @DPTR,A
 	POP DPL
 	POP DPH
 	RET
 	HT_HANG:
 	PUSH DPH
 	PUSH DPL
 	MOV DPTR,# 0A000H
 	MOVX @DPTR,A
 	ACALL DELAY_1ms
 	POP DPL
 	POP DPH
 	RET
 	DELAY_1ms:
	MOV R7,#5
 	DL:	MOV R6,#100
	DJNZ R6,$
	DJNZ R7,DL
 	RET
	END
BÀI TẬP THÊM : Cho hiển thị và chạy chữ A B C trên led ma trận
	ORG 2000H
 	TT:	MOV R4,#10
	MOV R0,#0
 	MOV DPTR,#CHAR
 	MOV R5,#32
LOOP1:	MOV R2,DPH
 	MOV R3,DPL
LOOP:	MOV DPH,R2
 	MOV DPL,R3
 	MOV R1,#8
	MOV A,#00000001B
	LAP:	ACALL HT_COT
 	PUSH ACC
 	CLR A
	MOVC A,@A+DPTR
	ACALL HT_HANG
 	INC DPTR
	POP ACC
	RL A
	DJNZ R1, LAP
 	DJNZ R4,LOOP
 	MOV R4,#10
 	INC R0
 	MOV A,R0
 	MOV DPTR,#CHAR
 	ADD A,DPL
 	MOV DPL,A
	DJNZ R5,LOOP1
 	SJMP TT
CHAR: 	DB 	0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,03H, 0EDH, 0EEH, 0EEH, 0EDH, 03H, 0FFH, 0FFH,00H, 76H, 76H, 76H, 89H, 0FFH, 0FFH,0FFH,81H,7EH,7EH,7EH,0BDH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH,0FFH,0FFH,0FFH
HT_COT:
 	PUSH DPH
 	PUSH DPL
 	MOV DPTR,#0C000H
 	MOVX @DPTR,A
 	POP DPL
 	POP DPH
 	RET
HT_HANG:
 	PUSH DPH	
 	PUSH DPL	
 	MOV DPTR,#0A000H
 	MOVX @DPTR,A
 	ACALL DELAY_1ms
 	POP DPL
 	POP DPH
 	RET
DELAY_1ms:
	MOV R7,#5
DL:	MOV R6,#100
	DJNZ R6,$
	DJNZ R7,DL
 	RET
	END
BÀI 7: THÍ NGHIỆM VỚI ĐỘNG CƠ DC
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
	ORG 2000H
 	CLR A
 	MOV TMOD,#10H
 	MOV DPTR,#0E000H
 	LAP:	ACALL CHIEUTHUAN
 	ACALL DELAY_2S
 	ACALL NGHI
 	ACALL DELAY_2S
 	ACALL CHIEUNGHICH
 	ACALL DELAY_2S
 	ACALL NGHI
 	ACALL DELAY_2S
 	SJMP LAP
 	CHIEUTHUAN:
 	SETB ACC.0
 	CLR ACC.1
 	MOVX @DPTR,A
 	RET
 	NGHI:
 	CLR ACC.0
 	CLR ACC.1
	MOVX @DPTR,A
	RET
 	CHIEUNGHICH:
 	CLR ACC.0
 	SETB ACC.1
 	MOVX @DPTR,A
	RET
 	DELAY_2S:
 	MOV R7,#40
 	LOOP:	MOV TL1,#LOW(-50000)
 	MOV TH1,#HIGH(-50000)
 	SETB TR1
 	JNB TF1,$
 	CLR TF1
	CLR TR1
 	DJNZ R7, LOOP
 	RET
 	END
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ỳ
ORG 2000H
 	LJMP MAIN
 	ORG 200BH
 	LJMP ISR_T0
 	ORG 201BH
 	LJMP ISR_T1
 MAIN:
 	MOV TMOD,#11H
 	CLR A
 	SETB TF0
 	MOV IE,#82H
 	MOV DPTR,#0E000H
LAP: 	MOVX @DPTR,A
 	SJMP LAP
ISR_T0:
 	SETB ACC.0
 	CLR TR0
 	MOV TL0,#LOW(-1000)
 	MOV TH0,#HIGH(-1000)
 	SETB TR0
 	CLR TR1
 	MOV TL1,#LOW(-500)
 	MOV TH1,#HIGH(-500)
 	SETB TR1
 	SETB ET1
 	RETI
ISR_T1:
 	CLR TR1
 	CLR ACC.0
 	CLR ET1
 	RETI
 	END
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%, và 80% chu kỳ. Mỗi độ rộng xung cách nhau 5s. Quy trình được lặp lại liên tục
ORG 2000H
 	LJMP MAIN
 	ORG 200BH
 	LJMP ISR_T0
 	ORG 201BH
 	LJMP ISR_T1
 MAIN:
 	MOV TMOD,#11H
 	MOV R7,#50
 	MOV R6,#100
 	MOV R5,#0
 	CLR A
 	SETB TF0
 	MOV IE,#82H
 	MOV DPTR,#0E000H
LAP: 	MOVX @DPTR,A
 	SJMP LAP
ISR_T0:
 	SETB ACC.0
 	CLR TR0
 	MOV TL0,#LOW(-1000)
 	MOV TH0,#HIGH(-1000)
 	SETB TR0
 	DJNZ R6,TT
 	MOV R6,#100
 	DJNZ R7,TT
 	MOV R7,#50
 	MOV R6,#100
 	INC R5
TT:	CJNE R5,#0,KHAC20
 	CLR TR1
 	MOV TL1,#LOW(-200)
 	MOV TH1,#HIGH(-200)
 	SETB TR1
 	SJMP EXIT
KHAC20: 	CJNE R5,#1,KHAC50
 	CLR TR1
 	MOV TL1,#LOW(-500)
 	MOV TH1,#HIGH(-500)
 	SETB TR1
 	SJMP EXIT
 KHAC50:	CJNE R5,#2,KHAC80
 	CLR TR1
 	MOV TL1,#LOW(-800)
 	MOV TH1,#HIGH(-800)
 	SETB TR1
 	SJMP EXIT
KHAC80:	MOV R5,#0
 	SJMP TT
 EXIT:	SETB ET1
 	RETI
ISR_T1:	
 	CLR TR1
 	CLR ACC.0
 	CLR ET1
 	RETI
 	END
THÍ NGHIỆM 4: Viết chương trình thực hiện tăng hoặc giảm dần tốc độ động cơ nhờ 2 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
ORG	2000H
MAIN:	MOV	DPTR,#0E000H
 	MOV	R3,#5
 	MOV	R4,#5	
KT:	JNB	P1.4,NHAY1	
 	MOV	A,#01H
 	MOVX@DPTR,A 
 	ACALL DLC
 	MOV	A,#00H
 	MOVX @DPTR,A
 	ACALL DLT	
 	JNB	P1.5,NHAY2	
 	MOV	A,#01H
 	MOVX @DPTR,A
 	ACALL DLC
 	MOV	A,#00H
 	MOVX @DPTR,A
 	ACALL DLT
 	SJMP	KT
NHAY1:	INC	R3
 	DEC	R4
 	MOV	A,#01H
 	MOVX @DPTR,A
 	ACALL DLC 
 	MOV	A,#00H
 	MOVX @DPTR,A
 	ACALL DLT
 	SJMP	KT
NHAY2:	INC	R4
 	DEC	R3
SKIP2: 	MOV	A,#01H
 	MOVX @DPTR,A
 	ACALL DLC
 	MOV	A,#00H
 	MOVX @DPTR,A
 	ACALL DLT
 	SJMP	KT	
DLC:	MOV	R6,03H
LAP1:	MOV	R5,#100
 	DJNZ	R5,$ 
 	DJNZ	R6,LAP1
 	RET
DLT:	 	MOV	R6,04H
 	LAP:	MOV	R5,#100
 	DJNZ	R5,$
 	DJNZ	R6,LAP
 	RET
 	END
THÍ NGHIỆM VI XỬ LÝ VỚI PIC 16F690
BÀI 1: THÍ NGHIỆM VỚI LED ĐƠN
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
	#include 
 	#use delay(clock = 4000000)
 	#use fast_io(c)
void main ()
	{	set_tris_c(0);
	for( ; ; )
	{ output_toggle(pin_c2);
	 delay_ms(500); }
	}
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) là 0.5s: 
 	STTTàTSTTàTTSTàTTTSàSTTTà.
	#include 
 	#use delay(clock = 4000000)
 	#use fast_io(c)
 	int8 a=0x10;
 	void main()
	{	set_tris_c(0);
 	while(1)
	{	a=a>>1;
 	output_c (a);
 	delay_ms(500);
 	if ( a==0x01)
 	{	a=0x10;
 	}
 	}
 	 {
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 PIC 16F690. Giá trị mạch đếm tăng lên 1 đơn vị cách nhau 1s 
 	#include 
 	#use delay(clock = 4000000)
 	#use fast_io(c)
 	int8 i;
 	void main()
 	{	set_tris_c(0);
 	while(1)
 	{	for(i=0; i<= 0x0F; i++)
 	{	output_c(i);
 	delay_ms(1000);
 	}
	}
 	}
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 PIC 16F690. Mạch chỉ đếm khi SW1 được nhấn
	#include 
 	#use delay(clock = 4000000)
 	#use fast_io(c)
	int8 i=0;
 	void main ()
 	{	set_tris_c(0);
 	set_tris_a(1);
	while(1)
 	{	if ( input(pin_A3)==0 )
 	{	i=i+1;
 	 	if ( i>0x0F)
 	i=0;
 	}
 	output_c(i);
 	}
 	}
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 PIC 16F690. Trong quá trình đếm nếu SW1 được nhấn thì thực hiện đếm ngược từ giá trị đó về 0, sau đó lại đếm lên từ 0
#include 
#use delay(clock = 4000000)
#use fast_io(c)
#use fast_io(a)
int const a[16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
void main()
{ 
	int i=0;
 	set_tris_C(0x00);
 	output_C(0x00);
 	while(1)
 	{ 	while(i<16) 
 	{ 	output_C(a[i]); 
 	delay_ms(1000); 
 	if (input(pin_a0)==0)
 	{	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 
 	i++; 
 }
 i = 0;
 } 
}
BÀI 2: THÍ NGHIỆM VỚI LED 7 ĐOẠN
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
#use delay(clock = 4000000)
#use fast_io(c)
#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} ;
void main()
 { 	 int i = 0;
 	set_tris_c(0);
 	set_tris_a(0);
 	while(1)
 	{ 	for(i=0, i<=0xFF,i++)
 	{	output_c(c[i]);
	output_a(a[i]);
 	delay_ms(500);
 	}
 	}	
}
BÀI 3: THÍ NGHIỆM ĐIỀU KHIỂN ADC
THÍ NGHIỆM1: 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 7 đoạn ( 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 7đoạn
0 – 63
0
64 – 127
1
128 – 191
2
...
...
832 – 895
D
896 – 959
E
960 – 1023
F
#include 
#include 
#use delay(clock = 4000000)
#use fast_io(c)
#use fast_io(a)
void main()
{ 	int16 adc;
	set_tris_c(0);
 	set_tris_a(1);
 	setup_adc(adc_clock_internal);
 	setup_adc_ports(sAN0);
 	set_adc_channel(0);
 	delay_us(10);
 	while(1)
 	{ 	adc = read_adc(); 
 	adc = adc/16;
 	output_c(adc);
 	}
}
THÍ NGHIỆM 2: Viết chương trình đọc giá trị ngõ ra ADC với độ phân giải 10bít 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
#include 
#include 
#use delay(clock = 4000000)
#use fast_io(c)
#use fast_io(a)
void main()
{	int16 adc;
	set_tris_c(0);
 	set_tris_a(1);
 	setup_adc(adc_clock_internal);
 	setup_adc_ports(sAN0);
 	set_adc_channel(0);
 	delay_us(10);
 	while(1)
	{ 	adc = read_adc();
 	output_c(0xFF);
 	delay_ms(adc*10);
 	output_c(0x00);
 	delay_ms(adc*10);
 	}
 	}

File đính kèm:

  • docbao_cao_thi_nghiem_vi_xu_ly_voi_eme_mc8.doc