Báo cáo Thí nghiệm vi xử lý - pdf 15

Download miễn phí Báo cáo Thí nghiệm vi xử lý



BÀI 6: BÀN PHÍM MA TRẬN 4X4
Bài tập : Xác định sơ đồ chân và cách bố trí ma trận của bàn phím sử dụng chức năng đo điện trở của máy đo vạn năng. Viết một chương trình Assembler để hiện thị lên màn hình giá tri của phím được nhấn trên bàn phím.
 



Để tải bản Đầy Đủ của tài liệu, xin Trả lời bài viết này, Mods sẽ gửi Link download cho bạn sớm nhất qua hòm tin nhắn.
Ai cần download tài liệu gì mà không tìm thấy ở đây, thì đăng yêu cầu down tại đây nhé:
Nhận download tài liệu miễn phí

Tóm tắt nội dung tài liệu:

ử dụng timer và ngắt ngoài theo yêu cầu sau:
Khi không có ngắt, điều khiển đèn sáng luân phiên: xanh – đỏ (0,5s), đỏ - vàng (0,5s), vàng – xanh (0,5s), và lặp lại….giống như đèn giao thông.
Khi có ngắt ngoài, điều khiển chớp tắt cả ba đèn cùng lúc cho đến khi có tác động ngắt ngoài lần nữa thì trở lại chương trình đèn giao thông.
Chương trình mẫu:
****************************************
;timer0 should gennerate interrupts 0.001 seconds
;timer0 overflow time is calculated as follows:
;0.01 seconds=(timer count value)*(1/22118400Hz)*12
;because our clock speed is 22.184MHz and timer is advanced by one count every
;12 clock cycles.Therefore,the timer count value is calculated as 18432 .Timer
;starts from its reload value and counts upwards until it overflows at 65536
;timer reload value is calculated as:
;timer reload value=65536-timer count value
;timer reload value=65536-18432=47104
t10ms equ 47104
;period of blinking/running(*0.01sek.)
period equ 50
;pins,assigned to LEDs
led1 equ P1.3
led2 equ P1.1
led3 equ P1.0
;switch 1 connected to INT0 pin
sw1 equ P3.2
;TCON bits:
TF1 equ TCON.7
TR1 equ TCON.6
TF0 equ TCON.5
TR0 equ TCON.4
IE1 equ TCON.3
IT1 equ TCON.2
IE0 equ TCON.2
IT0 equ TCON.0
;IE bits
EA equ IE.7
ET2 equ IE.5
ES equ IE.4
ET1 equ IE.3
EX1 equ IE.2
ET0 equ IE.1
EX0 equ IE.0
;8051 stack
stack equ $60
;counts 0-20(*0.025) to generate 0.5 seconds
counter1 equ $30
;timer of INT0 disable
counter2 equ $31
;LEDs status
LEDs equ $32
DisableINT0 bit $20.0
;run/blinking together
mode bit $20.1
odd_tact bit $20.2
;jump to main body of the program
ajmp prog
;INT0 interrupt
org 3
ajmp int0_sr
;TIMER0 interrupt
org 0bh
ajmp t0_int
;INT1 interrupt( not used)
org 13h
reti
;TIMER1 interrupt( not used)
org 1bh
reti
;UART( serial port)interrupt( not used)
org 23h
reti
************* Main program********************
;set stack pointer
prog: mov SP,#stack
;TIMER0-16 bit timer mode1
mov a,TMOD
anl a,#11110000b
orl a,#00000001b
mov TMOD,a
;Run TIMER0
setb TR0
;INT0 low level activated
clr IT0
;Enable both TIMER0 and INT0
mov IE,#00000011b
;TIMER0-high priority
mov IP,#00000010B
mov counter1,#period
mov LEDs,#00000001b
;Global interrupts enable
setb EA
m001:
;Set idle mode,loop forever until interrupted
mov a,pcon
orl a,#10000000b
mov pcon,a
sjmp m001
****************TIMER0 interrupt service routine**************
t0_int: push psw
push acc
;clear interrupt flag
clr TF0
;Load TIMER0 for next 0.01 sek
mov TL0,#t10ms
mov TH0,#=t10ms
;suppress swich contacts bouncing:
;INT0 will remain disabled till SW1 will
;relised and 0.1 sek more
jnb sw1,ti01
;if INT0 is temporary disabled count time
;and exit i.s.r.
jnb DisableINT0,ti01
djnz counter2,ti01
;re-enable INT0
clr DisableINT0
setb ex0
;Drive LEDs
;count 0.01 sek.intervals and exits i.s.r.
ti01: djnz counter1,ti02
;reload counter
mov counter1,#period
;mode=1-all LEDs are blinking
;mode=0-LEDs are running
jb mode,ti03
;rotate LEDs 1 position left
mov a,LEDs
mov c,acc.2
rlc a
mov LEDs,a
;drive LED pins
ti05: mov c,acc.0
mov led1,c
mov c,acc.1
mov led2,c
mov c,acc.2
mov led3,c
sjmp ti02
;LEDs are blinking
ti03: cpl odd_tact
jb odd_tact,ti04
;at even tacts will turn LEDs OFF
mov a,#0
sjmp ti05
;at odd tacts will turn them ON
ti04: mov a,#00000111b
sjmp i05
ti02: pop acc
pop psw
reti
************** External interrupt0 service rountine*********
int0_sr:
;clear interrupt flag
clr ie0
; to prevent multiple interrupts due to the bouncing of
;switch contacts, disable it for 0.1 seconds
clr ex0
;load counter for 0.1 seconds
mov counter2,#10
setb disableINT0
;change mode from blinking to shift or vice versa
cpl mode
mov LEDs,#00000001b
reti
BÀI 6: BÀN PHÍM MA TRẬN 4X4
Bài tập : Xác định sơ đồ chân và cách bố trí ma trận của bàn phím sử dụng chức năng đo điện trở của máy đo vạn năng. Viết một chương trình Assembler để hiện thị lên màn hình giá tri của phím được nhấn trên bàn phím.
Chương trình mẫu:
;***********DIFINITIONS**********
;-------------R0,R7 REGISTERS------------
;R0-
;R1-
;R2-
;R3-
;R4-key index
;R5-row counter
;R6-counter for delay
;R7-counter for delay
;-------------LOWER BANK RAM------------------
FLAGS EQU 20H ;REGISTER OF EVENTS
MAX_ROW EQU 4 ;KEYPAD DEFINITIONS
COL1 BIT P2.4
COL2 BIT P2.5
COL3 BIT P2.6
COL4 BIT P2.7
ON_FLAG BIT FLAGS.0 ;=1if any pressed key was found
TI BIT SCON.1
TR1 BIT TCON.6
CR EQU 0DH
;-------------INTERRUPT HANDLERS-----------
ORG 00H
LJMP MAIN
ORG 03H
RETI
ORG 0BH
RETI
ORG 13H
RETI
ORG 1BH
RETI
ORG 23H
RETI
;**********************************
ORG 4BH
;*********************************
RowSEL: DB 0FEH
DB 0FDH
DB 0FBH
DB 0F7H
KeyTBL:
DB '1','2','3','A'
DB '4','5','6','B'
DB '7','8','9','C'
DB '*','0','#','D'
;**********************************
DELAY:
DLY0: MOV R6,#0FFH
DLY1: MOV R7,#0FFH
DLY2: NOP
NOP
NOP
DJNZ R7,DLY2
DJNZ R6,DLY1
RET
;**********************************
SCAN_KEYPAD:
MOV DPTR,#RowSEL
MOV R5,#MAX_ROW
MOV R4,#0
CLR ON_FLAG
SCAN0:
CLR A
MOVC A,@A+DPTR
MOV P2,A
JNB COL1,SCAN1
INC R4
JNB COL2,SCAN1
INC R4
JNB COL3,SCAN1
INC R4
JNB COL4,SCAN1
INC R4
INC DPTR
DJNZ R5,SCAN0
RET
SCAN1:
SETB ON_FLAG
MOV DPTR,#KeyTBL
MOV A,R4
MOVC A,@A+DPTR
RET
;**********************************
MAIN:
MOV SCON,#%01010000
MOV TMOD,#20H
MOV TH1,#0FDH
MOV TL1,#0FDH
MOV TCON,#%01001001
MOV DPTR,#MESSAGE
ACALL SEND_MESSAGE
LOOP:
LCALL DELAY
LCALL SCAN_KEYPAD
JNB ON_FLAG,LOOP
ACALL SEND_CHAR
MOV A,#CR
ACALL SEND_CHAR
AJMP LOOP
SEND_CHAR:
MOV SBUF,A
JNB TI,$
CLR TI
RET
SEND_MESSAGE:
CLR A
MOVC A,@A+DPTR
JZ EXIT
ACALL SEND_CHAR
INC DPTR
AJMP SEND_MESSAGE
;**********************************
EXIT: RET
;**********************************
MESSAGE STR "4*4 KEYPAD"
DB CR,0
;**********************************
END
Sơ đồ giải thuật chương trình :
=1
=0
Quay lại
=1
=0
=0
Tạo vòng LOOP
Ghi 0101000 vào SCON
Ghi 20H vào TMOD (timer1)
Ghi 0FDh vào TH1
Ghi 01001001 vào TCON
Ghi nội dung hàm MESSENGE vào DPTR
Gọi hàm con SEND_MESSENGE
Gọi hàm con DELAY
Gọi hàm con SCAN_KEYPAD
Ghi (CR) vào A
Kết thúc
Kiểm tra hàm ON_FLAG=0?
Gọi hàm con SEND_CHAR
Gọi hàm con SEND_CHAR
Xóa A
Ghi (A+DPTR) vào A
A = 0?
EXIT
Gọi hàm con SEND_CHAR
Tăng DPTR
Ghi A vào bộ nhớ đệm
TI = 0 ?
Không làm gì cả
Xóa cờ TI
Kết thúc hàm con SEND_CHAR
Nội dung cần xuất ra màn hình
Câu hỏi 2: Mở rộng chương trình trên sao cho khi có phím nhấn thì giá trị nhị phân tương ứng sẽ được thể hiện trên 4 bit thấp của P0 cho đến khi phím khác được nhấn?
;***********DIFINITIONS**********
;-------------R0,R7 REGISTERS------------
;R0-
;R1-
;R2-
;R3-
;R4-key index
;R5-row counter
;R6-counter for delay
;R7-counter for delay
;-------------LOWER BANK RAM------------------
FLAGS EQU 20H ;REGISTER OF EVENTS
MAX_ROW EQU 4 ;KEYPAD DEFINITIONS
COL1 BIT P2.4
COL2 BIT P2.5
COL3 BIT P2.6
COL4 BIT P2.7
ON_FLAG BIT FLAGS.0 ;=1if any pressed key was found
TI BIT SCON.1
TR1 BIT TCON.6
CR EQU 0DH
;-------------INTERRUPT HANDLERS-----------
ORG 00H
LJMP MAIN
ORG 03H
RETI
ORG 0BH
RETI
ORG 13H
RETI
ORG 1BH
RETI
ORG 23H
RETI
;**********************************
ORG 4BH
;*********************************
RowSEL: DB 0FEH
DB 0FDH
DB 0FBH
DB 0F7H
KeyTBL:
DB '1','2','3','A'
DB '4','5','6','B'
DB '7','8','9','C'
DB '*','0','#','D'
;**********************************
DELAY:
DLY0: MOV R6,#0FFH
DLY1: MOV R7,#0FFH
DLY2: NOP
NOP
NOP
DJNZ R7,DLY2
DJNZ R6,DLY1
RET
;**********************************
SCAN_KEYPAD:
MOV DPTR,#RowSEL
MOV R5,#MAX_ROW
MOV R4,#0
CLR ON_FLAG
SCAN0:
CLR A
MOVC A,@A+DPTR
MOV P2,A
JNB COL1,SCAN1
INC R4
JNB COL2,SCAN1
INC R4
JNB COL3,SCAN1
INC R4
JNB COL4,SCAN1
INC R4
INC DPTR
DJNZ R5,SCAN0
RET
SCAN1:
SETB ON_FLAG
MOV DPTR,#KeyTBL
MOV A,R4
MOVC A,@A+DPTR
RET
;**********************************
MAIN:
MOV SCON,#%01010000
MOV TMOD,#20H
MOV TH1,#0FDH
MOV TL1,#0FDH
MOV TCON,#%01001001
MOV DPTR,#MESSAGE
ACALL SEND_MESSAGE
LOOP:
LCALL DELAY
LCALL SCAN_KEYPAD
MOV P0,P2
JNB ON_FLAG,LOOP
ACALL SEND_CHAR
MOV A,#CR
ACALL SEND_CHAR
AJMP LOOP
SEND_CHAR:
MOV SBUF,A
JNB TI,$
CLR TI
RET
SEND_MESSAGE:
CLR...
Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status