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

Báo cáo thí nghiệm vi xử lý lab 3 kết nối chân txd và rxd của uart0 vào vào tín hiệu uart txd0 và uart rxd0 trên header j85 Ở khối uart

43 1 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 đề Kết nối chân TxD và RxD của UART0 vào vào tín hiệu UART_TxD0 và UART_RxD0 trên header J85 Ở khối UART
Tác giả Nguyễn Ngọc Khôi, Nguyễn Thái Thành Nam, Nguyễn Thiện Khả
Người hướng dẫn PTS. Nguyễn Phan Hải Phú
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
Thành phố Thành phố Hồ Chí Minh
Định dạng
Số trang 43
Dung lượng 1,23 MB

Nội dung

MỤC TIÊU: Hiểu và sử dụng được các ngoại vi UART, I2C, SPI  Hiểu cách giao tiếp với RTC, EEPROM b Kết nối dây USB-Serial vào kit thí nghiệm c Setup chương trình Hercules với baudrate 9

Trang 1

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

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

KHOA ĐIỆN- ĐIỆN TỬ

BÁO CÁO THÍ NGHIỆM VI XỬ LÝ

LAB 3

NHÓM 5 - L03 GVHD: Nguyễn Phan Hải Phú

Trang 2

MỤC TIÊU:

 Hiểu và sử dụng được các ngoại vi UART, I2C, SPI

 Hiểu cách giao tiếp với RTC, EEPROM

b) Kết nối dây USB-Serial vào kit thí nghiệm

c) Setup chương trình Hercules với baudrate 9600, 8 bit data, no parity, 1 stop, no handshake.

d) Sử dụng các ví dụ mẫu trong tài liệu thí nghiệm, viết chương trình khởi động UART0 với các thông số như trên, chờ nhận một byte từ UART0 và phát ngược lại UART0.

e) Dùng Hercules truyền một ký tự xuống kit và quan sát các dữ liệu nhận được để kiểm tra hoạt động chương trình.

Trang 3

LDI R16, 6; 8 BIT KHONG XET CHAN LE , 1 STOP BIT

STS UCSR0C,R16 ; 1 STOP BIT KHONG XET CHAN LE

LDI R16,HIGH (RAMEND)

OUT SPH,R16 ; SET STACK

LDI R16, LOW (RAMEND)

SBRS R16,UDRE0 ; KIEM TRA CO TRONG KHONG

RJMP PHAT ; NEU CHUA TRONG THI TIEP TUC KIEM TRA LAI

Trang 4

STS UDR0,R18 ; KHI TRONG THI CHEP DU LIEU VAO UDR0

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

.DEF REG_FLAG=R19 ;REG_FLAG chứa các cờ báo

.DEF COUNT=R20 ;biế4n đế4m

.DEF NUM_MAX=R21 ;biế4n đặt giá trị MAX

.DEF NUM_MIN=R22 ;biế4n đặt giá trị MIN

Trang 5

.DEF POS_CRS=R23 ;biế4n đặt vị trí con tro@ hiế@n thị

.EQU LCD=PORTA ;PORTA hiế@n thị

.EQU E=2 ;bit E

.EQU SCL=0 ;ký hiệu chân SCL

.EQU SDA=1 ;ký hiệu chân SDA

.EQU SW1=0 ;ký hiệu chân SW1

.EQU SW2=1 ;ký hiệu chân SW2

.EQU STO=7 ;bit cho phép OSC RTC

.EQU VBATEN=3 ;bit cho phép nguồBn dự phòng

.EQU NULL=$00 ;mã kế4t thúc chuồRi ký tự

.EQU CTL_BYTE=0B11011110 ;byte điếBu khiế@n truy xuâ4t

CBI CONT_DR,SW1 ;chân SW1 input

SBI CONT,SW1 ;điện trở@ kéo lến chân SW1

CBI CONT_DR,SW2 ;chân SW2 input

SBI CONT,SW2 ;điện trở@ kéo lến chân SW2

LDI R17,$30 ;mã lệnh=$30 lâBn 1,RS=RW=E=0

RCALL OUT_LCD4 ;ctc ghi ra LCD

LDI R18,$28 ;Function set 2 dòng font 5x8,mode 4 bit

LDI R19,$01 ;Clear display

LDI R20,$0C ;display on,con tro@ off

LDI R21,$06 ;Entry mode set dịch pha@i con tro@,DDRAM tăng 1 đ/c

Trang 6

LDI R17,$80 ;con tro@ bă4t đâBu ở@ đâBu dòng 1

RCALL CURS_POS ;xuâ4t lệnh ra LCD

LDI ZH,HIGH(MSG1<<1);Z tro@ địa chỉ@ đâBu ba@ng MSG1 trong Flash ROM

LDI ZL,LOW(MSG1<<1)

RCALL MSG_DISP ;ghi MSG1 ra LCD

LDI R17,$C0 ;con tro@ bă4t đâBu ở@ đâBu dòng 2

RCALL CURS_POS ;xuâ4t lệnh ra LCD

LDI ZH,HIGH(MSG2<<1);Z tro@ đâBu ba@ng tra MSG2

RCALL TWI_START ;phát xung START

LDI R17,(CTL_BYTE|0X00);truy xuâ4t ghi RTC_TCCR

RCALL TWI_WRITE ;ghi RTC+W

LDI R17,0X07 ;địa chỉ@ thanh ghi Control

RCALL TWI_START ;phát xung START

LDI R17,(CTL_BYTE|0X00);truy xuâ4t ghi RTC_TCCR

RCALL TWI_WRITE ;ghi RTC+W

LDI R17,0X00 ;địa chỉ@ thanh ghi 0x00

RCALL TWI_WRITE

RCALL TWI_START ;phát xung START

LDI R17,(CTL_BYTE|0X01);truy xuâ4t đọc RTC_TCCR

RCALL TWI_WRITE ;ghi RTC+R

Trang 7

LDI R17,$0C ;xóa con tro@

LDI R17,$84 ;con tro@ bă4t đâBu ở@ dòng 1 vị trí thứ

RCALL CURS_POS ;xuâ4t lệnh ra LCD

LDI R17,$86 ;con tro@ bă4t đâBu ở@ dòng 1 vị trí giờ

RCALL CURS_POS ;xuâ4t lệnh ra LCD

DISP_NXT1:

LD R17,-X ;lâ4y data

CPI COUNT,1 ;data=sec

BRNE D_NXT ;khác,hiế@n thị tiế4p

CBR R17,(1<<STO) ;xóa bit ST

LDI XH,HIGH(RTC_BUF+4);X tro@ buffer RTC ngày

LDI XL,LOW(RTC_BUF+4)

LDI COUNT,3

LDI R17,$C6 ;con tro@ bă4t đâBu ở@ dòng 2 vị trí ngày

RCALL CURS_POS ;xuâ4t lệnh ra LCD

Trang 8

RJMP DISP_NXT2

; -

;Đặt lại RTC

; - SW_CHK:

RCALL GET_SW ;đọc SW chờ SW nhâ4n

CPI COUNT,0 ;cài đặt thứ?

BRNE HR_CHK ;khác,kiế@m tra giờ

LDI XH,HIGH(RTC_BUF+3);X tro@ buffer RTC thứ

LDI XL,LOW(RTC_BUF+3)

LDI NUM_MAX,7

LDI NUM_MIN,1

LDI POS_CRS,$84 ;đặt con tro@ vị trí thứ

RCALL SET_NUM ;đặt và hiế@n thị thứ

CPI COUNT,1 ;cài đặt giờ?

BRNE MI_CHK ;khác,kiế@m tra phút

LDI XH,HIGH(RTC_BUF+2);X tro@ buffer RTC giờ

CPI COUNT,2 ;cài đặt phút?

BRNE SEC_CHK ;khác,kiế@m tra giây

LDI XH,HIGH(RTC_BUF+1);X tro@ buffer RTC phút

CPI COUNT,3 ;cài đặt giây?

BRNE DAT_CHK ;kiế@m tra ngày

LDI XH,HIGH(RTC_BUF);X tro@ buffer RTC giây

Trang 9

RJMP RTC_SET

DAT_CHK:

CPI COUNT,4 ;cài đặt ngày?

BRNE MO_CHK ;khác,kiế@m tra tháng

LDI XH,HIGH(RTC_BUF+4);X tro@ buffer RTC ngày

CPI COUNT,5 ;cài đặt tháng?

BRNE YEA_CHK ;khác,kiế@m tra năm

LDI XH,HIGH(RTC_BUF+5);X tro@ buffer RTC tháng

CPI COUNT,6 ;cài đặt năm?

BRNE EXIT_CHK ;khác,thoát

LDI XH,HIGH(RTC_BUF+6);X tro@ buffer RTC năm

LDI COUNT,7 ;lưu vào RTCC

LDI XH,HIGH(RTC_BUF);X tro@ buffer RTC

LDI XL,LOW(RTC_BUF)

RCALL TWI_START ;phát xung START

LDI R17,(CTL_BYTE|0X00);truy xuâ4t ghi RTC

RCALL TWI_WRITE ;ghi RTC+W

LDI R17,0X00 ;địa chỉ@ thanh ghi giây

RCALL TWI_WRITE ;ghi địa chỉ@ TCCR

;GET_SW đọc trạng thái SW1,SW2 có chồ4ng rung

;Tra@ vếB mã SW1=1 hoặc mã SW2=2 và cờ SW_FLG=1 nế4u có SW nhâ4n

;Tra@ vếB cờ SW_FLG=0 nế4u khồng có SW nhâ4n

;Sư@ dụng R16,R17,cờ SW_FLG thuộc thanh ghi FLAG_REG

; - GET_SW:

CBR REG_FLAG,(1<<SW_FLG);xóa cờ báo nhâ4n SW

BACK0:

LDI R16,50 ;kiế@m tra SW nhâ4n 50 lâBn liến tục

WAIT0:

Trang 10

IN R17,CONT_IN

ANDI R17,(1<<SW1)|(1<<SW2);che bit SW1,SW2

CPI R17,(1<<SW1)|(1<<SW2);kiế@m tra SW nhâ4n?

BREQ EXIT_SW ;khồng nhâ4n thoát

DEC R16 ;có nhâ4n tiế4p tục

CPI R17,(1<<SW2) ;SW1=0 nhâ4n,SW2=1 khồng nhâ4n

BRNE SW2_CODE ;khồng pha@i kiế@m tra mã SW2

LDI R17,1 ;gán giá trị mã SW1

RJMP SET_FLG ;báo cờ nhâ4n SW

SW2_CODE:

CPI R17,(1<<SW1) ;SW2=0 nhâ4n,SW1=1 khồng nhâ4n

BRNE EXIT_SW ;khồng pha@i thoát

;SET_NUM cài đặt các giá trị thời gian chọn qua biế4n COUNT

;Nhâ4n/nha@ SW1 thoát

;Nhâ4n/nha@ SW2 cài đặt giá trị

;Sư@ dụng R17,R18,ctc CURS_POS,GET_SW

; - SET_NUM:

MOV R17,POS_CRS ;đặt vị trí con tro@ đúng vị trí cài đặt

CPI COUNT,3 ;cài đặt giây?

BRNE DAY_CHK ;khác,kiế@m tra ngày

CBR R17,(1<<STO) ;đúng,xóa bit ST

RJMP PRESET ;tiế4n hành đặt

DAY_CHK:

CPI COUNT,0 ;cài đặt ngày?

BRNE PRESET ;khác,tiế4n hành đặt

ANDI R17,0X07 ;lọc lâ4y data ngày

PRESET:

INC R17 ;tăng giá trị thếm 1

MOV R18,R17 ;câ4t giá trị đặt

ANDI R17,$0F ;che lâ4y 4 bit thâ4p

CPI R17,$0A ;giá trị<10

Trang 11

CP R17,NUM_MAX ;so sánh giới hạn MAX

BRCS DISP ;nho@ hởn,hiế@n thị

BREQ DISP ;bằng,hiế@n thị

MOV R17,NUM_MIN ;lớn hởn,tra@ vếB giới hạn MIN

DISP: ST X,R17 ;câ4t sồ4 BCD đặt vào buffer

RCALL NUM_DISP ;hiế@n thị sồ4 BCD đặt

PUSH R17 ;câ4t data

SWAP R17 ;hoán vị 4 bitthâ4p/cao

ANDI R17,0X0F ;che lâ4y sồ4 BCD cao

ORI R17,0X30 ;chuyế@n sang mã ASCII

ANDI R17,0X0F ;che lâ4y sồ4 BCD thâ4p

ORI R17,0X30 ;chuyế@n sang mã ASCII

;MSG_DISP hiế@n thị chuồRi ký tự kế4t thúc bằng mã NULL đặt trong Flash ROM

;Input: Z chứa địa chỉ@ đâBu chuồRi ký tự

;Output: hiế@n thị chuồRi ký tự ra LCD tại vị trí con tro@ hiện hành

;Sư@ dụng R16,R17,ctc DELAY_US,OUT_LCD

; -

MSG_DISP:

LPM R17,Z+ ;lâ4y mã ASCII ký tự từ Flash ROM

CPI R17,NULL ;kiế@m tra ký tự kế4t thúc

BREQ EXIT_MSG ;ký tự NULL thoát

LDI R16,1 ;chờ 100μsxR16 s

RCALL DELAY_US

SBI LCD,RS ;RS=1 ghi data hiế@n thị LCD

RCALL OUT_LCD ;ghi mã ASCII ký tự ra LCD

RJMP MSG_DISP ;tiế4p tục hiế@n thị ký tự

Trang 12

RCALL OUT_LCD

RET

; -

;INIT_LCD4 khở@i động LCD ghi 4 byte mã lệnh theo giao tiế4p 4 bit

;Function set:R18=$28 2 dòng font 5x8 giao tiế4p 4 bit

;Clear display:R19=$01 xóa màn hình

;Display on/off LCDrol:R20=$0C màn hình on,con tro@ off

;Entry mode set:R21=$06 dịch pha@i con tro@ ,đ/c DDRAM tăng 1 khi ghi data

;RS=bit0=0,RW=bit1=0

; -

INIT_LCD4:

CBI LCD,RS ;RS=0: ghi lệnh

MOV R17,R18 ;R18=Function set

RCALL OUT_LCD ;ghi 1 byte data ra LCD

MOV R17,R19 ;R19=Clear display

;OUT_LCD4 ghi mã lệnh/data ra LCD

;Input: R17 chứa mã lệnh/data 4 bit cao

;OUT_LCD ghi 1 byte mã lệnh/data ra LCD

;chia làm 2 lâBn ghi 4bit

;Input: R17 chứa mã lệnh/data,R16

;bit RS=0/1:lệnh/data,bit RW=0:ghi

SWAP R17 ;đa@o 4 bit

ANDI R17,$F0 ;lâ4y 4 bit thâ4p chuyế@n thành cao

Trang 13

;DELAY_US tạo thời gian trếR =R16x100μsxR16 s(Fosc=8Mhz)

;Input:R16 hệ sồ4 nhân thời gian trếR 1 đế4n 255

Trang 14

b) Kết nối các tín hiệu UART như ở bài 1.

c) Viết chương trình nhận 1 giá trị từ UART và xuất ra Bar Led sử dụng SPI.

Trang 15

OUT SPCR0, R16 ; Enable, master, MSB first

LDI R16,(1<<SPI2X0) ; SCK=FOSC/16

LDI R16,(1<<UCSZ01)|(1<<UCSZ00) ;8-bit data

STS UCSR0C,R16 ;khồng parity, 1 stop bit

b) Kết nối các tín hiệu UART như ở bài 1.

c) Kết nối 1 port vào Bar LED.

Trang 16

d) Viết chương trình đếm số ký tự nhận được từ UART và xuất ra Bar Led, cứ mỗi lần có 1 byte nhận được, số đếm tăng lên 1 và được ghi vào EEPROM Khi vi xử lý mất điện và

có lại, số đếm được đọc ra từ EEPROM và lấy làm giá trị bắt đầu.

.EQU SPI_WR=$02 ;mã l?nh ghi b? nh?

.EQU MEM_BYTE3=0X00 ;??a ch? b? nh? byte 3 bit 23-16

.EQU MEM_BYTE2=0X01 ;??a ch? b? nh? byte 2 bit 15-8

.EQU MEM_BYTE1=0X00 ;??a ch? b? nh? byte 1 bit 7-0

Trang 17

USART_INIT:

LDI R16, $00

STS UBRR0H, R16

LDI R16, 51

STS UBRR0L, R16 ; SET BAUD = 9600 , VI DU 1

LDI R16, (1<<RXEN0) ; CHO PHEP THU DU LIEU

LDI R16,SPI_RD ;mã l?nh ghi b? nh?

CBI PORTB,SS ;cho phép truy?n SPI

RCALL SPI_TRANS ;truy?n SPI

LDI R16,MEM_BYTE3 ;n?p ??a ch? byte 3 b? nh?

RCALL SPI_TRANS ;truy?n SPI

LDI R16,MEM_BYTE2 ;n?p ??a ch? byte 2 b? nh?

RCALL SPI_TRANS ;truy?n SPI

LDI R16,MEM_BYTE1 ;n?p ??a ch? byte 1 b? nh?

RCALL SPI_TRANS ;truy?n SPI

LDI R16,$FF ;dump data ?? nh?n

RCALL SPI_TRANS ;truy?n SPI

SBI PORTB,SS ;k?t thúc truy?n SPI

MOV R20,R17 ;d? li?u c?t vào R20

RET

;XÓA TRANG C?A EEPROM

EEPROM_ERASE:

LDI R16,WREN ;mã l?nh cho phép ghi b? nh?

CBI SPI_PORT,SS ;cho phép truy?n SPI

RCALL SPI_TRANS ;truy?n SPI

SBI PORTB,SS ;SS=1 ch?t l?nh cho phép ghi

LDI R16,PE ;mã l?nh xóa trang b? nh?

CBI PORTB,SS ;cho phép truy?n SPI

RCALL SPI_TRANS ;truy?n SPI

LDI R16,MEM_BYTE3 ;n?p ??a ch? byte 3 b? nh?

RCALL SPI_TRANS ;truy?n SPI

LDI R16,MEM_BYTE2 ;n?p ??a ch? byte 2 b? nh?

RCALL SPI_TRANS ;truy?n SPI

LDI R16,MEM_BYTE1 ;n?p ??a ch? byte 1 b? nh?

RCALL SPI_TRANS ;truy?n SPI

SBI SPI_PORT,SS ;k?t thúc truy?n SPI

WR_FIN: ;??c thanh ghi STATUS ki?m tra bit WIP=0 báo b? nh? r?i

LDI R16,RDSR ;mã l?nh ??c thanh ghi STATUS

CBI SPI_PORT,SS ;cho phép truy?n SPI

RCALL SPI_TRANS ;truy?n SPI

Trang 18

SBRC R17,WIP ;bit WIP=0 b? nh? r?i

RJMP WR_FIN ;bit WIP=1 b? nh? b?n,ch? ti?p

SBI SPI_PORT,SS ;k?t thúc truy?n SPI

RET

;GHI S? TRONG THANH GHI R19 RA ??A CHI 0X001000 TRONG EEPROM

EEPROM_WRITE:

LDI R16,WREN ;mã l?nh cho phép ghi b? nh?

CBI SPI_PORT,SS ;cho phép truy?n SPI

RCALL SPI_TRANS ;truy?n SPI

SBI PORTB,SS ;SS=1 ch?t l?nh cho phép ghi

LDI R16,SPI_WR ;mã l?nh ghi b? nh?

CBI PORTB,SS ;cho phép truy?n SPI

RCALL SPI_TRANS ;truy?n SPI

LDI R16,MEM_BYTE3 ;n?p ??a ch? byte 3 b? nh?

RCALL SPI_TRANS ;truy?n SPI

LDI R16,MEM_BYTE2 ;n?p ??a ch? byte 2 b? nh?

RCALL SPI_TRANS ;truy?n SPI

LDI R16,MEM_BYTE1 ;n?p ??a ch? byte 1 b? nh?

RCALL SPI_TRANS ;truy?n SPI

MOV R16,R19

RCALL SPI_TRANS

SBI SPI_PORT,SS ;k?t thúc truy?n SPI

WR_FIN0: ;??c thanh ghi STATUS ki?m tra bit WIP=0 báo b? nh? r?i

LDI R16,RDSR ;mã l?nh ??c thanh ghi STATUS

CBI SPI_PORT,SS ;cho phép truy?n SPI

RCALL SPI_TRANS ;truy?n SPI

SBRC R17,WIP ;bit WIP=0 b? nh? r?i

RJMP WR_FIN0 ;bit WIP=1 b? nh? b?n,ch? ti?p

SBI SPI_PORT,SS ;k?t thúc truy?n SPI

OUT SPCR0, R16 ; Enable, master, MSB first

LDI R16,(1<<SPI2X0) ; SCK=FOSC/8

Trang 19

AGAIN: SBIS TIFR0,TOV0

a) Kết nối các tín hiệu UART như ở bài 1.

b) Kết nối 1 port vào Bar LED.

c) Viết chương trình đếm số ký tự nhận được từ UART và xuất ra Bar Led, cứ mỗi lần có 1 byte nhận được, số đếm tăng lên 1 và được ghi vào EEPROM nội của AVR Khi vi xử lý mất điện và có lại, số đếm được đọc ra từ EEPROM nội và lấy làm giá trị bắt đầu.

CLR COUNTER ; CLR BIEN DEM

LDI R16,0XFF ; SET UP DDRA

STS UBRR0L, R16 ; SET BAUD = 9600 , VI DU 1

LDI R16, (1<<RXEN0) ; CHO PHEP THU DU LIEU

Trang 20

OUT EEARH, R21 ; DAY DIA CHI EEPROM HIGH

OUT EEARL, R20 ; DAY DIA CHI EEPROM LOW

OUT EEDR, COUNTER ; DOC GIA TRI R18 VE THANH GHI DATA

SBI EECR, EEMPE ; BIT CHO PHEP GHI DU LIEU MOI VAO EEPROM

SBI EECR, EEPE ; BIT CHO PHEP GHI DU LIEU MOI VAO EEPROM , THIET LAP CHE DO HOAT DONG XONG

RCALL DELAY_5MS ;DELAY 5MS

RET

READ_FROM_EEPROM:

WAIT_READ:

SBIC EECR, EEPE ;CHO ENALBE = 0

RJMP WAIT_READ ; TIEP TUC CHO

OUT EEARH, R21 ; LUU DIA CHI BO NHO EEPROM

OUT EEARL, R20 ; LUU DIA CHI BO NHO EEPROM

SBI EECR, EERE ; CHO PHEP DOC EERE = 1

IN COUNTER, EEDR ;LUU DU LIEU DATA VE R18

Trang 21

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 Với tần số là 8Mhz, baudrate thực tế sẽ sai lệch với mong muốn là 9600 như thế nào?

TL:0.2%

b Cờ UDRE dùng để làm gì?

TL: dùng để báo bộ đệm phát trống hay không để ghi dữ liệu UDRE = 1 – bộ đệm phát trống

UDRE = 0 – bộ đệm phát đang còn dữ liệu

c Sự khác nhau giữa hardware UART và software UART (bit-banging UART) TL: Hardware UART và software UART (hay bit-banging UART) là hai phương pháp để giao tiếp qua UART (Universal Asynchronous

Receiver/Transmitter).

Hardware UART được tích hợp sẵn trong vi điều khiển hoặc một số chip điều khiển khác Nó hoạt động với tốc độ cao và có độ chính xác cao hơn Hardware UART sử dụng các phần cứng riêng biệt để xử lý dữ liệu đầu vào/đầu ra, điều khiển đồng bộ dữ liệu và đồng bộ với tốc độ baudrate đã được thiết lập Điều này giúp giảm thiểu tối đa các lỗi trong quá trình truyền dữ liệu.

Software UART hay bit-banging UART là một phương pháp được thực hiện thông qua phần mềm trên vi điều khiển, thường được sử dụng trong các vi điều khiển không tích hợp sẵn UART hoặc khi cần tùy chỉnh độ phức tạp của giao tiếp UART Software UART sử dụng các chân IO của vi điều khiển để tạo tín hiệu UART và đọc các tín hiệu vào để phân tích dữ liệu Phương pháp này đòi hỏi nhiều xử lý phần mềm hơn, do đó thường yêu cầu thời gian xử lý cao hơn và có

độ chính xác thấp hơn so với hardware UART.

d Chân TxD0 và chân RxD0 của UART0 là chân port nào?

Trang 22

BÁO CÁO

Nhóm:

Nhóm môn học: Môn thí nghiệm:

TxD0 -PD1 RxD0-PD0

e Atmega324 có bao nhiêu phần cứng UART?

;init UART 0

;CPU clock is 8MhzUSART_Init:

; Set baud rate to 9600 bps with 8 MHz clock ldi r16, 51

sts UBRR0L, r16

;set double speed ldi r16, (0 << U2X0) sts UCSR0A, r16 ; Set frame format: 8 data bits, no parity, 1 stop bit ldi r16, (1 << UCSZ01) | (1 << UCSZ00)

sts UCSR0C, r16 ; Enable transmitter and receiver ldi r16, (1 << RXEN0) | (1 << TXEN0) sts UCSR0B, r16

ret

;send out 1 byte in r16USART_SendChar:

push r17 ; Wait for the transmitter to be ready USART_SendChar_Wait:

lds r17, UCSR0A

Trang 23

BÁO CÁO

Nhóm:

Nhóm môn học: Môn thí nghiệm:

sbrs r17, UDRE0 ;check USART Data Register Empty bit rjmp USART_SendChar_Wait

sts UDR0, r16 ;send out

pop r17 ret

;receive 1 byte in r16USART_ReceiveChar:

push r17 ; Wait for the transmitter to be ready USART_ReceiveChar_Wait:

lds r17, UCSR0A sbrs r17, RXC0 ;check USART Receive Complete bit rjmp USART_ReceiveChar_Wait

lds r16, UDR0 ;get data

pop r17 ret

BÀI 2

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

a Các chân SCL, SDA là chân nào của AVR?

SCL – PC0 SDA – PC1

b Vẽ hình mô tả kết nối trong bài thí nghiệm

Ngày đăng: 05/11/2024, 10:11

w