Khi Switch ở trạng thái ON/OFF, giá trị chân Port bằng bao nhiêuc. Enable điện trở pullup bằng cách cho các chân của PORTx lên 1 cd. Theo datasheet của IC 74HC595, tần số clock cao nhất
Trang 1ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM
KHOA ĐIỆN – ĐIỆN TỬ
Trang 2L AB 1-1
GIAO TIẾP I/O VÀ CÁC LỆNH TÍNH TOÁN
BÀI 1
1 Trả lời các câu hỏi
a Lấy giá trị từ 2 nibble của PORTA như thế nào
b Enable điện trở pullup như thế nào?
c Khi Switch ở trạng thái ON/OFF, giá trị chân Port bằng bao nhiêu?
d Khi chân port ở trạng thái 1, BAR LED sáng hay tắt?
e Mã nguồn với chú thích
a
- Chuyển giá trị của PORTA vào thanh ghi R17
- Cất R17, sau đó AND R17 với 0b00001111 để lấy nibble phải của PORTA, chuyển giá
trị này vào R18
- Lấy R17 ra, sau đó AND R17 với 0b11110000 để lấy nibble trái của PORTA
b Enable điện trở pullup bằng cách cho các chân của PORTx lên 1
c Khi Switch ở trạng thái ON/OFF, giá trị chân Port bằng 1/0
d Khi chân port ở trạng thái 1, BAR LED sáng
e Code:
ORG 0 MAIN: LDI R16,HIGH(RAMEND) ;đưa stack lên vùng địa chỉ% cao OUT SPH,R16
LDI R16,LOW(RAMEND) OUT SPL,R16
LDI R16,0x00 OUT DDRA,R16 ; PORTA là input LDI R16,0xFF
OUT PORTA,R16 ;điện trở% kéo lên ở% portA LDI R16,0xFF
OUT DDRB,R16 ; PORTB là output LDI R16,0x00
OUT PORTB,R16 ; tắ8t LED 7 đoạn LOOP: IN R17,PINA
COM R17
Trang 3OUT PORTB,R17 RJMP LOOP
BÀI 2
1 Trả lời các câu hỏi
a Mã nguồn với chú thích ORG 0
MAIN: LDI R16,HIGH(RAMEND) ;đưa stack lên vùng địa chỉ cao OUT SPH,R16
LDI R16,LOW(RAMEND) OUT SPL,R16
LDI R16,0x00 OUT DDRA,R16 ; PORTA là input LDI R16,0xFF
OUT PORTA,R16 ;điện trở kéo lên ở portA LDI R16,0xFF
OUT DDRB,R16 ; PORTC là output LDI R16,0x00
OUT PORTB,R16 ; tắt LED 7 đoạn LOOP: IN R17,PINA
COM R17 LDI R18,$05 ADD R17,R18 OUT PORTB,R17 RJMP LOOP
Trang 4BÀI 3
1 Trả lời các câu hỏi
a Làm thế nào lấy giá trị từ 2 nibble của PORT A
b Mã nguồn với chú thích
- Chuyển giá trị PORT A vào thanh ghi R17 -Lấy bù 1 R17 rồi chuyển giá trị thanh ghi R17 vào R18 và R19 -ANDI R18 với $F0 rồi SWAP R18
-ANDI R19 với $0F B.
.org 0 MAIN:
LDI R16,HIGH(RAMEND) OUT SPH,R16
LDI R16,LOW(RAMEND) OUT SPL,R16
LDI R16,$00 OUT DDRA,R16 ;PORTA input LDI R16,$FF
OUT PORTA,R16 ;Port A pull-up res
Trang 5OUT DDRB,R16 ;PORTB output LOOP:
IN R17,PINA ;SW=0 nhập COM R17 ;Lấy bù R17 MOV R18,R17
MOV R19,R17 ANDI R18,$F0 ;R18= 4bit cao SWAP R18
ANDI R19,$0F ;R19= 4bit thấp MUL R18,R19 ;R0=R18*R19 OUT PORTB,R0 ;R10 xuất ra PORTB RJMP LOOP
Trang 6add r20,r16
rjmp nipplehigh
nipplelowduong: pop r20 nipplehigh:
and r21,r18
cp r21,r18
brne nipplehighduong pop r21
add r21,r16
rjmp nhan
nipplehighduong: pop r21 nhan: muls r20,r21
out portb,r0
rjmp nhap
Trang 7BÀI 5
1 Trả lời các câu hỏi
a Khi Switch ở trạng thái nhấn/nhả, giá trị chân Port bằng bao nhiêu?
b Để LED sáng, chân port xuất ra mức logic gì?
c Mã nguồn với chú thích
a Khi Switch ở trạng thái nhấn/nhả, giá trị chân PORT bằng 1/0
b Để LED sáng, chân PORT xuất ra mức logic 1
SBIC PINA,0
RJMP CHECK
SBI PORTA,1
RET
Trang 8L AB 1-2
DELAY DÙNG LỆNH
BÀI 1
2 Trả lời các câu hỏi
f Chụp ảnh dạng xung trên PA0
g Tần số, thời gian tín hiệu bằng 1, thời gian tín hiệu bằng 0 là bao nhiêu?
h Giải thích kết quả đo được.
f.
Trang 9g Tần số, thời gian tín hiệu bằng 1, thời gian tín hiệu bằng 0 là bao nhiêu?
- Thời gian tín hiệu bằng 1: T1 = 2MC = 0.25µs
- Thời gian tín hiệu bằng 0: T0 = 4MC = 0.5µs
h Giải thích kết quả đo được
Thời gian tín hiệu bằng 0 trong một chu kì gấp đôi thời gian tín hiệu bằng 1 Vì tín hiệu bằng 0 xuất hiện sau khi thực hiện lệnh CBI PORTA,0 và kết thúc sau khi thực hiện lệnh SBI PORTA,0; giữa hai lệnh này có lệnh RJMP START làm cho thời gian tín hiệu ở mức 0 dài hơn
BÀI 2
2 Trả lời các câu hỏi
b Cách tính số chu kỳ máy để thực hiện chương trình con Delay1ms Trình bày hình ảnh mô phỏng
c Hình ảnh xung 1Khz trên PA0.
d Sai số là bao nhiêu?
3 Mã nguồn câu 2.c với chú thích
b
DELAY1MS:
LDI R16,200 ;1MC PUSH R15
PUSH R14
Trang 10MOV R15,R16 ;1MC nap data cho R15
➔ Thời gian Delay = 1ms
c Hình ảnh xung 1Khz trên PA0.
d Sai số là bao nhiêu?
Thời gian delay chính xác:
Trang 12BÀI 3
2 Trả lời các câu hỏi
c Mô tả kết nối trên kit thí nghiệm
d Theo như datasheet của 74HC595, tần số clock cao nhất mà nó có thể hoạt động được là bao nhiêu
e Nếu muốn mở rộng hiển thị ra 16 LED thì ta phải làm như thế nào?
f Mã nguồn với chú thích
c Mô tả kết nối trên kit thí nghiệm
Trang 13Theo datasheet của IC 74HC595, tần số clock cao nhất mà nó có thể hoạt động được thường được chỉ định là 100MHz
e.Nếu muốn mở rộng hiển thị ra 16 LED thì ta :
Kết nối chân dữ liệu (SER) của IC1 với chân ra của Arduino hoặc bất kỳ nguồn
dữ liệu nào khác Kết nối chân dữ liệu ra (Q7') của IC1 với chân dữ liệu vào
Trang 14(SER) của IC2 Kết nối các chân clock (SRCLK và RCLK) của cả hai IC với chân clock của Arduino hoặc bất kỳ nguồn clock nào khác Kết nối chân dữ liệu lập lại (SRCLR) của cả hai IC với điện áp hoặc terra nếu bạn không sử dụng chức năng này Kết nối chân thanh ghi (SRCLR) của cả hai IC với điện áp hoặc terra nếu bạn không sử dụng chức năng này Kết nối các chân nối tiếp (Q7 và Q7') của cả hai IC với LED hoặc transistors để điều khiển LED Kết nối các chân nối tiếp (Q7 và Q7') của cả hai IC với LED hoặc transistors để điều khiển LED f.Mã nguồn và chú thích
.def shiftData = r20 ; Define the shift data register
.equ clearSignalPort = PORTB ; Set clear signal port to PORTB
.equ clearSignalPin = 3 ; Set clear signal pin to pin 0 of PORTB
.equ shiftClockPort = PORTB ; Set shift clock port to PORTB
.equ shiftClockPin = 2 ; Set shift clock pin to pin 1 of PORTB
.equ latchPort = PORTB ; Set latch port to PORTB
.equ latchPin = 1 ; Set latch pin to pin 0 of PORTB
.equ shiftDataPort = PORTB ; Set shift data port to PORTB
.equ shiftDataPin = 0 ; Set shift data pin to pin 3 of PORTB
cbi clearSignalPort, clearSignalPin ; Set clear signal pin to low
; Wait for a short time
sbi clearSignalPort, clearSignalPin ; Set clear signal pin to high
ret
; Shift out data
shiftoutdata:
Trang 15ldi shiftData,0xFF
cbi shiftClockPort, shiftClockPin
LDI R25, 16; Shift 8 bits twice
sbi shiftClockPort, shiftClockPin
cbi shiftClockPort, shiftClockPin
sbi latchPort, latchPin ; Set latch pin to high
cbi latchPort, latchPin ; Set latch pin to low
Trang 16BÀI 1
1 Trả lời các câu hỏi
a LCD phân biệt command và data bằng cách nào?
b Ngoài cách đọc bit BUSY, còn cách nào để đảm bảo là LCD rảnh khi gửi dữ liệu/command?
c Mô tả kết nối trên kit thí nghiệm.
d Mã nguồn chương trình với chú thích
a LCD phân biệt command và data bằng cách nào?
➔ LCD phân biệt command và data thông qua bit RS: RS = 0 là command, RS =
1 là data
b Ngoài cách đọc bit BUSY, còn cách nào để đảm bảo là LCD rảnh khi gửi dữ liệu/command?
➔ Delay cho mỗi lần thực thi lệnh
c Mô tả kết nối trên kit thí nghiệm
Trang 17d Mã nguồn chương trình với chú thích
OUT DDRA, R16 ;PA7,6,5,4,2,1,0 is output
CBI PORTA, RS ;RS=0 (command)
CBI PORTA, RW ;RW=0 (write data)
CBI PORTA, EN ;Unenable LCD
CALL RESET_LCD
CALL INIT_LCD4
START:
CBI PORTA, RS
Trang 18LDI R17, $01 ;Clear display
Trang 19LDI R18, $28 ;Function set
LDI R19, $01 ;Clear display
LDI R20, $0C ;Display on, pointer off
Trang 21MOV R15, R16
LDI R16, 200LP1:
MOV R14, R16 LP2:
NOP DEC R14
3 Trả lời các câu hỏi
i Hiện tượng gì xảy ra khi không chống rung phím
j Mô tả cách kết nối trên kit thí nghiệm
Trang 22k Mã nguồn chương trình không chống rung phím và chú thích
Tương tự chống rung, bỏ 3 dòng này ở ctc WAIT_NHAN và ctc WAIT_NHA
OUT DDRA, R16 ;PortA is output LCD
OUT DDRC, R16 ;PortC is output Barled
CBI DDRB, 0
;PB0 is input
SBI PORTB, 0 ;dien tro keo len
Trang 23CBI PORTA, RS ;RS=0 (command)
CBI PORTA, RW ;RW=0 (write data)
CBI PORTA, EN ;Unenable LCD
;Cat hang don vi
MOV R18, R22 ;Lay phan nguyen chia 10 lan 2
;Cat hang chuc
MOV R18, R22 ;Lay phan nguyen chia 10 lan 3
CLR R22
L3:
INC R22
Trang 24LDI R18, $28 ;Function set
LDI R19, $01 ;Clear display
LDI R20, $0C ;Display on, pointer off
Trang 26BÀI 3
4 Trả lời các câu hỏi
e Cách kết nối các module trên bài thí nghiệm
Trang 27f Có hiện tượng rung phím đối với bàn phím ma trận hay không? Nếu có thì xử lý bằng cách nào?
-Không thấy hiện tượng rung ở bàn phím
Trang 28g Trình bày mã nguồn chương trình và chú thích
LDI R16,50 ;so lan nhan dang phim nhan
BACK1: RCALL SCANKEY ;gọi ctc nhan dang phim nhan BRCC KEY_RD ;C=0 phim chưa nhan lap lai
DEC R16 ;dem so lan nhan dang phim nhan
BRNE BACK1 ;lap vong cho du so lan dem
PUSH R17 ;xac nhan phim nhan, cat ma phim
WAIT_1: LDI R16,50 ;so lan nhan dang phim nha BACK2: RCALL SCANKEY ;gọi ctc nhan dang phim BRCS WAIT_1 ;C=1 phim chua nha
DEC R16 ;dem so lan nhan dang phim
BRNE BACK2 ;lap vong cho du so lan dem
POP R17 ;xac nhan phim nha lay lai ma phim
MOV R24,R17
RET
;SCANKEY doc trang thai cac phim,
;tra R24= ma phim và C=1 neu co phim nhan
;tra ve C=0 neu phim chua nhan
;
SCANKEY:
LDI R17,4 ;R17 dem so lan quet cot
LDI R20,0XFE ;bat dau quet cot 0
SCAN_COL:
OUT PORTA,R20
IN R19,PINA ;doc trang thai hang
IN R19,PINA ;doc lai trang thai hang
ANDI R19,0XF0 ;che 4 bit cao lay ma hang
CPI R19,0XF0 ;xem có phim nhan chua?
BRNE CHK_KEY ;R19 khác F0H: co phim nhan
LSL R20 ;quet cot ke tiep
INC R20 ;dat LSB=1
DEC R17
BRNE SCAN_COL ;tiep tuc quet het so cot
CLC ;phim chua nhan,C=0
MOV R24,R17
RJMP EXIT ;thoat
Trang 29CHK_KEY:
SUBI R17,4 ;tinh vi tri cot
NEG R17 ;bu 2 lay so duong
SWAP R19 ;đao sang 4 bit thap ma hang
LDI R20,4 ;quet 4 hang tim vi tri hang
SCAN_ROW: ; tim vi tri hang co phim dc nhan
ROR R19 ;quay phai ma hang qua C tim bit 0
BRCC SET_FLG ;C=0 dung vi tri hang co phim nhan INC R17 ;ko dung hang, tang vi tri hang them 4 INC R17
INC R17
INC R17
DEC R20
BRNE SCAN_ROW ;quet het 4 hang
CLC ;ko co phim nhan C=0
.EQU E=2 ;bit E
.EQU CR=$0D ;ma xuong dong
.EQU NULL=$00 ;ma ket thuc
CBI LCD,RW ;RW=PC1=0 truy xuat ghi
CBI LCD,E ;E=PC2=0 cam LCD
; khii tạo LCD gim:
;reset cap nguon ;cau hinh LCD hoat dong che do 4 bit ; -
Trang 30;kTra ky tu xuong dong
;tiep tuc hien thi line 1
DOWN: CBI LCD,RS ;RS=0 ghi lenh
LDI R17,$C5 ;con tro% line 2 vi tri 5
LPM R17,Z+ ;lay ma ASCII ky tu trong Flash ROM
CPI R17,NULL ;ktra ky tu ket thuc
BREQ TT ;ky tu null la ket thuc
SBI LCD,RS ;RS=1 ghi data hien thi LCD
RCALL OUT_LCD4_2 ;ghi ma ASCII ky tu ra LCD
INIT_LCD4: CBI LCD,RS ;RS=0 ghi lenh
LDI R17,0x28 ;che do giao tiep 8 bit, 2 line font 5x8 RCALL OUT_LCD4_2
CBI LCD,RS ;RS=0 ghi lenh
LDI R17,0x01 ;clear display
RCALL OUT_LCD4_2
LDI R16,20 ;cho 2ms sau lệnh Clear display
RCALL DELAY_US
;
Trang 31SWAP R17 ;đao 4 bit
;lấ8y 4 bit thấ8p chuyê%n thành cao
;HEX_ASC chuyen tu ma Hex sang ma ASCII
;Input R17=ma Hex,Output R18=ma ASCII