báo cáo thí nghiệm vi xử lab 4 lab 4 1 lập trình sử dụng ngắt

32 1 0
Tài liệu đã được kiểm tra trùng lặp
báo cáo thí nghiệm vi xử lab 4 lab 4 1 lập trình sử dụng ngắt

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Trang 1

ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINHTRƯỜNG ĐẠI HỌC BÁCH KHOA

KHOA ĐIỆN-ĐIỆN TỬ🙞···☼···🙞

Lớp :L05_nhóm:09

Sinh viên thực hiệnMã số sinh viên

Huỳnh Nguyễn Minh HuyHuỳnh Văn Quỳnh

Võ Huỳnh Quang Lập

2211179 2212885 1913926

Trang 2

BÁO CÁO LAB 4

b) Kết nối PC0 vào oscilloscope để đo dạng sóng

c) (Lưu ý: tần số xung clock cho CPU trên kit thí nghiệm là 8Mhz)

HD: Mỗi lần xảy ra ngắt cộng số đếm lên 1, nếu số đếm bằng 5 thì đảo PC0 và resetsố đếm về 0.

c) Biên dịch chương trình và quan sát oscilloscope để kiểm tra chương trình.

BÀI 3

Trang 3

a) Kết nối các tín hiệu cần thiết để điều khiển khối LED 7 đoạn.

b) Sử dụng ngắt COMPARE_MATCH của timer 1 như ở Bài 2 để xuất số 1-2-3-4 ra 4LED 7 đoạn với tần số quét 50 Hz Để đo tần số quét, đảo chân PC0 mỗi lần chuyểnsang LED kết tiếp và đo xung này trên oscilloscope.

(Tham khảo Chương 4, tài liệu hướng dẫn thí nghiệm)

Hướng dẫn:

Sử dụng ngắt UART để nhận ký tự Trong ngắt UART tăng biến đếm (16 bit), chuyển

số này thành số BCD và ghi vào 4 byte LED7segValue Ví dụ số đếm đang là 500, ta

ghi 0-5-0-0 vào 4 byte này.

Phần quét LED giữ nguyên như ở bài 3.

Tham khảo chương 4, phần 4.4, tài liệu hướng dẫn thí nghiệm.

BÀI 5

a) Kết nối thêm các tín hiệu I2C vào module RTC Đưa tín hiệu MFP của RTC vào 1chân ngắt ngoài Thêm vào bài 4 các chức năng sau:

b) Khởi động RTC với thời gian hiện hành, xuất tín hiệu MFP tần số 1 Hz

c) Sử dụng ngắt ngoài của AVR, cứ mỗi khi có ngắt thì đọc thời gian giờ:phút:giây từRTC và xuất ra dòng 2 của LCD

Lưu ý: Các chức năng ở bài 4 vẫn được giữ nguyên.

BÀI 6

a) Kết nối các tín hiệu cần thiết để điều khiển LED ma trận (gỡ bỏ các dây nối đếnLCD, Led 7 đoạn, RTC, UART).

Trang 4

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 matrận Quét LED ma trận sử dụng ngắt timer với tần số quét 25 Hz.

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

d) Viết chương trình để hiển thị Logo Trường ĐH Bách Khoa lên LED ma trận.

BÀI 1

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

a) Với chế độ Normal mode, mỗi khi vào ngắt Overflow ta có phải khởi động lại thanh ghi đếm hay không?

Trong chế độ Normal mode, khi xảy ra ngắt Overflow, thanh ghi đếm (TCNTx) sẽ tự động được khởi động lại từ giá trị 0 Vì vậy, ta không cần thiếtphải khởi động lại thanh ghi đếm trong ngắt Overflow.

b) Giải thích các giá trị ghi vào các thanh ghi cấu hình timer và prescaler.2 Mã nguồn chương trình với chú thích

Trang 6

BÀI 2

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

a Với chế độ CTC mode, mỗi khi vào ngắt COMPARE_MATCH ta có phảikhởi động lại thanh ghi đếm hay không?

Trong chế độ CTC mode của AVR, khi xảy ra ngắt COMPARE_MATCH thì giá trịcủa thanh ghi đếm sẽ không bị khởi động lại Thay vào đó, thanh ghi đếm sẽ giữnguyên giá trị và bắt đầu đếm lại từ đó.

b Điểm tiện lợi của chế độ này so với cách cấu hình ở bài 1 là như thế nào?- Chế độ CTC mode cho phép đếm thời gian bằng cách so sánh giá trị củathanh ghi đếm với giá trị của thanh ghi so sánh (OCRnx) Chế độ này đơngiản, dễ hiểu và tiết kiệm bộ nhớ hơn chế độ normal mode, vì ta chỉ cần cấuhình một thanh ghi so sánh duy nhất thay vì phải cấu hình hai thanh ghi nhưtrong chế độ normal mode.

Trang 7

-Ở chế độ CTC mode, ta có thể sử dụng ngắt COMPARE MATCH hoặc ngắtOVERFLOW để kích hoạt các tác vụ khác nhau Trong khi đó, trong chế độnormal mode, ta chỉ có thể sử dụng ngắt OVERFLOW để kích hoạt ngắt Từđó, ở chế độ CTC mode sẽ linh hoạt hơn trong việc chọn cách sử dụng ngắt.- Trong chế độ CTC mode, ta có thể cấu hình thanh ghi đếm để đếm lên hoặcđếm xuống Trong khi đó, trong chế độ normal mode, ta chỉ có thể đếm lên.c Giải thích các giá trị ghi vào các thanh ghi cấu hình timer và prescaler.2 Mã nguồn và chú thích

.EQU

Trang 8

BÀI 3

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

a Để đạt được tần số quét 50Hz thì 1 LED sẽ sáng trong bao lâu?

Để đạt được tần số quét 50Hz, thời gian mỗi chu kỳ là 1/50 = 0.02 giây= 20ms Vậy 1 LED sẽ sáng trong 20ms/4 = 5ms.

b Khi đó, chân PC0 (đảo mỗi khi chuyển LED) sẽ có tần số là baonhiêu?

Tần số của chân PC0 sẽ có tần số là 100Hz.

c Số lần xảy ra ngắt cần thiết để chuyển LED là bao nhiêu?Để chuyển LED cần 16 lần ngắt.

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

Trang 9

.EQU LED7=PORTA

.EQU LED7_DR=DDRA.EQU CONT=PORTB.EQU CONT_DR=DDRB.EQU DATA=0

.EQU POS=1

.EQU OSC_PORT=PORTC.EQU OSC_DR=DDRC.EQU OSC=0

.DEF COUNT=R20.ORG 0

RJMP MAIN.ORG 0x001A

RJMP TIMER1_COMPA.ORG 0x0020

RJMP TIMER0_COMPA.ORG 0x40

MAIN: //STACK

LDI R16,HIGH(RAMEND); đưa stack lên vùng caoOUT SPH,R16

LDI R16,LOW(RAMEND)OUT SPL,R16

//7SEGSER R16

Trang 10

OUT LED7_DR,R16; port A = output;CONT

LDI R16,(1<<DATA)|(1<<POS)OUT CONT_DR,R16

LDI R16,(1<<OSC)OUT OSC_DR,R16//COUNT

CLR COUNT

LDI R16,38;DELAY 5MSOUT OCR0A,R16

OUT TCCR0A,R16

LDI R16,5;PRE-SCALE=1024OUT TCCR0B,R16

LDI R16,(1<<OCIE0A)STS TIMSK0,R16LDI R17,4

LDI R18,1CLR R20

LDI R16,(1<<OSC)HERE_TN3:

RJMP HERE_TN3TIMER0_COMPA:

Trang 11

RCALL OUT_LEDCLC

LSL R18DEC R17

BRPL CONTINUE_TIMER0LDI R17,4

LDI R18,1

CONTINUE_TIMER0:EOR R20,R16

OUT OSC_PORT,R20RETI

TIMER1_COMPA:INC COUNTCPI COUNT,5

BRNE CONTINUE_TIMER2EOR R17,R16

OUT OSC_PORT,R17CLR COUNT

CONTINUE_TIMER2: RETI

OUT_LED: //OFFET:R17 POS:R18; giao tiếp LEDPUSH R18

PUSH R17COM R18OUT LED7,R18

Trang 12

SBI CONT,POSCBI CONT,POS

LDI ZH,HIGH(TABLE<<1) ;LDI ZL,LOW(TABLE<<1)ADD ZL,R17

LPM R17,ZOUT LED7,R17SBI CONT,DATACBI CONT,DATAPOP R17

POP R18RET

.ORG 0X200TABLE: DB

0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X88,0X83

Trang 14

BÀI 4

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

a Mô tả các kết nối trên kit.

Trang 15

b Mô tả cách cấu hình UART Baud rate 9600, 8 bit data

c Chuyển đổi số đếm thành số BCD để ghi vào bộ đệm hiển thị LEDnhư thế nào?

- Chia số đếm cho 10, lấy phần nguyên và phần dư Phần dư này sẽtương ứng với chữ số cuối cùng của số đếm (hàng đơn vị)

Trang 16

- Tương tự, lấy phần nguyên của kết quả ở bước trước và chia cho 10,lấy phần nguyên và phần dư Phần dư này sẽ tương ứng với chữ số thứhai của số đếm (hàng chục)

- Lặp lại việc lấy phần nguyên và phần dư cho đến khi phần nguyênVề 0 Những phần dư lấy được trong các lần chia sẻ từ phải sang tráitạo thành số BCD tương ứng với số đếm.

- Ghi kết quả các chữ số này vô bộ đệm hiển thị LED theo yêu cầu.2 Mã nguồn và chú thích

.EQU LCD=PORTB

.EQU LCD_DR=DDRB.EQU RS=0

.EQU RW=1.EQU E=2

.EQU LED=PORTA.EQU LED_DR=DDRA.EQU CONT=PORTD.EQU CONT_DR=DDRD.EQU DATA=6

.EQU POS=7

.DEF COUNT_H=R23.DEF COUNT_L=R24.ORG 0

RJMP MAIN//.ORG 0x0020

//RJMP TIMER0_COMPA.ORG 0x28

RJMP USART0_RX.ORG 0x40

LDI R16,HIGH(RAMEND); đưa stack lên vùng cao

Trang 17

OUT SPH,R16

LDI R16,LOW(RAMEND)OUT SPL,R16

RCALL OUT_LED//LCD

SER R16

OUT LCD_DR,R16CBI LCD,RSCBI LCD,RWCBI LCD,E

RCALL RESET_LCD

LDI R18,0x28 ; 2 dòng font 5x8, 4 bit LDI R19,0x01 ; clear display

LDI R20,0x0C ; display on, off control

LDI R21,0x06 ; con trỏ dịch phải, địa chỉ DDRAM tăng 1 khi ghi data,màn hình không dịch (06H)

RCALL INIT_LCDSTART:

RCALL DIV_1000MOV R17,R6LDI R18,1

RCALL OUT_LED

Trang 18

RCALL DELAYMOV R17,R7LDI R18,2

RCALL OUT_LEDRCALL DELAYMOV R17,R8LDI R18,4

RCALL OUT_LEDRCALL DELAYMOV R17,R9LDI R18,8

RCALL OUT_LEDRCALL DELAYRJMP START//HERE: RJMP HEREDIV_1000://R9:R8:R7:R6

//R17:R16=1000MOV R1,COUNT_HMOV R0,COUNT_LLDI R17,HIGH(1000)LDI R16,LOW(1000)CLR R9

THOUSAND: SUB R0,R16 ; lấy giá trị hàng ngànSBC R1,R17

BRCS END_THOUSANDINC R9

RJMP THOUSAND

END_THOUSAND: ADD R0,R16ADC R1,R17

//R17:R16=100

Trang 19

LDI R17,HIGH(100)LDI R16,LOW(100)CLR R8

HUNDRED: SUB R0,R16 ; lấy giá trị hàng trămSBC R1,R17

BRCS END_HUNDREDINC R8

RJMP HUNDRED

END_HUNDRED: ADD R0,R16ADC R1,R17

//R16=10LDI R16,10CLR R7

DOZEN: SUB R0,R16BRCS END_DOZENINC R7

RJMP DOZEN

END_DOZEN: ADD R0,R16MOV R6,R0

RETINIT_UART:

Trang 20

POINTER_SETUP: //DATA: R17PUSH R17

LDI R17,0x80CBI LCD,RS

RCALL OUT_LCD4LDI R16,1

RCALL DELAY_USPOP R17

SBI LCD,RS

RCALL OUT_LCD4LDI R16,1

RCALL DELAY_USRET

USART0_RX:LDS R17,UDR0

RCALL POINTER_SETUPINC COUNT_L

BRNE SKIP_HINC COUNT_H

SKIP_H: CPI COUNT_L,LOW(1001)BRNE END_INT

CPI COUNT_H,HIGH(1001)BRNE END_INT

CLR COUNT_HCLR COUNT_L

END_INT: //OUT PORTC,COUNT_LRETI

OUT_LED: //DATA:R17 POS:R18COM R18

Trang 21

OUT LED,R18SBI CONT,POSCBI CONT,POS

LDI ZH,HIGH(TABLE<<1)LDI ZL,LOW(TABLE<<1)ADD ZL,R17

LPM R17,ZOUT LED,R17SBI CONT,DATACBI CONT,DATARET

OUT_LCD4:LDI R16,1

RCALL DELAY_USIN R16,LCD

ANDI R16,(1<<RS)PUSH R16

PUSH R17ANDI R17,0xF0OR R17,R16

RCALL OUT_LCDLDI R16,1

RCALL DELAY_USPOP R17

POP R16SWAP R17ANDI R17,0xF0OR R17,R16

RCALL OUT_LCDRET

Trang 22

OUT LCD,R17SBI LCD,ECBI LCD,ERET

LDI R17,0x30 ; ghi lệnh $30 lần 1

RCALL OUT_LCD ;/-strong/-heart:>:o:-((:-hLDI R16,41 ; delay 4.1ms

RCALL DELAY_USCBI LCD,RS

LDI R17,0x30 ; ghi lệnh $33 lần 2RCALL OUT_LCD

RCALL DELAY_USCBI LCD,RS

LDI R17,0x30RCALL OUT_LCD

RCALL DELAY_USCBI LCD,RS

LDI R17,0x32 ; ghi lệnh $32 lần 3RCALL OUT_LCD4

//FUNCTION SET

Trang 23

CBI LCD,RSMOV R17,R18RCALL OUT_LCD4MOV R17,R19RCALL OUT_LCD4

RCALL DELAY_USMOV R17,R20RCALL OUT_LCD4MOV R17,R21RCALL OUT_LCD4RET

DELAY_US: ; Delay R16*100usMOV R15,R16

LDI R16,200

LP1: MOV R14,R16LP2: NOP

DEC R14BRNE LP2DEC R15BRNE LP1RET

DELAY: //R20, R21PUSH R20PUSH R21LDI R20,10

LZP1: LDI R21,250LZP2: NOP

DEC R21BRNE LZP2DEC R20

Trang 24

BREQ LZP1POP R21POP R20RET

.ORG 0x200TABLE: DB

BÀI 5

1 Trả lời các câu hỏia Mô tả kết nối trên kit

b Để xảy ra ngắt 1s 1 lần thì ngắt ngoài cấu hình như thế nào?

Sử dụng chế độ Normal với độ chia Prescaler được cấu hình sao cho tần sốđếm lên là 1Hz Cấu hình thanh ghi OCR để so sánh với giá trị đếm tươngứng và tạo ra ngắt Sau đó, ta bật cờ ngắt cho ngắt ngoài trên thanh ghiEICRA và set bit EIMSK.

c Hiện tượng gì sẽ xảy ra nếu ta cấu hình ngắt ngoài tích cực theo mức thấp?Nếu ta cấu hình ngắt ngoài tích cực theo mức thấp, điều kiện kích hoạtngắt là đầu vào ngắt có mức điện áp thấp (tức là logic 0) Khi ngắt đượckích hoạt, vi điều khiển sẽ ngắt quá trình thực hiện chương trình chính vàthực hiện tác vụ được gắn với ngắt Nếu không có tín hiệu ngắt nào đượcđưa vào ngõ vào ngắt, giá trị mặc định trên đầu vào sẽ là giá trị cao (tức làlogic 1) Trong trường hợp này, ngắt sẽ không được kích hoạt và chươngtrình sẽ tiếp tục thực hiện các lệnh khác trong chương trình chính.

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

BÀI 6

1 Trả lời các câu hỏia Mô tả kết nối trên kit

Trang 25

b Để có tần số quét 25Hz thì một cột LED sáng trong bao lâu?

Để có tần số quét 25Hz, thời gian giữa hai lần quét liên tiếp là 1/25 =0,04s Vì ma trận LED 8x8 có 8 cột LED, thời gian hiển thị cho mỗi cộtLED sẽ là 0,04 s / 8 = 0,005s = 5ms.

c Sự khác nhau khi quét ở tần số 25Hz và 125Hz

Ma trận LED ở tần số 125Hz sẽ quét nhanh hơn làm cho đèn LED hiển thịrõ ràng, không bị chập chờn.

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

.EQU SHIFT_PORT=PORTA

.EQU SDI=0 ; DS // SDI - A[0] -> SDI

.EQU SRCLK=1 ; SH-CP // CLK - A[1] -> SRCLK

Trang 26

.EQU RCLK=2 ; ST-CP // LATCH - A[2] -> RCLK.ORG 0

RJMP MAIN ORG $1A

RJMP ISR_TIMER1_COMPA.ORG $40

MAIN : // TN -> COMMON ANODE - MP -> COMMON CATHODE

// khai bao B output-off, kiem soat chon led sang theo Cot (column) - quet Cot

LDI R16,$00 ; theo Cot -> de off led -> muc 1 (TN)OUT DDRB,R16 ; ma cac bit qua bo dem ULN2803 ->dao bit ->muc0 lam tat led (TN)

LDI R16,$00 ; ///MP : $FF - TN : $00OUT PORTB,R16 ; B is output - off, tat led

// khai bao PA[2:0] output, kiem soat xuat Ma led theo Cot (colmun) -> dung IC 535

LDI R16,$07

OUT SHIFT_DDR,R16LDI R16,$00

OUT SHIFT_PORT,R16 ; PA[2:0] is output - off// cac bien can thiet

LDI R17,$01 ; xac dinh Cot, quet led thu 1 truoc ///MP : $FE - TN : $01

LDI R18,$00 ; 8 lan quet Cot// khoi tao Timer 1, mode CTC (4), clk/64

Trang 27

LDI R16,$00STS TCNT1H,R16

STS TCNT1L,R16 ; thanh ghi dem TCNT1 = 00LDI R16,$00

STS TCCR1A,R16 ; mode CTC (4), clk/64LDI R16,HIGH(124)

LDI R16,(1<<OCIE1A)

STS TIMSK1,R16 ; enable Ngat OCFA Timer 1

LOOP :

RJMP LOOP

//Cac chuong trinh ngat :/*ISR_TIMER1_COMPA :INPUT : NONE

NOP

Trang 28

//Cac chuong trinh con /*LOOKUP :

INPUT : R18OUTPUT : R19

DESCRIPTION : R18 dai dien cho Ma led o Cot thu n, R19 chua MA led*/

LOOKUP :

LDI ZH,HIGH(LETTER_A<<1)LDI ZL,LOW(LETTER_A<<1)ADD ZL,R18

LPM R19,Z+RET

/*SHIFT_MA_LED :INPUT : R19

Trang 29

ROL R19

BRCC BIT_0 ; co C=0 -> BIT_0 -> xuat ra IC595 bit 0SBI SHIFT_PORT,SDI

RJMP NEXTBIT_0:

CBI SHIFT_PORT,SDINEXT:

SBI SHIFT_PORT,SRCLKNOP

CBI SHIFT_PORT,SRCLK ; dua bit vao thanh ghi cua IC595DEC R16

BRNE AGAIN

SBI SHIFT_PORT,RCLKNOP

LETTER_A : DB $00,$3F,$4C,$8C,$8C,$4C,$3F,$00///MP : $FF,$C0,$B3,$74,$74,$B3,$C0,$FF

///TN : $00,$3F,$4C,$8C,$8C,$4C,$3F,$00

BACH_KHOA: DB $0E,$11,$6D,$92,$92,$6D,$11,$0E//MP : $F1,$EE,$92,$6D,$6D,$92,$EE,$F1

Trang 30

//TN : $0E,$11,$6D,$92,$92,$6D,$11,$0E/*GHI CHU :

MP : mo phongTN : thi nghiem*/

Trang 31

LAB 4-2

GIAO TIẾP I/O VÀ CÁC LỆNH TÍNH TOÁN

 Hiểu và sử dụng được ngắt timer

 Hiểu cách điều khiển và đo tốc độ động cơ

● Kết nối động cơ vào kit thí nghiệm

● Kết nối tín hiệu từ 2 switch trên dipswitch vào 2 chân port của AVR● Kết nối tín hiệu từ 2 nút nhấn vào 2 chân port của AVR

● Kết nối tín hiệu từ chân OC0B ra 1 kênh đo của khối test point

● Kết nối tín hiệu từ 2 chân port điều khiển chiều quay thuận/ngược raled đơn để kiểm tra trạng thái.

b. Biên dịch, thực thi và kiểm tra hoạt động của chương trình bằng cách đo dạngsóng trên oscilloscope và quan sát trạng thái các LED khi thay đổi dip switchvà khi nhấn các nút nhấn tăng/giảm tốc độ.

c. Kết nối tín hiệu PWM vào MOTOR_ENABLE, tín hiệu điều khiển chiều quayvào MOTOR_CTRL1, MOTOR_CTRL2 trên J76 của khối DC_MOTOR d. Kiểm tra hoạt động của hệ thống.

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

Trang 32

LAB 4-2

GIAO TIẾP I/O VÀ CÁC LỆNH TÍNH TOÁN

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

Ngày đăng: 13/05/2024, 14:56

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan