Đang tải... (xem toàn văn)
ĐẠ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 2BÁ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 3a) 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 4b) 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 6BÀ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 8BÀ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 10OUT 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 11RCALL 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 12SBI 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 14BÀ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 15b 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 17OUT 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 18RCALL 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 19LDI 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 20POINTER_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 21OUT 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 22OUT 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 23CBI 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 24BREQ 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 25b Để 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 27LDI 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 29ROL 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 31LAB 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 32LAB 4-2
GIAO TIẾP I/O VÀ CÁC LỆNH TÍNH TOÁN
https://doe.dee.hcmut.edu.vn/