You are on page 1of 54

BÁO CÁO

Nhóm:
Nhóm môn học: Môn thí nghiệm:

Nhóm: 05
Nhóm môn học: L02
Môn thí nghiệm: Thí nghiệm vi xử lý
SV1: Nguyễn Minh Nhật
SV2: Hồng Châu Ngọc Tuấn
SV3: Nguyễn Đăng Khoa

BÀI 1
1. Trả lời các câu hỏi
a. Khoảng thời gian trễ lớn nhất có thể tạo ra bởi timer 0 với tần số 8Mhz là bao
nhiêu? Trình bày cách tính toán
Với Fosc = 8Mhz  Tosc = 0,125us
Ta có: TDL = n x Tosc x N.
Muốn TDL max thì nxN max  N = 1024 và n = 256.
Khi đó TDL = 256 x 0.125uS x 1024 = 0.032768 s

b. Khoảng thời gian trễ lớn nhất có thể tạo ra bởi timer 1 với tần số 8Mhz là bao
nhiêu? Trình bày cách tính toán
Với Fosc = 8Mhz  Tosc = 0,125us
Ta có: TDL = n x Tosc x N.
Muốn TDL max thì nxN max  N = 1024 và n = 2^15.
Khi đó TDL = 2^15 x 0.125uS x 1024  4,19 s

c. Trình bày cách tính prescaler và các giá trị nạp vào các thanh ghi của timer0 trong
bài thí nghiệm
Ở mode NOR các bit WGM03:WGM02:WGM01 = 000
Suy ra bit 1 và bit 0 của thanh ghi TCCR0A = 00 và bit 3
của thanh ghi TCCR0B = 0
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

Để chọn prescaler cho TDL = 1ms ta dùng công thức:


TDL = n x Tosc x prescal. Với Tosc = 0.125us
Prescaler của timer0 có các giá trị 1, 8, 64, 256, 1024. Ta
chọn lần lượt các giá trị này và tính n. Thấy rằng prescaler =
64 ta được kết quả n là 1 số nguyên 125 (điều này giúp ta dễ
nạp giá trị cho thanh ghi vì số không lẻ).
Với n =125 đồng nghĩa ta nạp giá trị -125 cho thanh ghi
TCNT0
Với prescaler = 64 đồng nghĩa 3 bit CS02:CS01:CS00 của
thanh ghi TCCR0B = 011
Vậy các giá trị của các thanh ghi trong timer 0 lần lượt là
TCNT0 = -125, TCCR0A = $00, TCCR0B = $03.
d. Mã nguồn chương trình với chú thích

.ORG 0

SBI DDRA, 0 // PA0 LA OUTPUT

LDI R16, 0
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

OUT TCCR0A, R16 // mode normal timer0

OUT TCCR0B, R16 // dung TIMER 0

MAIN:

SBI PORTA, 0

CALL DELAY_1MS

CBI PORTA, 0

CALL DELAY_1MS

RJMP MAIN

DELAY_1MS:

LDI R16, -125 // VALUE THAT TIMER 0 BEGIN COUNTER

OUT TCNT0, R16

LDI R16, $03

OUT TCCR0B, R16 // TIMER 0 RUN WITH PRESACLER IS 64

HERE:

SBIS TIFR0, TOV0 // CHECK TIMER 0 IS OCCURED OVERFLOW ?

RJMP HERE

SBI TIFR0, TOV0 // OCCURED OVERFLOW AND DELETE OVERFLOW


FLAG

LDI R16, 0

OUT TCCR0B, R16 // STOP TIMER 0

RET

BÀI 2
1. Trả lời các câu hỏi
a) Ở mode Normal, khi nào bit TOVx được set lên 1?
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

Khi timer tràn từ $FF  $00 hoặc $FFFF  $0000 thì cờ


TOVn set lên 1

b) Ở mode CTC, khi nào bit OCFx được set lên 1?


Khi timer đạt đến giá trị trong thanh ghi (OCRxA + 1) thì cờ
OCFxA lên 1
Khi timer đạt đến giá trị trong thanh ghi (OCRxB + 1) thì cờ
OCFxB lên 1

c) Giá trị các thanh ghi cấu hình cho timer 0 cho 2 trường hợp
Mode NOR TCNT0 = -125, TCCR0A = $00, TCCR0B = $03
Mode CTC OCR0A = 255, TCCR0A = $02, TCCR0B = $01
d) Viết chương trình tạo 1 xung vuông 64 us sử dụng timer 0 ở chế độ Normal
mode. Ngõ ra sử dụng chân OC0

.ORG 0

SBI DDRC, 0 // CONFIG PA3 IS OUTPUT

CLR R16

OUT TCCR0A, R16 // CONFIG TIMER 0 MODE NORMAL

OUT TCCR0B, R16

MAIN:

SBI PORTC,0

RCALL DELAY_32US

CBI PORTC,0

RCALL DELAY_32US

RJMP MAIN
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

DELAY_32US:

LDI R16, -31

OUT TCNT0, R16

LDI R16, (1 << CS01) // PRESCALER = 8

OUT TCCR0B, R16

LDI R16, (1 << COM0A0) | (1 << COM0B0) // SET OC0A


WHEN COMPARE MATCH

OUT TCCR0A, R16

WAIT:

SBIS TIFR0, TOV0

RJMP WAIT

SBI TIFR0, TOV0

RET
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

Viết chương trình thực hiện tạo xung vuông có chu kỳ 64 us sử dụng timer 1 ở chế độ CTC mode.
Ngõ ra sử dụng chân OC0.

.ORG 0

SBI DDRC,0

LP:

CBI PORTC,0

RCALL DELAY32US

SBI PORTC,0

RCALL DELAY32US

RJMP LP

DELAY32US:

LDI R17,0X00;

STS OCR1AH,R17

LDI R17,0X03;

STS OCR1AL,R17; ĐẶT TOP = 3

LDI R17,0X00
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

STS TCNT1H,R17; SET GIÁ TRỊ BAN ĐẦU=0

STS TCNT1L,R17; SET GIÁ TRỊ BAN ĐẦU=0

LDI R17,0X10

STS TCCR1A,R17; ĐẶT MODE CTC,

LDI R17,0X00

STS TCCR1B,R17; DỪNG TIMER0

LDI R17,0X03; N=64

STS TCCR1B,R17; BẮT ĐẦU CHẠY VỚI TCLK=8US

WAIT:

SBIS TIFR1,OCF1A

RJMP WAIT

SBI TIFR1,OCF1A

LDI R17,0X00

STS TCCR1B,R17; DỪNG TIMER,

RET
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

BÀI 3
1. Trả lời các câu hỏi
a. Dạng sóng trên oscilloscope (chụp và chèn vào)

b. Giải thích lý do có dạng sóng (tần số, chu kỳ làm việc, phase) như kết quả

BÀI 4
1. Trả lời các câu hỏi
a. Các mode làm việc của timer 0 ứng với các giá trị trên bảng
TH_1: Mode FPWM (TOP: $FF)
TH_2: Mode FPWM (TOP: OCR0A)
TH_3: Mode PCPWM (TOP: $FF)
2. Chụp ảnh các dạng sóng ứng với các mode làm việc và giải thích.
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

MODE FPWM : Điều chỉnh độ rộng xung nhanh

MODE PCPWM : Điều chỉnh độ rộng xung điều chỉnh pha


BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

BÀI 5
1. Trả lời các câu hỏi
a. Timer 0 làm việc ở mode nào?
Mode: CTC
b. Giá trị đưa vào các thanh ghi của timer 0 là bao nhiêu? Giải thích
TCCR0A: 0b00010010, TCCR0B: $03, OCR0A: các giá trị tính toán khi code
2. Trình bày mã nguồn với chú thích.

.ORG 0

RJMP MAIN

.ORG $100

MAIN: SBI DDRB, 4

MAIN1: SBI PORTB, 4

TT: RCALL DELAY1CHIA4MS

CBI PORTB, 4

LDI R18,3

T: RCALL DELAY1CHIA4MS

DEC R18

BRNE T

RJMP MAIN1

DELAY1CHIA4MS: LDI R17, 249

OUT OCR0A, R17

LDI R17, 0X02

OUT TCCR0A, R17

LDI R17,0X02

OUT TCCR0B, R17


BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

WAIT: IN R17, TIFR0

SBRS R17, OCF0A

RJMP WAIT

SBI TIFR0, OCF0A

LDI R17, 0

OUT TCCR0B, R17

RET

Kết nối OC0B vào kênh R của 1 LED RGB. Viết chương trình để tăng duty cycle trên OC0B từ
0% lên 100% rồi lại giảm xuống 0, sau 10 ms duty cycle tăng/giảm 1%.

.DEF SIGN_H = R19

.DEF SIGN_L = R20


BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

.ORG 0

RJMP MAIN

.ORG 0x40

MAIN:

LDI R22, 2 ;So lan lap cau a

LDI R23, 20 ;10ms

LDI R24, 0 ;Tang 1%

CLR R25 ;Change rule

LDI SIGN_H, 0

LDI SIGN_L, 125

LDI R16, HIGH(RAMEND)

OUT SPH, R16

LDI R16, HIGH(RAMEND)

OUT SPL, R16

SBI DDRB, 4 ;OC0B is output

LDI R16, (1<<WGM01) | (1<<COM0B0) ;Mode CTC dao bit OC0B khi dat kqua so sanh

OUT TCCR0A, R16

START:

RCALL CAU_C ;This line to change between a and c

CAU_C:

MOV R16, SIGN_H ;Gia tri khoi dong

WAVE_C:

OUT OCR0A, R16 ;Nap gia tri cho bo dem

LDI R16, (1<<CS01)|(1<<CS00);Mode CTC va Prescaler = 64

OUT TCCR0B, R16

WAIT_C_H:

IN R17, TIFR0 ;Doc gia tri thanh ghi bao tran


BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

SBRS R17, OCF0A ;Kiem tra co bao tran

RJMP WAIT_C_H ;Chua tran tiep tuc dem

OUT TIFR0, R17 ;Xoa co tran

MOV R16, SIGN_L

OUT OCR0A, R16

WAIT_C_L:

IN R17, TIFR0 ;Doc gia tri thanh ghi bao tran

SBRS R17, OCF0A ;Kiem tra co bao tran

RJMP WAIT_C_L ;Chua tran tiep tuc dem

OUT TIFR0, R17 ;Xoa co tran

DEC R23

BRNE AGAIN

LDI R23, 10

INC R24

CPI R24, 100 ;Khi duty dat 100%

BREQ CHANGE_RULE ;Thay doi viec cong tru cac thanh ghi

;Co bit0 cua R25 = 0 tang dutycycle tu 0 --> 100

CONTI:

SBRC R25, 0 ;Neu bang 1 giam dutycycle 100  0

RJMP CHANGE_VALUE

INC SIGN_H

DEC SIGN_L

RJMP AGAIN

CHANGE_RULE:

CLR R24

LDI R26,$01

EOR R25, R26


BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

RJMP CONTI

CHANGE_VALUE:

DEC SIGN_H

INC SIGN_L

AGAIN:

OUT OCR0A, SIGN_H

RJMP WAIT_C_H

RET

CAU_A:

LDI ZH, HIGH(DATA_A<<1)

LDI ZL, LOW(DATA_A<<1)

LDI R16, 20 ;Gia tri khoi dong

WAVE_A:

OUT OCR0A, R16 ;Nap gia tri cho bo


dem

LDI R16, (1<<CS01)|(1<<CS00) ;Mode CTC va Prescaler = 64

OUT TCCR0B, R16

WAIT_A:

IN R17, TIFR0 ;Doc gia tri thanh ghi bao tran

SBRS R17, OCF0A ;Kiem tra co bao tran

RJMP WAIT_A ;Chua tran tiep tuc dem

OUT TIFR0, R17 ;Xoa co tran

LPM R16, Z+

OUT OCR0A, R16

DEC R22

BRNE WAIT_A

LDI R22, 2
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

LDI ZH, HIGH(DATA_A<<1)

LDI ZL, LOW(DATA_A<<1)

RJMP WAIT_A

RET

DATA_A:

.DB 92, 30
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

BÀI 2
2. Trả lời các câu hỏi
a. Để có tần số quét là 50Hz, một LED sẽ sáng 1 lần trong bao lâu?
i. Khi tần số quét là 50Hz, thời gian giữa hai lần quét liên tiếp là
1/50 = 0.02 giây.
ii. Thời gian = 0.02 giây / 4 = 0.005 giây = 5 ms
b. Cấu hình timer như thế nào để có độ trễ này
i. Cấu hình timer0 mode NOR với giá trị nạp cho TCNT0 là -156
3. Mã nguồn và chú thích

.EQU OUTLED = PORTD

.EQU OUTLED_DDR = DDRD

.EQU SL_LED = PORTB

.EQU SL_LED_DDR = DDRB

.EQU nLE0 =PB0 ; CONTROL KEY LED

.EQU nLE1 =PB1 ; CONTROL SELECT LED

.include "m324PAdef.inc"

.ORG 0

RJMP MAIN

.ORG 40

MAIN:

SER R16

OUT OUTLED_DDR,R16

LDI R16,(1<<nLE0)|(1<<nLE1)

OUT SL_LED_DDR,R16

START:

RCALL SCAN_4LA
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

RJMP START

;------------------------------------------

SCAN_4LA:

LDI R18, 4 ;R18 số lần quét LED

LDI R19, 0xF7 ;mã quét led anode

;bắt đầu LED3 ( TRÁI QUA PHẢI)

CLR R20 ;TẠO THANH GHI TRUNG


GIAN DÙNG TRA BẢNG

LOOP:

LDI R17, 0xFF ;làm tối các đèn

OUT OUTLED, R17

SBI SL_LED , nLE1 ;mở U5

CBI SL_LED ,nLE1 ;khóa U5 // XUẤT MÃ ĐK CHỌN LED


// TẮT HẾT LED

MOV R17,R20

RCALL GET_7SEG ;lấy mã 7 đoạn

OUT OUTLED, R17 ;xuất mã 7 đoạn

SBI SL_LED ,nLE0 ;mở U4 // ĐỂ XUẤT MÃ LED7


ĐOẠN

CBI SL_LED ,nLE0 ;khóa U4

INC R20

OUT OUTLED, R19 ;xuất mã quét anode LED

SBI SL_LED ,nLE1 ;mở U5

CBI SL_LED ,nLE1 ;khóa U5 // XUẤT MÃ LÀM SÁNG


LED

RCALL DELAY_5MS ;tạo trễ 5ms sáng đèn

SEC ;C=1 chuẩn bị quay trái GÁN VÀO


LẦN KẾ TIẾP F7 THÀNH FE THÀNH FD.....

ROR R19 ;mã quét anode kế tiếp


BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

DEC R18 ;đếm số lần quét

BRNE LOOP ;thoát khi quét đủ 4 lần

RET

;------------------------------------------------------------

; Define delay function using Timer0 in CTC mode with CLK/1024

DELAY_5MS:

PUSH R17

PUSH R16

LDI R16,39-1 ; TOP

OUT OCR0A,R16 ;GIA TRI SO SANH


KENH A

LDI R16, (1 << WGM01)

OUT TCCR0A,R16

LDI R16,(1 << CS02) | (1 << CS00)

OUT TCCR0B,R16 ;SETUP CHE DO CTC (010),


PRESCALER = 1024

WAIT:SBIS TIFR0,OCF0A ;chờ cờ OCF0A=1 báo kết quả so sánh


kênh A 2/1MC

RJMP WAIT ;cờ OCF0A=0 tiếp tục chờ 2MC

SBI TIFR0,OCF0A ;OCF0A=1 xóa cờ OCF0A 2MC */

POP R16

POP R17

RET

;-----------------------------------------

GET_7SEG:

LDI ZH, HIGH(TAB_7SA<<1)

LDI ZL, LOW(TAB_7SA<<1)

ADD R30, R17 ;cộng offset vào ZL


BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

LDI R17, 0

ADC R31, R17 ;cộng carry vào ZH

LPM R17, Z ;lấy mã 7 đoạn

RET

;-------------------------------------------

TAB_7SA:

.DB 0xC0, 0xF9, 0xA4, 0xB0

BÀI 3
2. Trả lời các câu hỏi

a. Giá trị PORTA * 9 là số có bao nhiêu bit

Khi tính toán PORTA * 9, kết quả tối đa có thể đạt được là 255 * 9 = 2295, và kết quả này cần
tối thiểu 12 bit để biểu diễn.Trong trường hợp này, ta cần sử dụng thanh ghi 16-bit để lưu trữ kết
quả, bất kể số lượng bit cần thiết để biểu diễn kết quả. Tuy nhiên, vì ta chỉ sử dụng 11 bit để tính
toán, nên chỉ cần 16 bit để lưu trữ kết quả. Các bit còn lại của thanh ghi 16-bit này sẽ không
được sử dụng và được giữ giá trị bằng 0 hoặc 1 tùy thuộc vào kiến trúc của vi xử lý.
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

b. Làm thế nào để hiển thị từng chữ số lên 4 LED?


Đưa hàng nghìn, hàng trăm, hàng chục của kết quả vào 4 ô nhớ liên tiếp sau đó dùng chương
trình hiển thị LED 7 đoạn ở bài 2 chỉnh sửa cách lấy giá trị từ bộ nhớ (bài 2 ta lấy giá trị hiển
thị trong bộ nhớ ROM, ở bài này ta lấy giá trị trong RAM để tham chiếu đến bảng tra được
lưu trong ROM và lấy giá trị cần hiển thị ra) và đưa kết quả hiển thị ra LED 7 đoạn.
3. Mã nguồn và chú thích

.ORG 0

TABLE_7SEG_DATA:

.DB 0XC0, 0XF9, 0XA4, 0XB0, 0X99, 0X92, 0X82, 0XF8, 0X80,
0X90, 0X88, 0X83, 0XC6, 0XA1, 0X86, 0X8E

TABLE_7SEG_CONTROL:

.DB 0b00000111, 0b00001011, 0b00001101, 0b00001110

.DEF INPUT = R21

.DEF ANSL = R0 ;To hold low-byte of answer

.DEF ANSH = R1 ;To hold high-byte of answer

.DEF REML = R2 ;To hold low-byte of remainder

.DEF REMH = R3 ;To hold high-byte of remainder

.DEF AL = R16 ;To hold low-byte of dividend

.DEF AH = R17 ;To hold high-byte of dividend

.DEF BL = R18 ;To hold low-byte of divisor

.DEF BH = R19 ;To hold high-byte of divisor

.DEF C = R20 ;Bit Counter

.EQU DIP_SW_PORT = PORTA

.EQU DIP_SW_DIR = DDRA


BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

.EQU DIP_SW_PIN = PINA

.EQU LED_7SEG_PORT = PORTD

.EQU LED_7SEG_DIR = DDRD

.EQU LED_7SEG_LATCH_PORT = PORTB

.EQU LED_7SEG_LATCH_DIR = DDRB

.EQU nLE0_PIN = PB0

.EQU nLE1_PIN = PB1

;INIT LED_7_SEG_PORT

LDI R20, 0xFF

OUT LED_7SEG_DIR, R20

ORI R20, (1 << nLE0_PIN) | (1 << nLE1_PIN)

OUT LED_7SEG_LATCH_DIR, R20

;INIT DIP SWITCH

CLR R20

OUT DIP_SW_DIR, R20

SER R20

OUT DIP_SW_PORT, R20

;INIT TIM0 NORMAL MODE

CLR R16

OUT TCCR0A, R16

OUT TCCR0B, R16


BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

;INIT START INDEX

CLR R26

CLR R27

CLR R18

MAIN:

RCALL MUL_PORTA_9

MOV R27, R4

RCALL DISPLAY_7SEG

INC R26

RCALL DELAY5MS

MOV R27, R5

RCALL DISPLAY_7SEG

INC R26

RCALL DELAY5MS

MOV R27, R6

RCALL DISPLAY_7SEG

INC R26

RCALL DELAY5MS

MOV R27, R7

RCALL DISPLAY_7SEG

RCALL DELAY5MS

CLR R26
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

RJMP MAIN

DELAY5MS:

LDI R19, 0xC2

OUT TCNT0, R19

LDI R19, (1 << CS00) | (1 << CS01)

OUT TCCR0B, R19

WAIT:

IN R17, TIFR0

SBRS R17, TOV0

RJMP WAIT

OUT TIFR0, R17

RET

DISPLAY_7SEG:

SER R16

OUT LED_7SEG_PORT, R16

SBI LED_7SEG_LATCH_PORT, 5

CBI LED_7SEG_LATCH_PORT, 5

SBI LED_7SEG_LATCH_PORT, nLE1_PIN

PUSH R16

LDI ZH, HIGH(TABLE_7SEG_DATA << 1)

LDI ZL, LOW(TABLE_7SEG_DATA << 1)

CLR R16

ADD R30, R27


BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

ADC R31, R16

LPM R16, Z

OUT LED_7SEG_PORT, R16

SBI LED_7SEG_LATCH_PORT, nLE0_PIN

NOP

CBI LED_7SEG_LATCH_PORT, nLE0_PIN

LDI ZH, HIGH(TABLE_7SEG_CONTROL << 1)

LDI ZL, LOW(TABLE_7SEG_CONTROL << 1)

CLR R16

ADD R30, R26

ADC R31, R16

LPM R16, Z

OUT LED_7SEG_PORT, R16

NOP

CBI LED_7SEG_LATCH_PORT, nLE1_PIN

POP R16

RET

MUL_PORTA_9:

IN INPUT, DIP_SW_PIN

PUSH R16

LDI R16, 9

MUL INPUT, R16

MOV AL, R0

MOV AH, R1

RCALL DIV1616
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

MOV R7, REML ;DIGIT 1

MOV AL, R0

MOV AH, R1

RCALL DIV1616

MOV R6, REML ;DIGIT 2

MOV AL, R0

MOV AH, R1

RCALL DIV1616

MOV R5, REML ;DIGIT 3

MOV AL, R0

MOV AH, R1

RCALL DIV1616

MOV R4, REML ;DIGIT 4

POP R16

RET

DIV1616:

PUSH AL

PUSH AH

PUSH BL

PUSH BH

PUSH C

LDI BL,LOW(10) ;Load low-byte of divisor into BL

LDI BH,HIGH(10) ;Load high-byte of divisor into BH


BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

MOVW ANSH:ANSL,AH:AL ;Copy dividend into answer

LDI C,17 ;Load bit counter

SUB REML,REML ;Clear Remainder and Carry

CLR REMH ;

LOOP: ROL ANSL ;Shift the answer to the left

ROL ANSH ;

DEC C ;Decrement Counter

BREQ DONE ;Exit if sixteen bits done

ROL REML ;Shift remainder to the left

ROL REMH ;

SUB REML,BL ;Try to subtract divisor from


remainder

SBC REMH,BH

BRCC SKIP ;If the result was negative then

ADD REML,BL ;reverse the subtraction to try again

ADC REMH,BH ;

CLC ;Clear Carry Flag so zero shifted


into A

RJMP LOOP ;Loop Back

SKIP: SEC ;Set Carry Flag to be shifted into A

RJMP LOOP

DONE:

POP C

POP BH

POP BL

POP AH

POP AL
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

RET

.DB 0XC6,0XA1,0X86,0X8E
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

BÀI 4
1. Trả lời các câu hỏi
a. Mô tả kết nối trên kit
b. Để có tần số quét 25Hz thì một cột LED sáng trong bao lâu?
i. Thời gian một chu kỳ quét (period) được tính bằng công thức:
+ period = 1 / tần số quét
ii. Với tần số quét là 25Hz, ta có:
+ period = 1 / 25 = 0.04 giây.
iii. Do đó, thời gian một cột LED sáng trong ma trận được tính bằng
công thức:
+ Thời gian một cột LED sáng = period / n
iv. Với LED ma trận 8x8 nên ta có n=8
v. Thời gian một cột LED sáng = 0.04 giây / 8 = 0.005 giây = 5 ms
c. Sự khác nhau khi quét ở tần số 25Hz và 125Hz
Với tần số quét 25Hz, thời gian giữa hai lần quét liên tiếp là 1/25 = 0.04 giây. Trong
khoảng thời gian đó, các LED trong ma trận sẽ được kích hoạt và sáng tuần tự theo thứ tự
quét. Vậy mỗi LED trong ma trận sẽ sáng trong khoảng thời gian 0.04 giây / số lượng LED.
Nếu số lượng LED trong ma trận là 64, thì mỗi LED sẽ sáng trong khoảng 0.04 giây / 64 =
0.000625 giây = 625 micro-giây
Tuy nhiên, với tần số quét 125Hz, thời gian giữa hai lần quét liên tiếp là 1/125 = 0.008 giây.
Khi đó, thời gian mỗi LED được kích hoạt và sáng sẽ là 0.008 giây / số lượng LED. Với
cùng một ma trận LED có 64 LED, thì mỗi LED sẽ sáng trong khoảng thời gian 0.008 giây /
64 = 0.000125 giây = 125 micro-giây.

2. Mã nguồn chương trình với chú thích


.include "m324padef.inc" ; Include Atmega324pa definitions

.org 0x0000 ; interrupt vector table


BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

.INCLUDE "M324PADEF.INC"

.ORG 0X0000

RJMP RESET_HANDLER

.ORG 0X001A

RJMP TIMER1_COMP_ISR

RESET_HANDLER:

LDI R16, HIGH(RAMEND)

OUT SPH, R16

LDI R16, LOW(RAMEND)

OUT SPL, R16

CALL SHIFTREGISTER_INITPORT

CALL SHIFTREGISTER_CLEARDATA

CALL INITTIMER1CTC

SEI

CALL LEDMATRIX_PORTINIT

MAIN:

JMP MAIN

.EQU CLEARSIGNALPORT = PORTB

.EQU CLEARSIGNALPIN = 3

.EQU SHIFTCLOCKPORT = PORTB

.EQU SHIFTCLOCKPIN = 2

.EQU LATCHPORT = PORTB


BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

.EQU LATCHPIN = 1

.EQU SHIFTDATAPORT = PORTB

.EQU SHIFTDATAPIN = 0

SHIFTREGISTER_INITPORT:

PUSH R24

LDI R24,
(1<<CLEARSIGNALPIN)|(1<<SHIFTCLOCKPIN)|(1<<LATCHPIN)|(1<<SHIFTDATAPIN)
;

OUT DDRB, R24

POP R24

RET

SHIFTREGISTER_CLEARDATA:

CBI CLEARSIGNALPORT, CLEARSIGNALPIN


;

SBI CLEARSIGNALPORT, CLEARSIGNALPIN

RET

SHIFTREGISTER_SHIFTOUTDATA:

PUSH R18

CBI SHIFTCLOCKPORT, SHIFTCLOCKPIN

LDI R18, 8

SHIFTLOOP:

SBRC R27, 7

SBI SHIFTDATAPORT, SHIFTDATAPIN

SBI SHIFTCLOCKPORT, SHIFTCLOCKPIN

LSL R27

CBI SHIFTCLOCKPORT, SHIFTCLOCKPIN


BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

CBI SHIFTDATAPORT, SHIFTDATAPIN

DEC R18

BRNE SHIFTLOOP

SBI LATCHPORT, LATCHPIN

CBI LATCHPORT, LATCHPIN

POP R18

RET

LEDMATRIX_COL_CONTROL: .DB 0X80, 0X40, 0X20, 0X10, 0X08, 0X04, 0X02,


0X01

LEDMATRIX_FONT_A: .DB 0B11111100, 0B00010010, 0B00010001,


0B00010001, 0B00010010, 0B11111100, 0B00000000, 0B00000000

.EQU LEDMATRIXPORT = PORTD

.EQU LEDMATRIXDIR = DDRD

.DSEG

.ORG SRAM_START

LEDMATRIXBUFFER : .BYTE 8

LEDMATRIXCOLINDEX : .BYTE 1

.CSEG

.ALIGN 2

LEDMATRIX_PORTINIT:

PUSH R20

PUSH R21

LDI R20, 0B11111111

OUT LEDMATRIXDIR, R20


BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

LDI R20,0

LDI R31,HIGH(LEDMATRIXCOLINDEX)

LDI R30,LOW(LEDMATRIXCOLINDEX)

ST Z,R20

LDI R20,0

LDI R31,HIGH(LEDMATRIX_FONT_A << 1)

LDI R30,LOW(LEDMATRIX_FONT_A << 1)

LDI R29,HIGH(LEDMATRIXBUFFER)

LDI R28,LOW(LEDMATRIXBUFFER)

LDI R20,8

LEDMATRIX_PORTINIT_LOOP:

LPM R21,Z+

ST Y+,R21

DEC R20

CPI R20,0

BRNE LEDMATRIX_PORTINIT_LOOP

POP R21

POP R20

RET

LEDMATRIX_DISPLAY_COL:

PUSH R16

PUSH R27

CLR R16

OUT LEDMATRIXPORT,R16

CALL SHIFTREGISTER_SHIFTOUTDATA
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

LDI R31,HIGH(LEDMATRIX_COL_CONTROL << 1)

LDI R30,LOW(LEDMATRIX_COL_CONTROL << 1)

CLR R16

ADD R30,R26

ADC R31,R16

LPM R27,Z

OUT LEDMATRIXPORT,R27

POP R27

POP R16

RET

INITTIMER1CTC:

PUSH R16

LDI R16, HIGH(1250)

STS OCR1AH, R16

LDI R16, LOW(1250)

STS OCR1AL, R16

LDI R16, (1 << CS12)| (1<< WGM12) ;

STS TCCR1B, R16 ;

LDI R16, (1 << OCIE1A);

STS TIMSK1, R16

POP R16

RET

TIMER1_COMP_ISR:

PUSH R16
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

PUSH R26

PUSH R27

LDI R31,HIGH(LEDMATRIXCOLINDEX)

LDI R30,LOW(LEDMATRIXCOLINDEX)

LD R16,Z

MOV R26,R16

LDI R31,HIGH(LEDMATRIXBUFFER)

LDI R30,LOW(LEDMATRIXBUFFER)

ADD R30,R16

CLR R16

ADC R31,R16

LD R27,Z

CALL LEDMATRIX_DISPLAY_COL

INC R26

CPI R26,8

BRNE TIMER1_COMP_ISR_CONT

LDI R26,0

TIMER1_COMP_ISR_CONT:

LDI R31,HIGH(LEDMATRIXCOLINDEX)

LDI R30,LOW(LEDMATRIXCOLINDEX)

ST Z,R26

POP R27

POP R26

POP R16

RETI
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

a) Chỉnh sửa chương trình để đạt tần số quét là 125Hz.

.INCLUDE "M324PADEF.INC"

.ORG 0X0000

RJMP RESET_HANDLER

.ORG 0X001A

RJMP TIMER1_COMP_ISR

RESET_HANDLER:

LDI R16, HIGH(RAMEND) //THIẾT LẬP ĐỊA CHỈ DATA

OUT SPH, R16

LDI R16, LOW(RAMEND)

OUT SPL, R16

CALL SHIFTREGISTER_INITPORT

CALL SHIFTREGISTER_CLEARDATA

CALL INITTIMER1CTC

SEI

CALL LEDMATRIX_PORTINIT

MAIN:

JMP MAIN

.EQU CLEARSIGNALPORT = PORTB // THIẾT LẬP CÁC PORT

.EQU CLEARSIGNALPIN = 3 // Ở J15

.EQU SHIFTCLOCKPORT = PORTB

.EQU SHIFTCLOCKPIN = 2
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

.EQU LATCHPORT = PORTB

.EQU LATCHPIN = 1

.EQU SHIFTDATAPORT = PORTB

.EQU SHIFTDATAPIN = 0

SHIFTREGISTER_INITPORT:

PUSH R24

LDI R24,
(1<<CLEARSIGNALPIN)|(1<<SHIFTCLOCKPIN)|(1<<LATCHPIN)|(1<<SHIFTDATAPIN)
;

OUT DDRB, R24

POP R24

RET

SHIFTREGISTER_CLEARDATA:

CBI CLEARSIGNALPORT, CLEARSIGNALPIN


;

SBI CLEARSIGNALPORT, CLEARSIGNALPIN

RET

SHIFTREGISTER_SHIFTOUTDATA:

PUSH R18

CBI SHIFTCLOCKPORT, SHIFTCLOCKPIN

LDI R18, 8

SHIFTLOOP:

SBRC R27, 7

SBI SHIFTDATAPORT, SHIFTDATAPIN

SBI SHIFTCLOCKPORT, SHIFTCLOCKPIN

LSL R27
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

CBI SHIFTCLOCKPORT, SHIFTCLOCKPIN

CBI SHIFTDATAPORT, SHIFTDATAPIN

DEC R18

BRNE SHIFTLOOP

SBI LATCHPORT, LATCHPIN

CBI LATCHPORT, LATCHPIN

POP R18

RET

//CÁC GIÁ TRỊ CỦA LED MA TRẬN

LEDMATRIX_COL_CONTROL: .DB 0X80, 0X40, 0X20, 0X10, 0X08, 0X04, 0X02,


0X01

LEDMATRIX_FONT_A: .DB 0B11111100, 0B00010010, 0B00010001,


0B00010001, 0B00010010, 0B11111100, 0B00000000, 0B00000000

.EQU LEDMATRIXPORT = PORTD //PORTD NỐI VỚI J38

.EQU LEDMATRIXDIR = DDRD

.DSEG

.ORG SRAM_START

LEDMATRIXBUFFER : .BYTE 8

LEDMATRIXCOLINDEX : .BYTE 1

.CSEG

.ALIGN 2

LEDMATRIX_PORTINIT:

PUSH R20

PUSH R21

LDI R20, 0B11111111


BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

OUT LEDMATRIXDIR, R20

LDI R20,0

LDI R31,HIGH(LEDMATRIXCOLINDEX)

LDI R30,LOW(LEDMATRIXCOLINDEX)

ST Z,R20

LDI R20,0

LDI R31,HIGH(LEDMATRIX_FONT_A << 1)

LDI R30,LOW(LEDMATRIX_FONT_A << 1)

LDI R29,HIGH(LEDMATRIXBUFFER)

LDI R28,LOW(LEDMATRIXBUFFER)

LDI R20,8

LEDMATRIX_PORTINIT_LOOP:

LPM R21,Z+

ST Y+,R21

DEC R20

CPI R20,0

BRNE LEDMATRIX_PORTINIT_LOOP

POP R21

POP R20

RET

LEDMATRIX_DISPLAY_COL:

PUSH R16

PUSH R27

CLR R16

OUT LEDMATRIXPORT,R16
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

CALL SHIFTREGISTER_SHIFTOUTDATA

LDI R31,HIGH(LEDMATRIX_COL_CONTROL << 1)

LDI R30,LOW(LEDMATRIX_COL_CONTROL << 1)

CLR R16

ADD R30,R26

ADC R31,R16

LPM R27,Z

OUT LEDMATRIXPORT,R27

POP R27

POP R16

RET

INITTIMER1CTC: //THIẾT LẬP TIMER1

PUSH R16

LDI R16, HIGH(31) //DO DELAY 1MS VÀ CHIA 256 NÊN CẦN PHẢI
THIẾT LẬP 16 XUNG. 250/8=31

STS OCR1AH, R16

LDI R16, LOW(31)

STS OCR1AL, R16

LDI R16, (1 << CS12)| (1<< WGM12) ;

STS TCCR1B, R16 ;

LDI R16, (1 << OCIE1A);

STS TIMSK1, R16

POP R16

RET

//KHỞI TẠO NGẮT TIMER1


BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

TIMER1_COMP_ISR:

PUSH R16

PUSH R26

PUSH R27

LDI R31,HIGH(LEDMATRIXCOLINDEX)

LDI R30,LOW(LEDMATRIXCOLINDEX)

LD R16,Z

MOV R26,R16

LDI R31,HIGH(LEDMATRIXBUFFER)

LDI R30,LOW(LEDMATRIXBUFFER)

ADD R30,R16

CLR R16

ADC R31,R16

LD R27,Z

CALL LEDMATRIX_DISPLAY_COL

INC R26

CPI R26,8

BRNE TIMER1_COMP_ISR_CONT

LDI R26,0

TIMER1_COMP_ISR_CONT:

LDI R31,HIGH(LEDMATRIXCOLINDEX)

LDI R30,LOW(LEDMATRIXCOLINDEX)

ST Z,R26

POP R27
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

POP R26

POP R16

RETI
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

PHẦN LÀM THÊM

Hiển thị MSSV:


BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

.EQU OUTLED = PORTD

.EQU OUTLED_DDR = DDRD

.EQU SL_LED = PORTB

.EQU SL_LED_DDR = DDRB

.EQU nLE0 =PB0 ; CONTROL KEY LED

.EQU nLE1 =PB1 ; CONTROL SELECT LED

.include "m324PAdef.inc"

.ORG 0

RJMP MAIN

.ORG 40

MAIN:

SER R16

OUT OUTLED_DDR,R16

LDI R16,(1<<nLE0)|(1<<nLE1)

OUT SL_LED_DDR,R16

START:
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

RCALL SCAN_4LA

RJMP START

;------------------------------------------

SCAN_4LA:

LDI R18, 4 ;R18 số lần quét LED

LDI R19, 0xF7 ;mã quét led anode

;bắt đầu LED3 ( TRÁI QUA PHẢI)

CLR R20 ;TẠO THANH GHI TRUNG GIAN DÙNG TRA BẢNG

LOOP:

LDI R17, 0xFF ;làm tối các đèn

OUT OUTLED, R17

SBI SL_LED , nLE1 ;mở U5

CBI SL_LED ,nLE1 ;khóa U5 // XUẤT MÃ ĐK CHỌN LED // TẮT HẾT LED

MOV R17,R20

RCALL GET_7SEG ;lấy mã 7 đoạn

OUT OUTLED, R17 ;xuất mã 7 đoạn

SBI SL_LED ,nLE0 ;mở U4 // ĐỂ XUẤT MÃ LED7 ĐOẠN

CBI SL_LED ,nLE0 ;khóa U4

INC R20

OUT OUTLED, R19 ;xuất mã quét anode LED

SBI SL_LED ,nLE1 ;mở U5

CBI SL_LED ,nLE1 ;khóa U5 // XUẤT MÃ LÀM SÁNG LED

RCALL DELAY_5MS ;tạo trễ 5ms sáng đèn

SEC ;C=1 chuẩn bị quay trái GÁN VÀO LẦN KẾ TIẾP F7 THÀNH FE
THÀNH FD.....

ROR R19 ;mã quét anode kế tiếp

DEC R18 ;đếm số lần quét


BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

BRNE LOOP ;thoát khi quét đủ 4 lần

RET

;------------------------------------------------------------

; Define delay function using Timer0 in CTC mode with CLK/1024

DELAY_5MS:

PUSH R17

PUSH R16

LDI R16,39-1 ; TOP

OUT OCR0A,R16 ;GIA TRI SO SANH KENH A

LDI R16, (1 << WGM01)

OUT TCCR0A,R16

LDI R16,(1 << CS02) | (1 << CS00)

OUT TCCR0B,R16 ;SETUP CHE DO CTC (010), PRESCALER = 1024

WAIT:SBIS TIFR0,OCF0A ;chờ cờ OCF0A=1 báo kết quả so sánh kênh A 2/1MC

RJMP WAIT ;cờ OCF0A=0 tiếp tục chờ 2MC

SBI TIFR0,OCF0A ;OCF0A=1 xóa cờ OCF0A 2MC */

POP R16

POP R17

RET

;-----------------------------------------

GET_7SEG:

LDI ZH, HIGH(TAB_7SA<<1)

LDI ZL, LOW(TAB_7SA<<1)

ADD R30, R17 ;cộng offset vào ZL

LDI R17, 0

ADC R31, R17 ;cộng carry vào ZH

LPM R17, Z ;lấy mã 7 đoạn


BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

RET

;-------------------------------------------

TAB_7SA:

.DB 0XF9, 0x92, 0xA4, 0x90 4 số cuối MSSV: 5129


.DB 0XF9, 0x90, 0xA4, 0xB0 4 số cuối MSSV: 1923
.DB 0X92, 0xf9, 0x82, 0Xf8 4 số cuối MSSV: 5167

Hiển thị số nhóm:

.DB 0XC0, 0Xc0, 0xc0, 0X92


BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

.INCLUDE "M324PADEF.INC"

.ORG 0X0000

RJMP RESET_HANDLER

.ORG 0X001A

RJMP TIMER1_COMP_ISR

RESET_HANDLER:

LDI R16, HIGH(RAMEND) //THIẾT LẬP ĐỊA CHỈ DATA

OUT SPH, R16

LDI R16, LOW(RAMEND)

OUT SPL, R16

CALL SHIFTREGISTER_INITPORT

CALL SHIFTREGISTER_CLEARDATA

CALL INITTIMER1CTC
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

SEI

CALL LEDMATRIX_PORTINIT

MAIN:

JMP MAIN

.EQU CLEARSIGNALPORT = PORTB // THIẾT LẬP CÁC PORT

.EQU CLEARSIGNALPIN = 3 // Ở J15

.EQU SHIFTCLOCKPORT = PORTB

.EQU SHIFTCLOCKPIN = 2

.EQU LATCHPORT = PORTB

.EQU LATCHPIN = 1

.EQU SHIFTDATAPORT = PORTB

.EQU SHIFTDATAPIN = 0

SHIFTREGISTER_INITPORT:

PUSH R24

LDI R24,
(1<<CLEARSIGNALPIN)|(1<<SHIFTCLOCKPIN)|(1<<LATCHPIN)|(1<<SHIFTDATAPIN);

OUT DDRB, R24

POP R24

RET

SHIFTREGISTER_CLEARDATA:

CBI CLEARSIGNALPORT, CLEARSIGNALPIN ;

SBI CLEARSIGNALPORT, CLEARSIGNALPIN

RET
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

SHIFTREGISTER_SHIFTOUTDATA:

PUSH R18

CBI SHIFTCLOCKPORT, SHIFTCLOCKPIN

LDI R18, 8

SHIFTLOOP:

SBRC R27, 7

SBI SHIFTDATAPORT, SHIFTDATAPIN

SBI SHIFTCLOCKPORT, SHIFTCLOCKPIN

LSL R27

CBI SHIFTCLOCKPORT, SHIFTCLOCKPIN

CBI SHIFTDATAPORT, SHIFTDATAPIN

DEC R18

BRNE SHIFTLOOP

SBI LATCHPORT, LATCHPIN

CBI LATCHPORT, LATCHPIN

POP R18

RET

//CÁC GIÁ TRỊ CỦA LED MA TRẬN

LEDMATRIX_COL_CONTROL: .DB 0X80, 0X40, 0X20, 0X10, 0X08, 0X04, 0X02, 0X01

LEDMATRIX_FONT_A: .DB 0B00000000, 0B10011111, 0B10010001, 0B10010001, 0B11110001,


0B00000000, 0B00000000, 0B00000000

.EQU LEDMATRIXPORT = PORTD //PORTD NỐI VỚI J38

.EQU LEDMATRIXDIR = DDRD

.DSEG

.ORG SRAM_START
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

LEDMATRIXBUFFER : .BYTE 8

LEDMATRIXCOLINDEX : .BYTE 1

.CSEG

.ALIGN 2

LEDMATRIX_PORTINIT:

PUSH R20

PUSH R21

LDI R20, 0B11111111

OUT LEDMATRIXDIR, R20

LDI R20,0

LDI R31,HIGH(LEDMATRIXCOLINDEX)

LDI R30,LOW(LEDMATRIXCOLINDEX)

ST Z,R20

LDI R20,0

LDI R31,HIGH(LEDMATRIX_FONT_A << 1)

LDI R30,LOW(LEDMATRIX_FONT_A << 1)

LDI R29,HIGH(LEDMATRIXBUFFER)

LDI R28,LOW(LEDMATRIXBUFFER)

LDI R20,8

LEDMATRIX_PORTINIT_LOOP:

LPM R21,Z+

ST Y+,R21

DEC R20

CPI R20,0

BRNE LEDMATRIX_PORTINIT_LOOP

POP R21
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

POP R20

RET

LEDMATRIX_DISPLAY_COL:

PUSH R16

PUSH R27

CLR R16

OUT LEDMATRIXPORT,R16

CALL SHIFTREGISTER_SHIFTOUTDATA

LDI R31,HIGH(LEDMATRIX_COL_CONTROL << 1)

LDI R30,LOW(LEDMATRIX_COL_CONTROL << 1)

CLR R16

ADD R30,R26

ADC R31,R16

LPM R27,Z

OUT LEDMATRIXPORT,R27

POP R27

POP R16

RET

INITTIMER1CTC: //THIẾT LẬP TIMER1

PUSH R16

LDI R16, HIGH(31) //DO DELAY 1MS VÀ CHIA 256 NÊN CẦN PHẢI THIẾT LẬP 16 XUNG.
250/8=31

STS OCR1AH, R16

LDI R16, LOW(31)

STS OCR1AL, R16


BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

LDI R16, (1 << CS12)| (1<< WGM12) ;

STS TCCR1B, R16 ;

LDI R16, (1 << OCIE1A);

STS TIMSK1, R16

POP R16

RET

//KHỞI TẠO NGẮT TIMER1

TIMER1_COMP_ISR:

PUSH R16

PUSH R26

PUSH R27

LDI R31,HIGH(LEDMATRIXCOLINDEX)

LDI R30,LOW(LEDMATRIXCOLINDEX)

LD R16,Z

MOV R26,R16

LDI R31,HIGH(LEDMATRIXBUFFER)

LDI R30,LOW(LEDMATRIXBUFFER)

ADD R30,R16

CLR R16

ADC R31,R16

LD R27,Z

CALL LEDMATRIX_DISPLAY_COL

INC R26

CPI R26,8

BRNE TIMER1_COMP_ISR_CONT

LDI R26,0
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

TIMER1_COMP_ISR_CONT:

LDI R31,HIGH(LEDMATRIXCOLINDEX)

LDI R30,LOW(LEDMATRIXCOLINDEX)

ST Z,R26

POP R27

POP R26

POP R16

RETI

Hiển thị logo Bách Khoa:

LEDMATRIX_FONT_A: .DB 0B01100000, 0B10010000, 0B01001110, 0B00100001, 0B01001110,


0B10010000, 0B01100000, 0B00000000
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

You might also like