1. Trang chủ
  2. » Giáo Dục - Đào Tạo

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

24 0 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Thông tin cơ bản

Tiêu đề Lập Trình Sử Dụng Ngắt
Tác giả Nhóm 3, Lớp DL03
Trường học Đại Học Quốc Gia Thành Phố Hồ Chí Minh
Chuyên ngành Vi Xử Lý
Thể loại Báo Cáo Thí Nghiệm
Năm xuất bản 2024
Thành phố TP Hồ Chí Minh
Định dạng
Số trang 24
Dung lượng 651,25 KB

Nội dung

Trả lời các câu hỏi a.. Trả lời các câu hỏi a.. - Số lần xảy ra ngắt để quét xong 1 LED và chuyển qua 1 LED khác là 1 lần ngắt.. Trả lời các câu hỏi a.. Mô tả cách cấu hình UART - Ta

Trang 1

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC BÁCH KHOA

Trang 2

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?

- Với chế độ Normal mode, mỗi khi vào ngắt OverFlow ta cần phải khởi động lại thanh ghi đếm

b Giải thích các giá trị ghi vào các thanh ghi cấu hình timer và prescaler

- Ta cần tạo ra sóng vuông tần số 1 kHz, tức là nửa chu kì mức cao và nửa chu

kì mức thấp lần lượt duy trì trong 0.5ms

- Chọn mode NOR, bằng cách nạp giá trị 0 vào thành ghi TCCR1A

- Chọn hệ số chia N= 8, bằng cách ghi giá trị 0x02 vào thanh ghi TCCR1B

Tdelay 510−4

- Tính hệ số nạp vào thanh ghi TCNT1, n =

Tosc  N = 1

8106 8 = 500 → giá trị nạp là -500

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

Trang 3

BÀI 2

• Kết quả thí nghiệm:

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ải khởi động lại thanh ghi đếm hay không?

- Với chế độ CTC mode, mỗi khi vào ngắt COMPARE_MATCH ta không cần phải khởi động lại thanh ghi đếm

START:

RJMP START TIMER1_OVF_ISR:

Trang 4

RJMP START TIMER1_COMPA_ISR:

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?

- Ta có thể giảm thiểu được số câu lệnh sử dụng, giảm thiểu được sai số dùng

để tạo xung vuông trong chương trình ngắt

c Giải thích các giá trị ghi vào các thanh ghi cấu hình timer và prescaler

- Ta cần tạo ra sóng vuông tần số 100 Hz, tức là nửa chu kì mức cao và nửa chu

kì mức thấp lần lượt duy trì trong 5ms

- Chọn mode CTC cho Timer 1 và hệ số chia N=8 bằng cách nạp giá trị 0 vào thanh ghi TCCR1A và giá trị 0x10 vào thanh ghi TCCR1B

Tdelay 510−3

- Tính hệ số nạp vào thanh ghi TCNT1, n =

Tosc  N = 1

8106 8 = 5000 → giá trị nạp là n-1= 4999

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

Trang 5

RJMP START TIMER1_COMPA_ISR:

Trang 6

BÀI 3

• Kết quả thí nghiệm:

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ì 1 LED sáng trong 0.02 giây

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

- Khi đó, chân PC0 sẽ có tần số đúng bằng 50Hz

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

- Số lần xảy ra ngắt để quét xong 1 LED và chuyển qua 1 LED khác là 1 lần ngắt Vậy cần 4 lần ngắt để quét xong hết 4 LED

RETI

Trang 7

.EQU OUTPORT= PORTA

CBI PORTB,4 ; KHOA CHOT U4

CBI PORTB,5 ; KHOA CHOT U5

;

SBI DDRC,0

CBI PORTC,0

CLR R19

; PC0: TAN SO CUA 1 LED

; dem du 5 lan dao

LDI R17,HIGH(7999) ; NAP OCR1A

LDI R17,4

CLR R18 LOOP:

LDI R16,$FF

OUT OUTPORT,R16

SBI PORTB,5

NOPCBI PORTB,5

LDI R20,(1<<OCIE1A) ; CHO PHEP NGAT TIMER1_COMPA

STS TIMSK1,R20

CPI R19,5

BRNE TT

DEC R17 ; XUAT LED TIEP THEO

INC R18 ; CHUYEN MA LED SANG

DISPLAY_7SEG:

PUSH R17

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

Trang 8

OUT OUTPORT,R18 ; XUAT MA LED SANG

SBI PORTB,5

NOPCBI PORTB,5

.DB 0XC6, 0XA1, 0X86, 0X8E TAB_7SEG_CONTROL: DB 0b00001110, 0b00001101, 0b00001011, 0b00000111

; TIMER1_COMPA_ISR:

; dem du 5 lan thi dao

; CAM NGAT TIMER1_COMPA_ISR

CBR R20,(1<<OCIE1A)

STS TIMSK1,R20 NO_CHANGE:

RETI

BÀI 4

Trang 9

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

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

- Kết nối tín hiệu UART với máy tính Tx → PD1, Rx→ PD0

- Port A của VĐK nối với LCD

- Port B nối với J34, NLE0→ PC0, NLE1→PC1

b Mô tả cách cấu hình UART

- Ta dùng USART0 để nhận kí tự được gửi xuống kit từ Hercules, nối chân RX trên RS232 vào chân RXD0 trên kit thí nghiệm, nối các chân PORT để hiển thị LCD và quét LED như trong chương trình

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

- Ta viết 1 chương trình con chia số đếm (lưu trong 16 bit của 2 thanh ghi) cho

10, lần lượt thu được số BCD của hàng đơn vị, hàng chục, hàng trăm, hàng nghìn, sau đó lưu vào bộ nhớ Khi tiến hành quét LED, ta tiến hành lấy lại 4

số BCD này, thực hiện chuyển các số BCD thành mã 7 đoạn bằng 1 chương trình con khác, sau đó tiến hành quét LED

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

.DEF FLAG = R23 ; CO LENH BAO HIEU DA NGAT

.DEF DATA_REC = R22 ; R20 CHUA KI TU NHAN DUOC (ASCII)

; DEM SO LAN NHAN KI TU DUOC LUU O R25:R24

.EQU LCD = PORTA ; PORTA HIEN THI LCD

.EQU LCD_DR = DDRA

.EQU LED = PORTB

.EQU LED_DR = DDRB

.EQU RS = 0 ; BIT RS PA0

.EQU RW = 1 ; BIT RW PA1

.EQU E = 2 ; BIT E PA2

.EQU DATA = 0X200 ; LUU DATA VUA NHAN DUOC VAO FLASH DE TRUY XUAT RA LCD

.EQU SR_ADR = 0X100 ; LUU SO DEM VAO SRAM DE TRUY XUAT RA LED

.ORG 0

RJMP START

.ORG 0X28

RJMP USART0_RX ; NGAT LUC NHAN KI TU XONG

.ORG 0X40 ; DUA CHUONG TRINH CHINH THOAT RA KHOI VUNG INTERRUPTS

OUT DDRC, R16 ; PORTC LA PORT XUAT TIN HIEU LE01

CBI PORTC, 0 ; KHOA NGO RA U2

Trang 10

CBI PORTC, 1 ; KHOA NGO RA U3

RCALL DELAY_US ; CTC DELAY 100US X R16 = 25MS

CBI LCD, RS ; RS = 0 GHI LENH

LDI R17, 0X30 ; MA LENH 30 LAN 1

RCALL OUT_LCD4

LDI R16, 42

RCALL DELAY_US ; DELAY 4,2MS

CBI LCD, RS ; RS = 0 GHI LENH

LDI R17, 0X30 ; MA LENH 30 LAN 2

RCALL OUT_LCD4

LDI R16, 2

RCALL DELAY_US ; DELAY 200US

CBI LCD, RS ; RS = 0 GHI LENH

LDI R17, 0X30 ; MA LENH 30 LAN 3

RCALL OUT_LCD4

LDI R16, 2

RCALL DELAY_US ; DELAY 200US

CBI LCD, RS ; RS = 0 GHI LENH

LDI R17, 0X20 ; MA LENH 20

RCALL OUT_LCD4

LDI R18, 0X28 ; FUNCTION SET 2 DONG FONT 5X8 MODE 4 BIT

LDI R19, 0X01 ; CLEAR DISPLAY

LDI R20, 0X0C ; DISPLAY ON, CON TRO OFF

LDI R21, 0X06 ; ENTRY MODE SET DICH PHAI CON TRO, DDRAM TANG 1 DIA CHI

RCALL INIT_LCD4 ; CTC KHOI DONG LCD 4 BIT

LDI R16, 0X30

LDI XH, HIGH(DATA)

LDI XL, LOW(DATA)

ST X, R16 ; BAN DAU USART CHUA NHAN GIA TRI, CHO = 0 (0X30 TRONG MA ASCII)

SEI ; CHO PHEP NGAT TOAN CUC

RCALL USART_INIT ; KHOI DONG USART

CBI LCD, RS ; RS = 0 GHI LENH

LDI R17, 0X01 ; XOA MAN HINH

LDI R17, 0X80 ; CON TRO BAT DAU O VI TRI 1 DONG 1

RCALL CURS_POS ; DAT CON TRO RA LCD

Trang 11

ST X, DATA_REC ; LUU KI TU VUA NHAN DUOC VAO SRAM

ADIW R24, 1 ; TANG SO DEM LEN 1

CPI R24, 232 ; NEU SO DEM = 1000 THI RESET LAI VE 0

; INIT LCD4 KHOI DONG LCD GHI 4 BYTE MA LENH THEO GIAO TIEP 4 BIT

; FUNCTION SET R18 = 0X28 2 DONG FONT 5X8 GIAO TIEP 4 BIT

; CLEAR DISPLAY R19 = 0X01 XOA MAN HINH

; DISPLAY ON/OFF CONTROL R20 = 0X0C MAN HINH ON, CON TRO OFF

; RENTRY MODE SET R21 = 0X06 DICH PHAI CON TRO , DC DDRAM TANG LEN 1 DVI

Trang 12

; -

; OUT LCD4 GHI MA LENH/ DATA RA LCD

; INPUT R17 CHUA MA LENH/ DATA 4 BIT CAO

; OUT_LCD GHI 1 BYTE MA LENH/DATA RA LCD

; CHIA LAM 2 LAN GHI 4 BIT

; INPUT R17 CHUA MA LENH/DATA

; BIN16_BCD CHUYEN SO NHI PHAN 16 BIT SANG SO BCD 4 DIGIT

; INPUT R25:R24 = SO NHI PHAN 16 BIT

; OUTPUT R21, R20 = BCD NEN, R21 TRONG SO CAO

; SU DUNG CTC DIV16_8 , 10 = SO CHIA

BIN16_BCD: CLR R20

CLR R21

RCALL DIV16_8

MOV R20, R16 ; R20 = DU : BCD DON VI

Trang 13

; DIV16_8 CHIA 2 SO NHI PHAN 16 BIT CHO 8 BIT

; INPUT R25:R24 LA SO BI CHIA, SO CHIA = 10

; OUTPUT R25:R24 = THUONG SO, R16 LA DU SO

; SD R28:R29 DE CAT THUONG SO TAM

; BCD_UNP TACH SO BCD NEN THANH KHONG NEN

; INPUT R20 = SO BCD NEN CHUC - DON VI

; R21 = SO BCD NEN NGAN - TRAM

; OUTPUT CAT VAO 4 O NHO DAU SRAM

BCD_UNP:

LDI XH, HIGH(SR_ADR)

LDI XL, LOW(SR_ADR)

MOV R17, R20 ; LAY BCD NEN TRONG SO THAP

ANDI R17, 0X0F ; LAY BCD DON VI

MOV R17, R21 ; LAY BCD NEN TRONG SO CAO

ANDI R17, 0X0F ; LAY BCD TRAM

RCALL BCD_UNP

LDI R18, 4 ; SO LAN QUET LED

LDI R19, 0XFE ; 1111 1110 LED 0 BAT DAU

Trang 14

OUT LED, R17 ; XUAT MA 7 DOAN

SBI PORTC, 0 ; MO U2

CBI PORTC, 0 ; KHOA U2

OUT LED, R19 ; XUAT MA QUET LED O U3

SBI PORTC, 1 ; MO U3

CBI PORTC, 1 ; KHOA U3

LDI R16, 20

RCALL DELAY_US

SEC ; C = 1 CHUAN BI QUAY TRAI

ROL R19 ; MA QUET LED KE TIEP

DEC R18

BRNE LOOP ; QUAY LAI LOOP KHI CHUA QUET DU 4 LAN

RET

Trang 15

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

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

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

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?

Trang 16

BÀI 6

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

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

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

- Kết nối PORTD với LED ma trận

- PB0→ Chân DATA, PB1→ LATCH, PB2→ CLK, PB3→ CLR

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ì một cột LED sáng trong 1/25Hz = 0,04s

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

- Ở tần số quét 25Hz thì một cột LED sáng trong 1/25Hz = 0,04s

- Ở tần số quét 125Hz thì một cột LED sáng trong 1/125Hz = 8ms

➔ Như vậy, ở 125Hz LED sẽ được quét nhanh hơn, ít bị chập chờn vì tần số cao

ở 25Hz mắt người sẽ nhìn thấy LED chớp tắt mà không phải cảm giác sáng liên tục như ở 125Hz

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

.equ clearSignalPort = PORTB ; Set clear signal port to PORTB

.equ clearSignalPin = 3 ; Set clear signal pin to pin 3 of PORTB

.equ shiftClockPort = PORTB ; Set shift clock port to PORTB

.equ shiftClockPin = 2 ; Set shift clock pin to pin 2 of PORTB

.equ latchPort = PORTB ; Set latch port to PORTB

.equ latchPin = 1 ; Set latch pin to pin 1 of PORTB

.equ shiftDataPort = PORTB ; Set shift data port to PORTB

.equ shiftDataPin = 0 ; Set shift data pin to pin 0 of PORTB

Trang 17

clr_tgdich:

cbi clearSignalPort, clearSignalPin ;clr thanh ghi dich

sbi clearSignalPort, clearSignalPin ;

Trang 18

pop r16 ; Restore the temporary register

ret ; Return from the function

shift_data:

push r18

cbi shiftClockPort, shiftClockPin

ldi r18, 8 ;dich 8 bit

shiftloop:

sbrc r27, 7 ; check MSB bit 0 bo qua

sbi shiftDataPort, shiftDataPin ; data=1

sbi shiftClockPort, shiftClockPin ; clk high

lsl r27 ; dich trai data

cbi shiftClockPort, shiftClockPin ; clk low

cbi shiftDataPort, shiftDataPin ; data = 0

dec r18

brne shiftloop

sbi latchPort, latchPin ; mo chot

cbi latchPort, latchPin ; dong chot

Trang 19

.equ clearSignalPort = PORTB ; Set clear signal port to PORTB

.equ clearSignalPin = 3 ; Set clear signal pin to pin 3 of PORTB

.equ shiftClockPort = PORTB ; Set shift clock port to PORTB

.equ shiftClockPin = 2 ; Set shift clock pin to pin 2 of PORTB

.equ latchPort = PORTB ; Set latch port to PORTB

.equ latchPin = 1 ; Set latch pin to pin 1 of PORTB

.equ shiftDataPort = PORTB ; Set shift data port to PORTB

.equ shiftDataPin = 0 ; Set shift data pin to pin 0 of PORTB

cbi clearSignalPort, clearSignalPin ;clr thanh ghi dich

sbi clearSignalPort, clearSignalPin ;

Trang 20

ldi r16, high($FA01) ; Chon N=1, n=64001 => T xap xi 8ms (125hz)

pop r16 ; Restore the temporary register

ret ; Return from the function

shift_data:

push r18

cbi shiftClockPort, shiftClockPin

ldi r18, 8 ;dich 8 bit

shiftloop:

sbrc r27, 7 ; check MSB bit 0 bo qua

sbi shiftDataPort, shiftDataPin ; data=1

sbi shiftClockPort, shiftClockPin ; clk high

lsl r27 ; dich trai data

cbi shiftClockPort, shiftClockPin ; clk low

Trang 21

BÀI 1

cbi shiftDataPort, shiftDataPin ; data = 0

dec r18

brne shiftloop

sbi latchPort, latchPin ; mo chot

cbi latchPort, latchPin ; dong chot

- Logo Trường ĐH Bách Khoa:

https://drive.google.com/file/d/1yGNhL1Euobl_8gGA- vM5DTZiCZYjifeT/view?usp=sharing

LAB 4-2: GIAO TIẾP I/O VÀ CÁC LỆNH TÍNH TOÁN

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

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

- Kết nối động cơ vào KIT

- Chân PA0 và PA1 nối với SWITCH 0 và 1:

- Chân PA 3 và PA4 nối với DIPSWITCH 0 và 1

- Chân PB0 nối với MOTOR_CTRL1

- Chân PB1 nối với MOTOR_CTRL2

- Chân PD6 nối với chân MOTOR_ENABLE

b Chụp ảnh dạng xung của 2 kênh encoder trong trường hợp quay thuận và quay nghịch

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

.DEF FLAG_REG = R18

.EQU SW_FLG = 0

.EQU CONT_IN = PINA

.EQU CONT_ROTDC = PORTB ; DIEU KHIEN CHIEU QUAY DONG CO

Trang 22

.EQU SW2 = 1 ; BUTTON DOWN SPEED

.EQU SW3 = 2 ; SWITCH SET UP CHIEU QUAY DONG CO

.EQU SW4 = 3 ; SWITCH DUNG DONG CO

.EQU PMIN = 5 ; DUTY CYCLE = 5% LA MIN

.EQU PMAX = 118 ; DUTY CYCLE = 95% LA MAX

.EQU DELTA = 6 ; THAY DOI (NHANH/CHAM) 5% DUTY CYCLE

OUT DDRD, R16; NGO RA DIEU KHIEN TOC DO DONG CO

LDI R16, (1 << MOTOR_CTRL1)|(1 << MOTOR_CTRL2)

OUT CONT_ROTDC_DDR, R16 ; NGO RA DIEU KHIEN CHIEU QUAY DONG CO

LDI R16, 0 ; PORTA LA INPUT CONTROL UP/DOWN SPEED AND ROTATION OF MORTOR DC

;DONG CO QUAY CHIEU THUAN

SBI CONT_ROTDC, MOTOR_CTRL1

CBI CONT_ROTDC, MOTOR_CTRL2

RJMP CONTINUE

REVERSE:

CBI CONT_ROTDC, MOTOR_CTRL1

SBI CONT_ROTDC, MOTOR_CTRL2

SBI PORTD, MOTOR_ENABLE

CBI CONT_ROTDC, MOTOR_CTRL1

CBI CONT_ROTDC, MOTOR_CTRL2

BRNE SW2_CHK ; KIEM TRA SW2

LDS R17, OCR2B ; DOC OCR2B

ADD R17, R19 ; R17 = R17 + DELTA

Trang 23

CPI R17, PMAX ; DO RONG XUNG VUOT PMAX?

BRCS UP_SP ; CHUA -> CAP NHAT GIA TRI MOI

LDI R17, PMAX ; GIOI HAN GIA TRI = PMAX

CPI R17, PMIN ; DO RONG XUNG DUOI PMIN?

BRCC DWN_SP ; CHUA -> CAP NHAT GIA TRI MOI

LDI R17, PMIN ; GIOI GIAN GIA TRI = PMIN

DWN_SP:

STS OCR2B, R17 ; CAP NHAT OCR2B

RJMP START

; -

;GET_SW DOC TRANG THAI SW1,SW2 CO CHONG RUNG

;TRA VE MA SW1 = 1 HOAC MA SW2 = 2 VA CO SW_FLG = 1 NEU CO SW NHAN

;TRA VE VO SW_FLG = 0 NEU KHONG CO SW NHAN

;SU DUNG R16, R17, CO SW_FLG THUOC THANH GHI FLAG_REG

POP R17 ; PHUC HOI MA SW

CPI R17, (1 << SW2) ; SW1 = 0 NHAN, SW2 = 1 KHONG NHAN

BRNE SW2_CODE ; KHONG PHAI KIEM TRA MA SW2

LDI R17, 1

RJMP SET_FLG ; BAO CO NHAN SW

SW2_CODE:

CPI R17, (1 << SW1) ; SW2 = 0 NHAN, SW1 = 1 KHONG NHAN

BRNE EXIT_SW ; KHONG PHAI -> THOAT

Trang 24

https://drive.google.com/file/d/1tZkAmxPYcpSFMxyP1knIhSHuvb1vOBm3/view?usp=sharing

Ngày đăng: 20/08/2024, 14:02

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w