Professional Documents
Culture Documents
MỤC TIÊU:
THAM KHẢO:
BÀI 1
a) Kết nối một PORT của AVR vào J33 (Header điều khiển LCD) trên kit thí nghiệm.
b) Dùng các chương trình mẫu trong tài liệu hướng dẫn thí nghiệm, viết chương trình khởi
động LCD và xuất lên LCD như sau. (XX là số nhóm)
TN VXL-AVR
Nhom: XX
https://doe.dee.hcmut.edu.vn/
LAB 1-3
GIAO TIẾP NÚT NHẤN, BÀN PHÍM MA TRẬN
BÀI 2
a) Kết nối 1 switch đến 1 chân port của AVR, kết nối module BAR LED đến 1 port của
AVR, kết nối LCD đến 1 port của AVR
b) Viết chương trình đếm số lần nhấn nút và xuất kết quả ra barled, đồng thời xuất ra LCD
(không chống rung) (như bên dưới nhưng bỏ DELAY_500MS)
https://doe.dee.hcmut.edu.vn/
LAB 1-3
GIAO TIẾP NÚT NHẤN, BÀN PHÍM MA TRẬN
c) Thêm tính năng chống rung phím vào chương trình
.ORG 0 MOV R27,R26
LDI OUT PORTD,R27 OUT_LCD:
R16,HIGH(RAMEND) /* CPI R27,255 OUT PORTB,R17
OUT SPH,R16 BRLO LP SBI PORTC,2
LDI LDI R27,0 */ CBI PORTC,2
R16,LOW(RAMEND) RJMP LP RET
OUT SPL,R16
LDI R16,0X07 RESET_LCD: DELAY_US:
OUT DDRC,R16 LDI R16,250 PUSH R15
CBI PORTC,0 RCALL DELAY_US PUSH R14
CBI PORTC,1 LDI R16,250 MOV R15,R16
CBI PORTC,2 RCALL DELAY_US LDI R16,200
LDI R16,0XFF CBI PORTC,0; L1:
OUT DDRB,R16 LDI R17,$30 MOV R14,R16
OUT DDRD,R16 RCALL OUT_LCD L2:
SBI PORTA,0 LDI R16,42 DEC R14
CBI DDRA,0 RCALL DELAY_US NOP
LDI R26,0 CBI PORTC,0; BRNE L2
LDI R28,0 LDI R17,$30 DEC R15
LDI R29,0 RCALL OUT_LCD BRNE L1
LDI R30,0 LDI R16,2 POP R14
RCALL RESET_LCD RCALL DELAY_US POP R15
LDI R18,$38 CBI PORTC,0; RET
LDI R19,$01 LDI R17,$30 DELAY_500MS:
LDI R20,$0C RCALL OUT_LCD PUSH R16
LDI R21,$06 RET PUSH R17
RCALL INIT_LCD8 PUSH R18
;XUAT LCD INIT_LCD8: LDI R16,16
START: LDI R16,1 LP1: LDI R17,250
LDI R16,1 RCALL DELAY_US LP2: LDI R18,250
RCALL DELAY_US CBI PORTC,0 LP3: NOP
LP: CBI PORTC,0 MOV R17,R18 DEC R18
LDI R17,$81 RCALL OUT_LCD BRNE LP3
RCALL OUT_LCD LDI R16,1 DEC R17
LINE1: RCALL DELAY_US BRNE LP2
RCALL TACH CBI PORTC,0 DEC R16
MOV R17,R30 MOV R17,R19 BRNE LP1
RCALL XUAT RCALL OUT_LCD POP R18
LDI R30,0 LDI R16,20 POP R17
MOV R17,R29 RCALL DELAY_US POP R16
RCALL XUAT CBI PORTC,0 RET
LDI R29,0 MOV R17,R20 TACH:
MOV R17,R28 RCALL OUT_LCD PUSH R16
RCALL XUAT LDI R16,1 TRAM: CPI
LDI R28,0 RCALL DELAY_US R27,100
HERE: CBI PORTC,0 BRLO CHUC
RCALL MOV R17,R21 SUBI R27,100
DELAY_500MS RCALL OUT_LCD INC R30
SBIC PINA,0 LDI R16,1 RJMP TRAM
RJMP HERE RCALL DELAY_US CHUC: CLC
INC R26 RET CPI R27,10
https://doe.dee.hcmut.edu.vn/
LAB 1-3
GIAO TIẾP NÚT NHẤN, BÀN PHÍM MA TRẬN
BRLO DV
SUBI R27,10
INC R29
RJMP CHUC
DV: CLC
MOV R28,R27
POP R16
RET
XUAT:
PUSH R20
LDI R20,$30
ADD R17,R20
LDI R16,1
RCALL DELAY_US
SBI PORTC,0
RCALL OUT_LCD
POP R20
RET
https://doe.dee.hcmut.edu.vn/
LAB 1-3
GIAO TIẾP NÚT NHẤN, BÀN PHÍM MA TRẬN
d) Thực hiện chương trình, nhấn/nhả nút và quan sát kết quả
BÀI 3
a) Kết nối tín hiệu từ một port của AVR đến module bàn phím ma trận , kết nối module
BAR LED và LCD đến 2 port khác của AVR.
https://doe.dee.hcmut.edu.vn/
LAB 1-3
GIAO TIẾP NÚT NHẤN, BÀN PHÍM MA TRẬN
b) Viết chương trình con SCANKEY để quét bàn phím ma trận và trả về giá trị từ 0x0 đến
0xF ứng với mã của phím được nhấn. Nếu không có phím nào được nhấn trả về giá trị
0xFF. Giá trị trả về chứa trong R24
keypad_scan: ldi r23, 3 ; row 3 is pressed
ldi r22, 0b11110111 ; initial col rjmp keypad_scan_found
mask keypad_scan_next_row:
ldi r23, 0 ; initial pressed row ; check if all rows have been scanned
value cpi r24,0
ldi r24,3 ;scanning col index breq keypad_scan_not_found
keypad_scan_loop: ; shift row mask to scan next row
out PORTA, r22 ; scan current col ror r22
nop ;need to have 1us delay to dec r24 ;increase row index
stablize rjmp keypad_scan_loop
sbic PINA, 4 ; check row 0 keypad_scan_found:
rjmp keypad_scan_check_col2 ; combine row and column to get key
rjmp keypad_scan_found ; row 0 is value (0-15)
pressed ;key code = row*4 + col
keypad_scan_check_col2: lsl r23 ; shift row value 4 bits to
sbic PINA, 5 ; check row 1 the left
rjmp keypad_scan_check_col3 lsl r23
ldi r23, 1 ; row1 is pressed add r23, r24 ; add row value to
rjmp keypad_scan_found column value
keypad_scan_check_col3: mov r24,r23
sbic PINA, 6 ; check row 2 out portd,r24
rjmp keypad_scan_check_col4 rjmp START
ldi r23, 2 ; row 2 is pressed keypad_scan_not_found:
rjmp keypad_scan_found ldi r23, $ff ; no key pressed
keypad_scan_check_col4: mov r24,r23
sbic PINA, 7 ; check row 3 out portd,r24
rjmp keypad_scan_next_row
rjmp START
c) Dùng chương trình con này, viết chương trình thực hiện việc quét phím và xuất giá trị
đọc được lên bar led và LCD.
.ORG 0 CBI PORTC,2 ldi r20,
LDI LDI R16,$FF 0b11111111 ; enable
R16,HIGH(RAMEND) OUT DDRB,R16 pull up resistor
OUT SPH,R16 OUT DDRD,R16 out PORTA, r20
LDI ldi r20, LDI R28,0
R16,LOW(RAMEND) 0b00001111 ; set LDI R29,0
OUT SPL,R16 upper 4 bits of PORTD RCALL RESET_LCD
LDI R16,0X07 as input with pull- LDI R18,$38
OUT DDRC,R16 up, lower 4 bits as LDI R19,$01
CBI PORTC,0 output LDI R20,$0C
CBI PORTC,1 out DDRA, r20 LDI R21,$06
https://doe.dee.hcmut.edu.vn/
LAB 1-3
GIAO TIẾP NÚT NHẤN, BÀN PHÍM MA TRẬN
https://doe.dee.hcmut.edu.vn/
LAB 1-3
GIAO TIẾP NÚT NHẤN, BÀN PHÍM MA TRẬN
https://doe.dee.hcmut.edu.vn/