You are on page 1of 43

LAB 2-1

DÙNG TIMER ĐỂ TẠO DELAY VÀ TẠO XUNG

MỤC TIÊU:

➢ Hiểu các mode hoạt động của timer


➢ Hiểu cách sử dụng timer để tao delay và tạo xung

THAM KHẢO:

➢ Tài liệu hướng dẫn thí nghiệm, chương 4, 5


➢ Atmel-2505-Setup-and-Use-of-AVR-Timers_ApplicationNote_AVR130.pdf

BÀI 1

a) Viết chương trình con delay 1 ms sử dụng timer 0. Sử dụng chương trình con này để tạo
xung 1 Khz trên chân PA0.

.ORG 0

SBI DDRA, 0 // PA0 LA OUTPUT

LDI R16, 0

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

https://doe.dee.hcmut.edu.vn/
LAB 2-1
DÙNG TIMER ĐỂ TẠO DELAY VÀ TẠO XUNG
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) Mô phỏng, chỉnh sửa chương trình để tạo ra xung chính xác.

c) Kết nối chân PA0 vào oscilloscope để kiểm tra

https://doe.dee.hcmut.edu.vn/
LAB 2-1
DÙNG TIMER ĐỂ TẠO DELAY VÀ TẠO XUNG

https://doe.dee.hcmut.edu.vn/
LAB 2-1
DÙNG TIMER ĐỂ TẠO DELAY VÀ TẠO XUNG

BÀI 2

a) 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

https://doe.dee.hcmut.edu.vn/
LAB 2-1
DÙNG TIMER ĐỂ TẠO DELAY VÀ TẠO XUNG
RCALL DELAY_32US

CBI PORTC,0

RCALL DELAY_32US

RJMP MAIN

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) 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:

https://doe.dee.hcmut.edu.vn/
LAB 2-1
DÙNG TIMER ĐỂ TẠO DELAY VÀ TẠO XUNG
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

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

c) Kết nối chân OC0 ra oscilloscope và quan sát

https://doe.dee.hcmut.edu.vn/
LAB 2-1
DÙNG TIMER ĐỂ TẠO DELAY VÀ TẠO XUNG

BÀI 3

a) Cho chương trình sau tạo 2 xung PWM trên OC0A và OC0B

.org 00

call initTimer0

start:

rjmp start

initTimer0:

// Set OC0A (PB3) and OC0B (PB4) pins as outputs

ldi r16, (1 << PB3) | (1 << PB4);

out DDRB,r16

ldi r16, (1 << COM0B1)|(1 << COM0A1) | (1 << WGM00)|(1 << WGM01)

https://doe.dee.hcmut.edu.vn/
LAB 2-1
DÙNG TIMER ĐỂ TẠO DELAY VÀ TẠO XUNG
out TCCR0A,r16 // setup TCCR0A

ldi r16, (1 << CS01)

out TCCR0B,r16 // setup TCCR0B

ldi r16, 100

out OCR0A,r16 //OCRA = 100

ldi r16, 75

out OCR0B,r16 //OCRB = 75

ret

b) Kết nối chân OC0A và chân OC0B ra 2 kênh đo của oscilloscope, đo và ghi nhận, giải
thích dạng sóng thu được

https://doe.dee.hcmut.edu.vn/
LAB 2-1
DÙNG TIMER ĐỂ TẠO DELAY VÀ TẠO XUNG
- Dạng sóng (tần số, chu kỳ làm việc, phase) trong kết quả xuất ra ở chân OC0A và OC0B được
tạo ra bởi việc sử dụng Timer0 ở chế độ Fast PWM (Phased Correct PWM) và cấu hình thanh
ghi TCCR0A, TCCR0B và các thanh ghi liên quan khác.
Khi sử dụng Fast PWM, thanh ghi OCR0A là thanh ghi so sánh được sử dụng để xác định tần số
và chu kỳ làm việc của sóng PWM, trong khi thanh ghi OCR0B được sử dụng để xác định phase
của sóng PWM so với sóng đầu ra của OCR0A. Do đó, khi thay đổi giá trị của OCR0A và
OCR0B, chúng ta có thể thay đổi tần số, chu kỳ làm việc và phase của sóng PWM được tạo ra
bởi Timer0.
LDI R16, (1 << PB3) | (1 << PB4);
OUT DDRB,R16
=> set PB3, PB4 out
LDI R16, (1 << COM0B1)|(1 << COM0A1) | (1 << WGM00)|(1 << WGM01)
OUT TCCR0A,R16 // SETUP TCCR0A
=> setup để hoạt động ở chế độ FPWM (011)
MODE FPWM Trong chế độ FPWM, nếu giá trị của thanh ghi TCNT0 (Timer/Counter
0) nhỏ hơn giá trị của OCR0A( OCR0B), thì chân OC0A (OC0B) sẽ được set lên mức cao.
Ngược lại, nếu giá trị của TCNT0 lớn hơn hoặc bằng giá trị của OCR0A( OCR0B), thì chân
OC0A (OC0B) sẽ được clear xuống mức thấp.
COM0A = 10; COM0B = 10 => Xóa OC0A(OC0B)=0 khi đạt kết quả so sánh
Khi TCNT0 đạt OCR0A( OCR0B) thì vẫn sẽ tiếp tục đếm lên tới 255 rồi về lại 0
ldi r16, (1 << CS01)
out TCCR0B,r16 // setup TCCR0B
=> chọn prescaler = 1 => fclkt0 = fosc = 8 MHz
=>Tclkt0 = Tosc = 0.125us
LDI R16, 100
OUT OCR0A,R16 //OCRA = 100
LDI R16, 75
OUT OCR0B,R16 //OCRB = 75

https://doe.dee.hcmut.edu.vn/
LAB 2-1
DÙNG TIMER ĐỂ TẠO DELAY VÀ TẠO XUNG
=> chọn giá trị so sánh của kênh A là 100, giá trị so sánh cho kênh B là 75
Một chu kì để thanh ghi TCNT0 đếm từ 0 đến MAX là T = 256 * 0.125us = 32us

• OC0A
- Thời gian TCNT0 < OCR0A cũng là thời gian sóng kênh A ở mức 1:
TA = T * (100/256) = 12.5us
- Khoảng thời gian còn lại trong chu kì, sóng kênh A ở mức 0
OC0A có T = 32 us với Duty cycle = 39.06% = > f = 31250Hz

• OC0B
- Thời gian TCNT0 < OCR0B cũng là thời gian kênh B ở mức 1:
TB= T * (75/256) = 9.375us
- Khoảng thời gian còn lại trong chu kì, sóng kênh B ở mức 0
OC0B có T = 32 us với Duty cycle = 29.3% = > f = 31250Hz

BÀI 4

a) Sửa chương trình trên ứng với các trường hợp khác nhau của TCCR0A và TCCR0B

TCCR0A TCCR0B

7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0

1 COM0A COM0A COM0B COM0B WGM0 WGM0 FOC0 FOC0 WGM0 CS0 CS0 CS0
1 0 1 0 1 0 A B 2 2 1 0

2 1 0 1 0 1 1 0 0 1 0

3 1 0 1 0 1 1 1 0 1 0

4 1 0 1 0 0 1 0 0 1 0

b) Kết nối chân OC0A và chân OC0B ra 2 kênh đo của oscilloscope, đo và ghi nhận, giải
thích dạng sóng thu được

https://doe.dee.hcmut.edu.vn/
LAB 2-1
DÙNG TIMER ĐỂ TẠO DELAY VÀ TẠO XUNG
BÀI 5

a) Viết chương trình tạo ra 1 xung tần số 1Khz, duty cycle 25% trên chân OC0B

.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

WAIT: IN R17, TIFR0

SBRS R17, OCF0A

RJMP WAIT

SBI TIFR0, OCF0A

LDI R17, 0

https://doe.dee.hcmut.edu.vn/
LAB 2-1
DÙNG TIMER ĐỂ TẠO DELAY VÀ TẠO XUNG
OUT TCCR0B, R17

RET

b) Kết nối vào Oscilloscope và đo dạng sóng ngõ ra

c) 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

.ORG 0

RJMP MAIN

.ORG 0x40

MAIN:

LDI R22, 2 ;So lan lap cau a

https://doe.dee.hcmut.edu.vn/
LAB 2-1
DÙNG TIMER ĐỂ TẠO DELAY VÀ TẠO XUNG
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

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

https://doe.dee.hcmut.edu.vn/
LAB 2-1
DÙNG TIMER ĐỂ TẠO DELAY VÀ TẠO XUNG
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

RJMP CONTI

CHANGE_VALUE:

DEC SIGN_H

INC SIGN_L

AGAIN:

https://doe.dee.hcmut.edu.vn/
LAB 2-1
DÙNG TIMER ĐỂ TẠO DELAY VÀ TẠO XUNG
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

LDI ZH, HIGH(DATA_A<<1)

LDI ZL, LOW(DATA_A<<1)

RJMP WAIT_A

RET

DATA_A:

https://doe.dee.hcmut.edu.vn/
LAB 2-1
DÙNG TIMER ĐỂ TẠO DELAY VÀ TẠO XUNG
.DB 92, 30

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. 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
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
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
d. Mã nguồn chương trình với chú thích

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. Ở mode CTC, khi nào bit OCFx được set lên 1?
c. Giá trị các thanh ghi cấu hình cho timer 0 cho 2 trường hợp
d. Mã nguồn chương trình cho hai trường hợp

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ả

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 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
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ÀI 5
1. Trả lời các câu hỏi
a. Timer 0 làm việc ở mode nào?
b. Giá trị đưa vào các thanh ghi của timer 0 là bao nhiêu? Giải thích
2. Trình bày mã nguồn với chú thích.

https://doe.dee.hcmut.edu.vn/
LAB 2-2
GIAO TIẾP LED 7 ĐOẠN VÀ LED MA TRẬN

MỤC TIÊU:

➢ Giao tiếp được với LED 7 đoạn


➢ Giao tiếp được với LED ma trận

THAM KHẢO:

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


➢ Atmel-2505-Setup-and-Use-of-AVR-Timers_ApplicationNote_AVR130.pdf

BÀI 2

a) Kết nối 1 port của AVR vào header J34. Kết nối 2 chân port khác vào tín hiệu nLE0 và
nLE1 trên header J82. Set jumper để cấp nguồn cho LED 7 đoạn

b) Sử 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 hiển
thị số 0123 lên 4 LED 7 đoạn, sử dụng timer 0 để quét LED với tần số quét 50Hz.

.EQU OUTLED = PORTD

https://doe.dee.hcmut.edu.vn/
LAB 2-2
GIAO TIẾP LED 7 ĐOẠN VÀ LED MA TRẬN

.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

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

https://doe.dee.hcmut.edu.vn/
LAB 2-2
GIAO TIẾP LED 7 ĐOẠN VÀ LED MA TRẬN

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

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

https://doe.dee.hcmut.edu.vn/
LAB 2-2
GIAO TIẾP LED 7 ĐOẠN VÀ LED MA TRẬN

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

RET

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

TAB_7SA:

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

BÀI 3

a) Kết nối port của AVR vào dip Switch, giả sử đó là PORTA

https://doe.dee.hcmut.edu.vn/
LAB 2-2
GIAO TIẾP LED 7 ĐOẠN VÀ LED MA TRẬN

b) Viết chương trình hiện giá trị PORTA * 9 lên 4 LED 7 đoạn.

.ORG 0

TABLE_7SEG_DATA:

https://doe.dee.hcmut.edu.vn/
LAB 2-2
GIAO TIẾP LED 7 ĐOẠN VÀ LED MA TRẬN

.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

.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

https://doe.dee.hcmut.edu.vn/
LAB 2-2
GIAO TIẾP LED 7 ĐOẠN VÀ LED MA TRẬN

.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

;INIT START INDEX

CLR R26

CLR R27

CLR R18

MAIN:

RCALL MUL_PORTA_9

MOV R27, R4

RCALL DISPLAY_7SEG

INC R26

RCALL DELAY5MS

https://doe.dee.hcmut.edu.vn/
LAB 2-2
GIAO TIẾP LED 7 ĐOẠN VÀ LED MA TRẬN

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

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

https://doe.dee.hcmut.edu.vn/
LAB 2-2
GIAO TIẾP LED 7 ĐOẠN VÀ LED MA TRẬN

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

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

https://doe.dee.hcmut.edu.vn/
LAB 2-2
GIAO TIẾP LED 7 ĐOẠN VÀ LED MA TRẬN

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

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

https://doe.dee.hcmut.edu.vn/
LAB 2-2
GIAO TIẾP LED 7 ĐOẠN VÀ LED MA TRẬN

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

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

https://doe.dee.hcmut.edu.vn/
LAB 2-2
GIAO TIẾP LED 7 ĐOẠN VÀ LED MA TRẬN

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

RET

c) Thay đổi giá trị dip switch và quan sát kết quả

BÀI 4

a) Kết nối các tín hiệu cần thiết để điều khiển LED ma trận. .

https://doe.dee.hcmut.edu.vn/
LAB 2-2
GIAO TIẾP LED 7 ĐOẠN VÀ LED MA TRẬN

b) Sử dụng chương trình mẫu, chỉnh sửa nếu cần thiết để hiển thị chữ ‘A’ lên LED ma trận.
Quét LED ma trận sử dụng timer để tạo delay với tần số quét 25 Hz.

.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

https://doe.dee.hcmut.edu.vn/
LAB 2-2
GIAO TIẾP LED 7 ĐOẠN VÀ LED MA TRẬN

.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

CBI SHIFTDATAPORT, SHIFTDATAPIN

DEC R18

https://doe.dee.hcmut.edu.vn/
LAB 2-2
GIAO TIẾP LED 7 ĐOẠN VÀ LED MA TRẬN

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

LDI R20,0

LDI R31,HIGH(LEDMATRIXCOLINDEX)

LDI R30,LOW(LEDMATRIXCOLINDEX)

ST Z,R20

https://doe.dee.hcmut.edu.vn/
LAB 2-2
GIAO TIẾP LED 7 ĐOẠN VÀ LED MA TRẬN

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

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

https://doe.dee.hcmut.edu.vn/
LAB 2-2
GIAO TIẾP LED 7 ĐOẠN VÀ LED MA TRẬN

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

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)

https://doe.dee.hcmut.edu.vn/
LAB 2-2
GIAO TIẾP LED 7 ĐOẠN VÀ LED MA TRẬN

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

c) 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:

https://doe.dee.hcmut.edu.vn/
LAB 2-2
GIAO TIẾP LED 7 ĐOẠN VÀ LED MA TRẬN

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

.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

https://doe.dee.hcmut.edu.vn/
LAB 2-2
GIAO TIẾP LED 7 ĐOẠN VÀ LED MA TRẬN

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

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

https://doe.dee.hcmut.edu.vn/
LAB 2-2
GIAO TIẾP LED 7 ĐOẠN VÀ LED MA TRẬN

.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

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

https://doe.dee.hcmut.edu.vn/
LAB 2-2
GIAO TIẾP LED 7 ĐOẠN VÀ LED MA TRẬN

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

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

https://doe.dee.hcmut.edu.vn/
LAB 2-2
GIAO TIẾP LED 7 ĐOẠN VÀ LED MA TRẬN

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

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

https://doe.dee.hcmut.edu.vn/
LAB 2-2
GIAO TIẾP LED 7 ĐOẠN VÀ LED MA TRẬN

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

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 2
1. 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?
b. Cấu hình timer như thế nào để có độ trễ này
2. Mã nguồn và chú thích

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

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

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


2. Mã nguồn và chú thích

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?
c. Sự khác nhau khi quét ở tần số 25Hz và 125Hz

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

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

You might also like