Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 22

Lab 1-1

giao tiếp I/O và các lệnh tính toán

MỤC TIÊU:

 Thực hiện các giao tiếp I/O Port, các lệnh tính toán

THAM KHẢO:

 Tài liệu hướng dẫn thí nghiệm, chương 1, 2


BÀI 1

a) Kết nối 1 port của AVR (VD PORT A) vào dip switch. Kết nối 1 port khác vào bar LED
(Ví dụ PORT B)
.include "m324pdef.inc" ; Sử dụng file định nghĩa cho vi điều khiển ATmega324P

.equ LED_PORT = PORTB ; Định nghĩa tên cho PORT kết nối với thanh LED
.equ SWITCH_PORT = PINA ; Định nghĩa tên cho PORT kết nối với Dip Switch

; Thiết lập thanh ghi để chứa dữ liệu từ Dip Switch và LED


.def dipSwitchData = r16
.def ledData = r17

.org 0x0000 ; Địa chỉ bắt đầu của chương trình

; Thiết lập các chân của PORT A là đầu vào


ldi r16, 0xFF ; 0xFF: Tất cả các chân của PORT A là đầu vào
out DDRA, r16 ; Thiết lập DDRA

; Thiết lập các chân của PORT B là đầu ra

https://doe.dee.hcmut.edu.vn/
Lab 1-1
giao tiếp I/O và các lệnh tính toán

ldi r16, 0xFF ; 0xFF: Tất cả các chân của PORT B là đầu ra
out DDRB, r16 ; Thiết lập DDRB

Main:
; Đọc trạng thái của Dip Switch từ PORT A
in dipSwitchData, SWITCH_PORT

; Gán giá trị của Dip Switch cho thanh LED


out LED_PORT, dipSwitchData

rjmp Main ; Lặp lại quá trình

.end ; Kết thúc chương trình


b) Viết chương trình đọc liên tục trạng thái của DIP Switch và gửi ra LED. Nếu Swich ở
trạng thái OFF, LED tương ứng sẽ tắt.
.include "m324pdef.inc" ; Sử dụng file định nghĩa cho vi điều khiển ATmega324P

.equ LED_PORT = PORTB ; Định nghĩa tên cho PORT kết nối với thanh LED
.equ SWITCH_PORT = PINA ; Định nghĩa tên cho PORT kết nối với Dip Switch

; Thiết lập thanh ghi để chứa dữ liệu từ Dip Switch và LED


.def dipSwitchData = r16
.def ledData = r17

https://doe.dee.hcmut.edu.vn/
Lab 1-1
giao tiếp I/O và các lệnh tính toán

.org 0x0000 ; Địa chỉ bắt đầu của chương trình

; Thiết lập các chân của PORT A là đầu vào


ldi r16, 0xFF ; 0xFF: Tất cả các chân của PORT A là đầu vào
out DDRA, r16 ; Thiết lập DDRA

; Thiết lập các chân của PORT B là đầu ra


ldi r16, 0xFF ; 0xFF: Tất cả các chân của PORT B là đầu ra
out DDRB, r16 ; Thiết lập DDRB

Main:
; Đọc trạng thái của DIP Switch từ PORT A
in dipSwitchData, SWITCH_PORT

; Kiểm tra trạng thái của từng bit trong dipSwitchData


; Nếu bit tương ứng là 0 (OFF), thì tắt LED tương ứng
ldi r16, 0x01 ; Khởi tạo mask cho bit thấp nhất
ldi r18, 8 ; Số lần lặp lại (8 bit)

CheckSwitchLoop:
tst dipSwitchData ; Kiểm tra bit thấp nhất của dipSwitchData
brne SwitchIsOn ; Nếu bit khác 0, nhảy đến SwitchIsOn

; Nếu bit là 0, tắt LED tương ứng

https://doe.dee.hcmut.edu.vn/
Lab 1-1
giao tiếp I/O và các lệnh tính toán

ldi ledData, 0x00 ; 0x00: Tắt LED


out LED_PORT, ledData

rjmp NextBit ; Nhảy đến NextBit

SwitchIsOn:
; Nếu bit là 1, bật LED tương ứng
ldi ledData, 0xFF ; 0xFF: Bật LED
out LED_PORT, ledData

NextBit:
; Dịch trái mask để kiểm tra bit tiếp theo
lsl dipSwitchData
dec r18 ; Giảm số lần lặp lại

; Nếu còn bit chưa kiểm tra hết, lặp lại quá trình
brne CheckSwitchLoop

rjmp Main ; Lặp lại quá trình

.end ; Kết thúc chương trình

BÀI 2

a) Viết chương trình đọc giá trị của Port đang nối với Dip Switch, cộng thêm 5 và gửi ra
Port đang nối với Bar LED.

https://doe.dee.hcmut.edu.vn/
Lab 1-1
giao tiếp I/O và các lệnh tính toán

.include "m324pdef.inc" ; Sử dụng file định nghĩa cho vi điều khiển ATmega324P

.equ LED_PORT = PORTB ; Định nghĩa tên cho PORT kết nối với thanh LED
.equ SWITCH_PORT = PINA ; Định nghĩa tên cho PORT kết nối với Dip Switch

.org 0x0000 ; Địa chỉ bắt đầu của chương trình

Main:
; Đọc giá trị từ Dip Switch từ PORT A
in r16, SWITCH_PORT

; Cộng thêm 5
ldi r17, 5
add r16, r17

; Gửi giá trị đã cộng 5 ra thanh LED (PORT B)


out LED_PORT, r16

rjmp Main ; Lặp lại quá trình

.end ; Kết thúc chương trình

b) Thay đổi trạng thái của Dip Switch và quan sát trạng thái Bar LED

https://doe.dee.hcmut.edu.vn/
Lab 1-1
giao tiếp I/O và các lệnh tính toán

Để thay đổi trạng thái của Dip Switch và quan sát trạng thái của thanh LED, cần thực hiện các
bước sau:
Kết nối Dip Switch vào PORTA và Bar LED vào PORTB trên vi điều khiển AVR ATmega324P.
Nạp chương trình vào vi điều khiển sử dụng Atmel Studio hoặc các công cụ tương tự.
Thay đổi trạng thái của Dip Switch và quan sát thanh LED để xem kết quả đã cộng thêm 5 được
hiển thị.

BÀI 3

a) Kết nối và thực hiện chương trình tính tích của 2 nibble cao và thấp của PORTAvà gửi ra
PORT B. Coi như 2 nibble này là 2 số không dấu

.include "m324pdef.inc" ; Sử dụng file định nghĩa cho vi điều khiển ATmega324P

.equ LED_PORT = PORTB ; Định nghĩa tên cho PORT kết nối với thanh LED
.equ NIBBLE_HIGH_MASK = 0xF0 ; Mask cho nibble cao (bảy ba một hai)
.equ NIBBLE_LOW_MASK = 0x0F ; Mask cho nibble thấp (không một một một)

.org 0x0000 ; Địa chỉ bắt đầu của chương trình

Main:
; Đọc giá trị của nibble cao và nibble thấp từ PORTA
in r16, PINA

; Lấy nibble cao và nibble thấp


ldi r17, NIBBLE_HIGH_MASK
and r16, r17 ; r16 chứa giá trị của nibble cao

https://doe.dee.hcmut.edu.vn/
Lab 1-1
giao tiếp I/O và các lệnh tính toán

ldi r18, NIBBLE_LOW_MASK


and r16, r18 ; r16 chứa giá trị của nibble thấp

; Thực hiện tích của hai nibble


mul r16, r17 ; Lưu kết quả vào thanh ghi 0 và 1

; Gửi kết quả ra PORTB


out LED_PORT, r0 ; Kết quả thấp (lưu trong thanh ghi 0)

rjmp Main ; Lặp lại quá trình

.end ; Kết thúc chương trình

b) VD: PORTA = 0b0111_1111, thì PORTB = 3*15.

.include "m324pdef.inc" ; Sử dụng file định nghĩa cho vi điều khiển ATmega324P

.equ LED_PORT = PORTB ; Định nghĩa tên cho PORT kết nối với thanh LED
.equ NIBBLE_LOW_MASK = 0x0F ; Mask cho nibble thấp (không một một một)

.org 0x0000 ; Địa chỉ bắt đầu của chương trình

Main:

https://doe.dee.hcmut.edu.vn/
Lab 1-1
giao tiếp I/O và các lệnh tính toán

; Đọc giá trị của nibble thấp từ PORTA


in r16, PINA

; Lấy nibble thấp


andi r16, NIBBLE_LOW_MASK ; r16 chứa giá trị của nibble thấp

; Thực hiện tích của nibble thấp với 3


ldi r17, 3
mul r16, r17 ; Lưu kết quả vào thanh ghi 0 và 1

; Gửi kết quả ra PORTB


out LED_PORT, r0 ; Kết quả thấp (lưu trong thanh ghi 0)

rjmp Main ; Lặp lại quá trình

.end ; Kết thúc chương trình

c) Thay đổi trạng thái của Dip Switch và quan sát trạng thái Bar LED

Sau khi nạp chương trình vào vi điều khiển, bạn có thể thay đổi trạng thái của Dip Switch và
quan sát trạng thái của thanh LED kết quả trên PORTB. Khi Dip Switch thay đổi, giá trị tích
được tính toán lại và gửi đến thanh LED để hiển thị.

BÀI 4

a) Kết nối và thực hiện chương trình tính tích của 2 nibble cao và thấp của PORTAvà gửi ra
PORT B. Coi như 2 nibble này là 2 số có dấu

https://doe.dee.hcmut.edu.vn/
Lab 1-1
giao tiếp I/O và các lệnh tính toán

.include "m324pdef.inc" ; Sử dụng file định nghĩa cho vi điều khiển ATmega324P

.equ LED_PORT = PORTB ; Định nghĩa tên cho PORT kết nối với thanh LED
.equ NIBBLE_HIGH_MASK = 0xF0 ; Mask cho nibble cao (bảy ba một hai)
.equ NIBBLE_LOW_MASK = 0x0F ; Mask cho nibble thấp (không một một một)

.org 0x0000 ; Địa chỉ bắt đầu của chương trình

Main:
; Đọc giá trị của nibble cao và nibble thấp từ PORTA
in r16, PINA

; Lấy nibble cao và nibble thấp


mov r17, r16 ; Sao chép giá trị của PORTA vào thanh ghi r17
andi r16, NIBBLE_HIGH_MASK ; Lấy nibble cao
lsr r16 ; Dịch phải để lấy nibble cao về vị trí đúng
andi r17, NIBBLE_LOW_MASK ; Lấy nibble thấp

; Thực hiện tích của hai nibble


call signed_multiply

; Gửi kết quả ra PORTB


out LED_PORT, r0 ; Kết quả thấp (lưu trong thanh ghi 0)

https://doe.dee.hcmut.edu.vn/
Lab 1-1
giao tiếp I/O và các lệnh tính toán

rjmp Main ; Lặp lại quá trình

; Phụ trợ: Thực hiện phép nhân có dấu


signed_multiply:
mov r26, r16 ; Sao chép nibble cao vào thanh ghi tạm r26
mov r27, r17 ; Sao chép nibble thấp vào thanh ghi tạm r27

; Thực hiện nhân nibble cao và nibble thấp


muls r26, r27

ret

.end ; Kết thúc chương trình

b) VD: PORTA = 0b0111_1111, thì PORTB = 3* (-1).

.include "m324pdef.inc" ; Sử dụng file định nghĩa cho vi điều khiển ATmega324P

.equ LED_PORT = PORTB ; Định nghĩa tên cho PORT kết nối với thanh LED
.equ NIBBLE_HIGH_MASK = 0xF0 ; Mask cho nibble cao (bảy ba một hai)
.equ NIBBLE_LOW_MASK = 0x0F ; Mask cho nibble thấp (không một một một)

.org 0x0000 ; Địa chỉ bắt đầu của chương trình

https://doe.dee.hcmut.edu.vn/
Lab 1-1
giao tiếp I/O và các lệnh tính toán

Main:
; Đọc giá trị của nibble cao và nibble thấp từ PORTA
ldi r16, 0b01111111 ; Set giá trị PORTA
mov r17, r16 ; Sao chép giá trị PORTA sang thanh ghi r17

; Lấy nibble cao và nibble thấp


ldi r18, NIBBLE_HIGH_MASK
and r16, r18 ; r16 chứa giá trị của nibble cao
ldi r19, NIBBLE_LOW_MASK
and r17, r19 ; r17 chứa giá trị của nibble thấp

; Thực hiện tích của hai nibble


mov r20, r16
mov r21, r17
call signed_multiply

; Gửi kết quả ra PORTB


out LED_PORT, r0 ; Kết quả thấp (lưu trong thanh ghi 0)

rjmp Main ; Lặp lại quá trình

; Phụ trợ: Thực hiện phép nhân có dấu


signed_multiply:

https://doe.dee.hcmut.edu.vn/
Lab 1-1
giao tiếp I/O và các lệnh tính toán

lsl r20 ; Shift trái thanh ghi 20 để lấy phần cao nhất của giá trị dấu
mov r22, r20 ; Sao chép phần cao nhất vào thanh ghi tạm r22
lsl r21 ; Shift trái thanh ghi 21 để nhân với phần thấp của giá trị dấu
clr r21 ; Xóa bit dấu của phần thấp của giá trị dấu

lsl r18 ; Shift trái thanh ghi 18 để lấy phần cao nhất của giá trị số
movw r24, r16 ; Sao chép giá trị số vào thanh ghi tạm r24:r25
lsl r25 ; Shift trái thanh ghi 25 để lấy phần cao nhất của giá trị số

mul r24, r22 ; Nhân phần cao nhất của giá trị số với phần cao nhất của giá trị dấu
movw r24, r0 ; Sao chép kết quả nhân vào thanh ghi tạm r24:r25

mul r18, r21 ; Nhân phần cao nhất của giá trị số với phần thấp của giá trị dấu
add r24, r0 ; Cộng kết quả nhân vào phần cao nhất của kết quả cuối cùng

clr r25 ; Xóa thanh ghi 25 để chuẩn bị cho phép cộng kế tiếp
mul r24, r21 ; Nhân phần thấp của giá trị số với phần thấp của giá trị dấu
add r25, r0 ; Cộng kết quả nhân vào phần thấp của kết quả cuối cùng

clr r26 ; Xóa thanh ghi 26 để kết thúc phép nhân

ret

.end ; Kết thúc chương trình

https://doe.dee.hcmut.edu.vn/
Lab 1-1
giao tiếp I/O và các lệnh tính toán

c) Thay đổi trạng thái của Dip Switch và quan sát trạng thái Bar LED

Sau khi nạp chương trình vào vi điều khiển, bạn có thể thay đổi trạng thái của Dip Switch và
quan sát trạng thái của thanh LED kết quả trên PORTB. Khi Dip Switch thay đổi, giá trị tích
được tính toán lại và gửi đến thanh LED để hiển thị.

BÀI 5

a) Kết nối PA0 vào 1 Switch đơn và PA1 vào 1 LED đơn trên khối LED (lưu ý là cùng 1
Port)

.include "m324pdef.inc" ; Sử dụng file định nghĩa cho vi điều khiển ATmega324P

.equ SWITCH_PIN = PINA0 ; Định nghĩa chân kết nối với switch là PA0
.equ LED_PIN = PORTA1 ; Định nghĩa chân kết nối với LED là PA1

.org 0x0000 ; Địa chỉ bắt đầu của chương trình

Main:
; Thiết lập PA0 là input (switch) và PA1 là output (LED)
ldi r16, (1<<SWITCH_PIN) ; Set bit tương ứng với SWITCH_PIN
ldi r17, (1<<LED_PIN) ; Set bit tương ứng với LED_PIN
ldi r18, ~(1<<SWITCH_PIN) ; Clear bit tương ứng với SWITCH_PIN
out DDRA, r18 ; Xóa bit tương ứng với SWITCH_PIN để thiết lập là input
out DDRA, r17 ; Set bit tương ứng với LED_PIN để thiết lập là output

https://doe.dee.hcmut.edu.vn/
Lab 1-1
giao tiếp I/O và các lệnh tính toán

Loop:
; Đọc trạng thái của switch từ PA0
in r19, PINA
sbrs r19, SWITCH_PIN ; Kiểm tra bit của switch, nếu bit bằng 0 (off)
rjmp SwitchOff ; Nhảy đến SwitchOff
sbi PORTA, LED_PIN ; Bật LED
rjmp Loop ; Lặp lại quá trình
SwitchOff:
cbi PORTA, LED_PIN ; Tắt LED
rjmp Loop ; Lặp lại quá trình

.end ; Kết thúc chương trình

b) Viết chương trình bật LED nếu SW nhấn, tắt LED nếu SW nhả.

.include "m324pdef.inc" ; Sử dụng file định nghĩa cho vi điều khiển ATmega324P

.equ SWITCH_PIN = PINA0 ; Định nghĩa chân kết nối với switch là PA0
.equ LED_PIN = PORTA1 ; Định nghĩa chân kết nối với LED là PA1

.org 0x0000 ; Địa chỉ bắt đầu của chương trình

https://doe.dee.hcmut.edu.vn/
Lab 1-1
giao tiếp I/O và các lệnh tính toán

Main:
; Thiết lập PA0 là input (switch) và PA1 là output (LED)
ldi r16, (1<<SWITCH_PIN) ; Set bit tương ứng với SWITCH_PIN
ldi r17, (1<<LED_PIN) ; Set bit tương ứng với LED_PIN
ldi r18, ~(1<<SWITCH_PIN) ; Clear bit tương ứng với SWITCH_PIN
out DDRA, r18 ; Xóa bit tương ứng với SWITCH_PIN để thiết lập là input
out DDRA, r17 ; Set bit tương ứng với LED_PIN để thiết lập là output

Loop:
; Đọc trạng thái của switch từ PA0
in r19, PINA
sbrs r19, SWITCH_PIN ; Kiểm tra bit của switch, nếu bit bằng 0 (off)
rjmp SwitchOff ; Nhảy đến SwitchOff nếu switch không được nhấn
sbi PORTA, LED_PIN ; Bật LED nếu switch được nhấn
rjmp Loop ; Lặp lại quá trình
SwitchOff:
cbi PORTA, LED_PIN ; Tắt LED nếu switch không được nhấn
rjmp Loop ; Lặp lại quá trình

.end ; Kết thúc chương trình

https://doe.dee.hcmut.edu.vn/
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

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.
; Lấy giá trị từ nibble cao của PORTA
ldi r16, 0xF0 ; Load mask để chỉ lấy 4 bit cao
in r17, PORTA ; Đọc giá trị từ PORTA
and r17, r16 ; Lấy chỉ 4 bit cao

; Lấy giá trị từ nibble thấp của PORTA


ldi r16, 0x0F ; Load mask để chỉ lấy 4 bit thấp
in r18, PORTA ; Đọc giá trị từ PORTA
and r18, r16 ; Lấy chỉ 4 bit thấp
b.
sbi PORTA, 0 ; Set bit 0 trong PORTA để enable pull-up
cbi DDRA, 0 ; Clear bit 0 trong DDRA để đặt chân 0 thành input
c.
Khi switch ở trạng thái ON (được kéo lên hoặc kết nối với nguồn điện), giá trị
chân PORT sẽ là HIGH (1). Khi switch ở trạng thái OFF (không kết nối với

https://doe.dee.hcmut.edu.vn/
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

nguồn điện), giá trị chân PORT sẽ là LOW (0)


d. Khi chân PORT ở trạng thái HIGH (1), BAR LED sẽ sáng. Khi chân PORT
ở trạng thái LOW (0), BAR LED sẽ tắt.
e.
. ; Load mask để chỉ lấy 4 bit cao
ldi r16, 0xF0
; Đọc giá trị từ PORTA
in r17, PORTA
; Lấy chỉ 4 bit cao
and r17, r16

; Load mask để chỉ lấy 4 bit thấp


ldi r16, 0x0F
; Đọc giá trị từ PORTA
in r18, PORTA
; Lấy chỉ 4 bit thấp
and r18, r16 ; Set bit 0 trong PORTA để enable pull-up
sbi PORTA, 0
; Clear bit 0 trong DDRA để đặt chân 0 thành input
cbi DDRA,
0 .......................................................................................................................
...

BÀI 2

https://doe.dee.hcmut.edu.vn/
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

1. Trả lời các câu hỏi


a. Mã nguồn với chú thích

..........................................................................................................................

BÀ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

a.
Để lấy giá trị từ 2 nibble của PORTA, ta cần thực hiện các bước sau:
Đầu tiên, ta sử dụng một mask để chỉ lấy các bit ở vị trí của nibble cần lấy.
Sau đó, đọc giá trị từ PORTA vào một thanh ghi.
Cuối cùng, thực hiện phép AND giữa giá trị đọc được và mask để lấy ra các
bit tương ứng với nibble đó.
b.
.include "m324pdef.inc" ; Sử dụng file định nghĩa cho vi điều khiển
ATmega324P

https://doe.dee.hcmut.edu.vn/
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

.org 0x0000 ; Địa chỉ bắt đầu của chương trình

Main:
; Lấy giá trị từ nibble cao của PORTA
ldi r16, 0xF0 ; Load mask để chỉ lấy 4 bit cao
in r17, PORTA ; Đọc giá trị từ PORTA
and r17, r16 ; Lấy chỉ 4 bit cao

; Lấy giá trị từ nibble thấp của PORTA


ldi r16, 0x0F ; Load mask để chỉ lấy 4 bit thấp
in r18, PORTA ; Đọc giá trị từ PORTA
and r18, r16 ; Lấy chỉ 4 bit thấp

; Tiếp tục xử lý...

rjmp Main ; Lặp lại quá trình

.end ; Kết thúc chương


trình......................................................................................................................
....

BÀI 4
1. Trả lời các câu hỏi

https://doe.dee.hcmut.edu.vn/
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

a. Mã nguồn với chú thích

..........................................................................................................................

BÀ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 (pressed), giá trị chân Port sẽ là LOW (0), vì
dòng điện được điều khiển trực tiếp từ nguồn tiếp xúc của Switch với đất
(GND). Khi Switch ở trạng thái nhả (released), giá trị chân Port sẽ là HIGH
(1), vì dòng điện sẽ được kéo lên mức logic HIGH thông qua điện trở pull-up
nội bộ hoặc ngoại bộ.
b. Để LED sáng, chân port cần xuất ra mức logic LOW (0). Trong một hệ
thống dùng LED thông thường (không sử dụng driver động), việc đưa chân
port xuất ra mức logic LOW sẽ làm cho dòng điện chạy qua LED và nó sẽ
phát sáng.
c. Dưới đây là mã nguồn Assembly AVR với chú thích cho việc đọc trạng thái
của Switch và bật LED tương ứng:
.include "m324pdef.inc" ; Sử dụng file định nghĩa cho vi điều khiển

https://doe.dee.hcmut.edu.vn/
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

ATmega324P

.equ SWITCH_PIN = PINA0 ; Định nghĩa chân kết nối với Switch
.equ LED_PIN = PORTB0 ; Định nghĩa chân kết nối với LED

.org 0x0000 ; Địa chỉ bắt đầu của chương trình

Main:
; Đọc trạng thái của Switch từ chân PORTA0
sbis PINA, SWITCH_PIN ; Kiểm tra xem Switch có ở trạng thái HIGH
(1) hay không
rjmp SwitchPressed ; Nếu Switch ở trạng thái HIGH, nhảy đến
SwitchPressed
rjmp SwitchReleased ; Nếu Switch ở trạng thái LOW, nhảy đến
SwitchReleased

SwitchPressed:
; Bật LED bằng cách đưa chân PORTB0 xuất ra mức logic LOW (0)
cbi PORTB, LED_PIN
rjmp Main

SwitchReleased:
; Tắt LED bằng cách đưa chân PORTB0 xuất ra mức logic HIGH (1)

https://doe.dee.hcmut.edu.vn/
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

sbi PORTB, LED_PIN


rjmp Main

.end ; Kết thúc chương


trình......................................................................................................................
....

https://doe.dee.hcmut.edu.vn/

You might also like