You are on page 1of 5

Giảng viên ra đề: (Ngày ra đề) Người phê duyệt: (Ngày duyệt đề)

(Chữ ký và Họ tên) (Chữ ký, Chức vụ và Họ tên)

Học kỳ/năm học 2 2022-2023


THI CUỐI KỲ Ngày thi 17/5/2023
Môn học Vi xử lý
TRƯỜNG ĐH BÁCH KHOA – ĐHQG-HCM Mã môn học EE2039
KHOA ĐIỆN-ĐIỆN TỬ
Thời lượng 90 phút Mã đề
Ghi - Sinh viên ĐƯỢC sử dụng tài liệu giấy. KHÔNG được sử dụng các phương tiện lưu trữ, thiết bị truyền thông.
chú: - Tất cả các lệnh MCU324P phải được viết bằng hợp ngữ (không sử dụng ngôn ngữ C).
- Đề thi gồm 04 trang và 01 trang Phụ lục hình. Sinh viên làm bài trực tiếp trên đề thi và nộp lại trang Phụ lục hình.

Lưu ý: Trong các câu hỏi liên quan đến tần số dao động, sử dụng Fosc = 8MHz, 1MC = 125ns.
Câu hỏi 1) (2.5đ) (L.O.2, L.O.5, L.O.6):
a. (0.5đ) Viết chương trình con DELAY_2MS có chức b. (0.5đ) Sử dụng chương trình con ở câu a, viết
năng tạo trễ 2ms sử dụng Timer2, chế độ NOR. Giả sử chương trình con XUNG tạo 1 xung vuông ở chân
đã khởi động Timer2 (nhưng chưa cho Timer2 chạy) ở PB3 như hình vẽ. Giả sử đã khai báo PB3 là ngõ ra ở
chương trình chính. chương trình chính.
DELAY_2MS: Hoặc 2ms = 125 x 16s
PUSH R16 với hệ số chia N = 128.
PB3
LDI R16, -250 ;2ms = 250 x 8s 2ms 8ms
STS TCNT2, R16
LDI R16, 0b00000100 ;chế độ NOR, N=64 XUNG:
STS TCCR2B, R16 SBI PORTB,3
WAIT: IN R16, TIFR2 RCALL DELAY_2MS
SBRS R16, TOV2
CBI PORTB,3
RJMP WAIT
OUT TIFR2, R16 ;xóa cờ TOV2 RCALL DELAY_2MS
LDI R16, 0x00 ;dừng Timer RCALL DELAY_2MS
STS TCCR2B, R16 RCALL DELAY_2MS
POP R16 RCALL DELAY_2MS
RET RET
c. (1.5đ) Cho sơ đồ kết nối giữa ATmega324P và các LED như Hình 1 (xem ở trang phụ lục hình). Ban đầu làm tối
hết dãy LED.
Viết chương trình sử dụng 2 Timer: Timer2 (tạo trễ) và Timer1 (tạo ngắt) hoạt động như sau:
- Chương trình chính: cấu hình port; khởi động các Timer1 và Timer2 hoạt động ở chế độ thích hợp; khởi tạo con
trỏ bảng dữ liệu; cho phép ngắt Timer1 và liên tục tạo chuỗi xung vuông ở ngõ ra PB3 với chu kỳ xung như ở câu b.
Các chương trình con chỉ cần trình bày nhãn đầu vào và lệnh kết thúc.
- Chương trình phục vụ ngắt tràn Timer1 TIMER1_OVF_ISR: thực hiện điều khiển các LED sáng dần từ 2
biên vào trong cho đến khi sáng hết dãy LED, sau đó tối hết dãy LED rồi quay vòng lại. Ngắt tràn Timer1 tạo thời
gian 0.5s để chuyển trạng thái các LED (xem minh họa ở Bảng 1 trang phụ lục hình). Gợi ý: sử dụng bảng tham
chiếu định nghĩa các trạng thái LED.
STS TCCR1A,R16 ;T1 NOR LDI R16, 0b00000011
.EQU TF1=-62500; N=64 STS TCCR1B,R16
;.EQU TF1=-15625; N=256 LDI R16,0b00000011
LPM R16, Z+
.ORG 0 STS TCCR1B,R16;T1 chạy,N=64 OUT PORTC, R16
RJMP MAIN LDI ZH, HIGH(TAB_LED<<1) DEC R18
.ORG 0x001E LDI ZL, LOW(TAB_LED<<1) BRNE EXIT
LDI R18, 5 LDI ZH, HIGH(TAB_LED<<1)
RJMP TIMER1_OVF_ISR LDI ZL, LOW(TAB_LED<<1)
.ORG 0x40 LDI R16,(1<<TOIE1)
STS TIMSK1,R16 LDI R18, 5
MAIN: LDI R16,$FF EXIT: POP R16
SEI
OUT DDRC,R16 OUT SREG, R16
START: RCALL XUNG POP R16
LDI R16,0 RJMP START
OUT PORTC,R16 RETI
TIMER1_OVF_ISR:
SBI DDRB,3 PUSH R16 TAB_LED:
LDI R16,HIGH(TF1) IN R16, SREG .DB 0x81,0xC3,0xE7,0xFF,0x00
PUSH R16
STS TCNT1H,R16 DELAY_2MS: Lưu ý: Thay vì đếm số lượng
LDI R16,0x00 … phần tử bảng tra TAB_LED,
LDI R16,LOW(TF1) STS TCCR1B,R16 … SV có thể so sánh nội dung
STS TCNT1L,R16 LDI R16,HIGH(TF1) RET của bảng tra với 0x00 (lệnh
LDI R16,0x00 STS TCNT1H,R16 XUNG: … CPI) để xác định phần tử cuối
STS TCCR2A,R16 ;T2 NOR LDI R16,LOW(TF1) … của bảng.
STS TCCR2B,R16 ;dừng T2 STS TCNT1L,R16 RET

MSSV: ........................................ Họ và tên SV: .......................................................................................................... Trang 1/4


Câu hỏi 2) (2.5đ) (L.O.2, L.O.5, L.O.6):
Cho hệ thống sử dụng vi điều khiển MCU324P có sơ đồ thiết kế như Hình 2 (xem ở trang phụ lục hình).

a. (0.75đ) Cho chương trình con khởi động UART sau: Xác định các thông số hoạt động của bộ
INIT_UART: UART được khởi động ở câu a:
LDI R16,(1<<RXEN1) | (1<<TXEN1)  Tốc độ baud (trình bày công thức tính và
STS UCSR1B,R16 kết quả):
LDI R16,(1<<UCSZ11)|(1<<UCSZ10)|(1<<UPM11) 2U2X1 × 𝐹osc 20 × 8 × 106
BR = =
STS UCSR1C,R16 16 × (UBRR1 + 1) 16 × (51 + 1)
LDI R16,0x00 = 9615 (thực tế). Theo lý thuyết: 9600.
STS UBRR1H,R16
LDI R16,51  Kích thước dữ liệu (5/6/7/8/9 bit): 8 bit.
STS UBRR1L,R16  Parity bit (chẵn/lẻ/không dùng): chẵn.
RET  Số stop bit (1/2 bit): 1 bit.

Giả sử việc thiết lập chế độ hoạt động của UART có sẵn như ở câu a. Trả lời các câu hỏi bên dưới về hoạt động của
các chương trình con RECEIVE và TRANS:
b. (0.75đ) Chương trình con RECEIVE:
RECEIVE: LDS R16,UCSR1B ;(8)
LDS R16,UCSR1A ;(1) SBR R16,(1<<TXEN1) ;(9)
SBRS R16,RXC1 ;(2) CBR R16,(1<<RXEN1) ;(10)
RJMP RECEIVE ;(3) STS UCSR1B,R16 ;(11)
LDS R18,UCSR1A ;(4) EXIT: RET
LDS R17,UDR1 ;(5)
SBRC R18,UPE1 ;(6)
RJMP EXIT ;(7)
Hãy cho biết chức năng của:
- Lệnh (1) đến (3): chờ thu đủ ký tự và cờ RXC1=1 (hoặc kiểm tra nếu cờ RXC1=0 thì chờ thu ký tự).
- Lệnh (4) đến (7): đọc ký tự cất trong R17, kiểm tra nếu bit báo lỗi parity UPE1=1 thì thoát.
- Lệnh (8) đến (11): cho phép phát và cấm thu cổng UART1.

c. (0.5đ) Chương trình con TRANS:


TRANS: LDS R16,UCSR1B
IN R20,PINB CBR R16,(1<<TXEN1)
ANDI R20,0X07 SBR R16,(1<<RXEN1)
OUT PORTA,R20 STS UCSR1B,R16
ADD R20,R17 RET
LOOP: LDS R16,UCSR1A
SBRS R16,UDRE1
RJMP LOOP
STS UDR1,R20
Giả sử sau khi thực hiện CTC RECEIVE ký tự thu được (trong R17) là 0x31, không có lỗi parity và tiếp tục
thực hiện CTC TRANS. Nếu các ngõ vào PB2:PB0=010, hãy xác định:
- Nội dung hiển thị trên LED 7 đoạn: số 2
- Dữ liệu phát ra port nối tiếp: 0x33

d. (0.5đ) Từ CTC RECEIVE ở câu b, sửa lại thành chương trình ngắt thu USART1_RX_ISR sao cho không thay
đổi chức năng với số dòng lệnh tối thiểu. Giả sử việc cho phép ngắt và các vector ngắt đã được khai báo sẵn.

USART1_RX_ISR:
LDS R18,UCSR1A
LDS R17,UDR1
SBRC R18,UPE1
RJMP EXIT
LDS R16,UCSR1B
SBR R16,(1<<TXEN1)
CBR R16,(1<<RXEN1)
STS UCSR1B,R16
EXIT: RETI

MSSV: ........................................ Họ và tên SV: .......................................................................................................... Trang 2/4


Câu hỏi 3) (2.5đ) (L.O.2, L.O.5, L.O.6):
Một cảm biến nhiệt độ được dùng để đo nhiệt độ từ 0oC đến 100oC. Cảm biến có dạng nguồn dòng cho dòng điện ngõ
ra liên hệ với nhiệt độ ngõ vào như sau: Io=T+1 (Io: mA, T: oC). Cảm biến được mắc vào mạch đo như Hình 3a (xem
ở trang phụ lục hình). Tín hiệu Vo sau đó được đọc bởi ADC của MCU ATmega324PA như Hình 3b (xem ở trang
phụ lục hình). Hoạt động của hệ thống như sau: MCU liên tục thực hiện đọc giá trị của cảm biến nhiệt độ đã cho sau
mỗi 50ms. Nếu nhiệt độ lớn hơn hoặc bằng 80oC thì LED2 sáng, LED1 tắt. Ngược lại, LED2 tắt, LED1 sáng. Sử
dụng ADC ngõ vào đơn (SE), hiệu chỉnh phải, Vref=2.56V (nguồn trong), fCKADC=125KHz.

a. (0.5đ) Viết phương trình ngõ ra điện áp Vo và cho biết tầm giá trị của Vo tương ứng với tầm đo nhiệt độ ở trên.
 Vo = 20 x Io = 20 x (T+1) (Vo: mV, Io: mA, T: oC)
 T = 0 oC → Vo = 20mV
 T = 100 oC → Vo = 2020mV
Vậy với T = 0 oC ÷100 oC thì Vo = 20mV÷2020mV.
b. (0.5đ) Viết công thức tính giá trị ADC c. (0.5đ) Viết chương trình con INIT_ADC thực hiện khởi động
ngõ ra. Từ đó, tính giá trị ngõ ra ADC khi ADC ở mode tự kích (Auto Trigger) sử dụng nguồn tạo tín hiệu
T=80oC. kích khởi là cờ báo kết quả so sánh Timer1 B OCF1B, ngõ vào đơn
 Giá trị ADC ngõ ra với ngõ vào đơn kênh: (xem Hình 3b), hiệu chỉnh phải, Vref=2.56V (nguồn trong),
𝑉in × 1024 fCKADC=125KHz.
𝐷out =
𝑉ref INIT_ADC:
 Khi T=80oC, Vin = Vo, Vref = 2.56V, ta có: LDI R16,0B11000010 LDI R16,5
𝑉in × 1024 20 × (80 + 1) × 1024 STS ADMUX,R16 STS ADCSRB,R16
𝐷out = =
𝑉ref 2.56 × 103 LDI R16,0B10100110 RET
= 648 = 0x288 STS ADCSRA,R16

d. (1.0đ) Viết một chương trình hoàn chỉnh thực hiện công việc như mô tả ở trên, sử dụng chương trình con (CTC)
INIT_ADC (ở câu c) và hai CTC INIT_TIMER, COMPARE_16BIT cho sẵn như mô tả bên dưới.
 CTC INIT_TIMER có chức năng khởi động và chạy Timer1 mode CTC4 so sánh kênh B để tạo thời gian đếm
50ms cho bật cờ OCF1B.
 CTC COMPARE_16BIT thực hiện so sánh hai số 16 bit với số thứ nhất chứa trong R20:R19 (R20 chứa byte
cao), số thứ hai chứa trong R22:R21 (R22 chứa byte cao).
o Nếu R20:R19 < R22:R21 thì PC1 = 0 và PC2 = 1.
o Nếu R20:R19 ≥ R22:R21 thì PC1 = 1 và PC2 = 0.
Lưu ý: Ngoài việc sử dụng các CTC trên, SV cần phải cấu hình port, khởi tạo các thông số khác phù hợp trong
chương trình chính. Khi viết các CTC chỉ cần ghi nhãn đầu vào và lệnh kết thúc.
.EQU TCOMP=648 WAIT: LDS R17,ADCSRA
.ORG 0 SBRS R17,ADIF
RJMP MAIN RJMP WAIT
STS ADCSRA,R17
.ORG 0x40
LDS R19,ADCL ;đọc byte thấp trước
MAIN: CBI DDRA,2 LDS R20,ADCH ;đọc byte cao sau
SBI DDRC,1 RCALL COMPARE_16BIT
SBI DDRC,2 SBI TIFR1,OCF1B ;hoặc sử dụng 2 câu lệnh:
LDI R22,HIGH(TCOMP) ;IN R17,TIFR1 và OUT TIFR1,R17
LDI R21,LOW(TCOMP) RJMP WAIT
RCALL INIT_TIMER INIT_TIMER:…
RCALL INIT_ADC RET
INIT_ADC:…
Lưu ý: giả sử trong CTC INIT_TIMER đã có các lệnh khởi RET
động và chạy Timer1 mode CTC4 so sánh kênh B để tạo thời COMPARE_16BIT:…
gian đếm 50ms cho bật cờ OCF1B. RET
Câu hỏi 4) (2.5đ) (L.O.2, L.O.5, L.O.6):
Cho mạch điện kết nối như Hình 4 (xem ở trang phụ lục hình).
a. (0.5đ) Viết một chương trình con (CTC) tên DISP_LED hiển thị giá trị cất trong R17 ra LED 7 đoạn Anode
chung, R17 chứa giá trị từ 0 – 9. Khai báo bảng tra mã 7 đoạn Anode chung các số 0 – 9 có tên TAB_LED
trong Flash ROM.
DISP_LED: LDI ZH,HIGH(TAB_LED<<1) TAB_LED: .DB 0XC0,0XF9,0XA4,0XB0,0X99,0X92
LDI ZL,LOW(TAB_LED<<1) .DB 0X82,0XF8,0X80,0X90
ADD ZL,R17
LDI R18,0
ADC ZH,R18
LPM R18,Z
OUT OUTPORT,R18
RET
MSSV: ........................................ Họ và tên SV: .......................................................................................................... Trang 3/4
b. (0.5đ) Viết ISR ngắt Timer1 COMPA với tên c. (0.5đ) Viết ISR ngắt INT1 với tên INT1_ISR thực
TIMER1_COMPA_ISR thực hiện đếm lên giá hiện cho phép ngắt Timer1 COMPA và xóa
trị cất trong R17 từ 0 đến 9 và lặp vòng lại từ 0. R17=0. Viết ISR ngắt INT0 với tên INT0_ISR
Mỗi lần chương trình ngắt được thực thi, nội thực hiện cấm ngắt Timer1 COMPA. Giả sử đã
dung R17 chỉ tăng 1 đơn vị. Giả sử đã khai báo khai báo các điều kiện ngắt thích hợp.
mode Timer1 và điều kiện ngắt thích hợp.
INT0_ISR: LDS R16,TIMSK1
TIMER1_COMPA_ISR: CBR R16,(1<<OCIE1A)
IN R19,SREG STS TIMSK1,R16
INC R17 RETI
CPI R17,10
BRCS EXIT_T1 ;--------------------------------------------
LDI R17,0 INT1_ISR: LDS R16,TIMSK1
EXIT_T1: SBR R16,(1<<OCIE1A)
OUT SREG,R19 STS TIMSK1,R16
RETI LDI R17,0
RETI

d. (1.0đ) Viết một chương trình hoàn chỉnh thực hiện các công việc sau:
- Khi nhấn SW1 tạo ngắt INT1 tác động cạnh xuống cho phép ngắt Timer1 COMPA và xóa R17=0.
- Khi nhấn SW0 tạo ngắt INT0 tác động cạnh xuống cấm ngắt Timer1 COMPA.
- Ngắt Timer1 COMPA thực hiện cứ sau 0.1s đếm lên R17 từ 0 đến 9 và lặp vòng lại từ 0.
- Chương trình chính khởi động và khai báo Timer1 mode thích hợp, cho phép các ngắt tương ứng và liên tục gọi
CTC DISP_LED như câu a.
Xem CTC và các ISR có sẵn (đã trình bày ở các câu a, b, c), chỉ cần trình bày nhãn đầu vào và lệnh kết thúc.
.EQU OUTPORT_DR=DDRB LDI R16,0X00 ;Timer1 mode CTC4
.EQU OUTPORT=PORTB STS TCCR1A,R16
.EQU TF=12499;giá trị TOP=OCR1A LDI R16,0X0B ;N=64, T1=8µs,chạy Timer1
.ORG 0 STS TCCR1B,R16 ;Td=8x(12499+1)=0.1s
RJMP MAIN LDI R16,(1<<ISC11)|(1<<ISC01);ngắt INT0,
.ORG 0X02 ;điểm vào ISR INT0 STS EICRA,R16 ;INT1 tác động cạnh xuống
RJMP INT0_ISR LDI R16,(1<<INT0)|(1<<INT1);cho phép ngắt
.ORG 0X04 ;điểm vào ISR INT1 OUT EIMSK,R16 ; INT0,INT1
RJMP INT1_ISR SEI ;cho phép ngắt toàn cục
.ORG 0X1A ;điểm vào ISR Timer1 COMPA LDI R17,0 ;khởi động bộ đếm=0
RJMP TIMER1_COMPA_ISR START: RCALL DISP_LED ;gọi CTC hiển thị ra LED
.ORG 0X40 RJMP START
MAIN: LDI R16,$FF ;OUTPORT=output DISP_LED: ….
OUT OUTPORT_DR,R16 RET
LDI R16,0 ;xóa OUTPORT hiển thị 0 TAB_LED: .DB 0XC0,0XF9,0XA4,0XB0,0X99,0X92
OUT OUTPORT,R16 .DB 0X82,0XF8,0X80,0X90
SBI PORTD,2 ;R kéo lên chân INT0,INT1 INT0_ISR: ….
SBI PORTD,3 RETI
LDI R16,HIGH(TF) ;nạp OCR1A=TF=TOP INT1_ISR: ….
STS OCR1AH,R16 ;ghi byte cao trước RETI
LDI R16,LOW(TF) ;ghi byte thấp sau TIMER1_COMPA_ISR:
STS OCR1AL,R16 ….
RETI

MSSV: ........................................ Họ và tên SV: .......................................................................................................... Trang 4/4


Lưu ý: Sinh viên xem hình ở trang Phụ lục hình.
Phụ lục hình
MSSV: ........................................ Họ và tên SV: ..........................................................................................................................

Lưu ý: SV ghi đầy đủ MSSV, họ và tên và nộp lại trang Phụ lục hình này kèm với đề thi.

Câu hỏi 1:

Hình 1 Bảng 1
8 x 330
PC0
Các trạng thái LED (LED sáng , LED tối ):
t1=0.5s t 2 =1.0s t 3 =1.5s t 4 =2.0s t 5 =2.5s t 6 =3.0s …
PB3 PC1

ATmega324P

PC2 …
PC3 …
PC4 …

PC5

PC6 …
PC7 …

Câu hỏi 2:
Hình 2
a

f b

e c

PD2 RXD1
PD3 TXD1

IC 7447: có chức năng giải mã từ BCD sang LED 7 đoạn anode chung. Ví dụ: ngõ vào DCBA = 0000,
ngõ ra QA…QG = 0000001  LED 7 đoạn hiển thị số 0.
Câu hỏi 3:
Hình 3a Hình 3b

LED1

ADC2/PA2
LED2

Câu hỏi 4:
Hình 4

You might also like