Download bai tap vi xu ly truong and more Lecture notes Electrical Engineering in PDF only on Docsity!
BÀI TẬP CHƯƠNG 1VXL
- Một hệ vi xử lý(VXL) bao gồm các thành phần chính nào?
- Cấu trúc một CPU cơ bản gồm các thành phần nào?
- Cho biết chức năng của thanh ghi PC,IR?
- Cho biết chức năng của khối ALU?
- Cho biết chức năng của bộ nhớ?Thông thường chọn loại bộ nhớ nào chứa mã chương trình,loại bộ nhớ nào chứa dữ liệu,tại sao?
- Cho biết chức năng các loại bus dây kết nối CPU với bên ngoài.
- Tại sao các thiết bị ngoài giao tiếp bus dữ liệu với CPU đều phải có ngõ ra 3 trạng thái?
- Về mặt kết nối,có bao nhiêu cách ghép hệ VXL với thiết bị ngoại vi?
- Mô tả hoạt động một chu kỳ bus.
- Khi nói đến PC hiện hành(PCHH) tương ứng nội dung PC như thế nào?
- Giả sử tại ô nhớ chương trình 0020H và 0021H lần lượt có nội dung là 05H và 21H là mã lệnh(opcode) của lệnh AND R16,R5(R16=R16.R5).Nội dung các thanh ghi PC=0020H,R16=7DH,R5=53H.Mô tả chi tiết hoạt động chu kỳ bus của CPU thực hiện lệnh AND R16,R5.
- Phân biệt chu kỳ dao động(CK) và chu kỳ máy(MC)
- Họ AVR có 1MC bằng bao nhiêu chu kỳ CK
- Liệt kê các bước thực hiện việc lập trình để CPU hiểu và thực hiện đúng theo yêu cầu.
BÀI TẬP CHƯƠNG 2-VXL
Các bài tập sau sử dụng cho MCU324P(ATmega324P)
- Cho biết MCU324P có bao nhiêu port I/O,ký hiệu?
- Mô tả tóm tắt dung lượng các bộ nhớ trong MCU324P.
- CPU MCU324P có bao nhiêu thanh ghi đa dụng(GPRs),ký hiệu?Nhóm thanh ghi nào thường hay được sử dụng,tại sao?
- Phân biệt địa chỉ I/O và địa chỉ MEM?
- Nhóm thanh ghi nào và vùng địa chỉ có thể sử dụng các lệnh IN,OUT,SBI,CBI?
- Nhóm thanh ghi nào và vùng địa chỉ phải sử dụng các lệnh STS,LDS truy xuất?
- Địa chỉ bắt đầu và kết thúc của vùng SRAM.
- Cho biết vùng địa chỉ truy xuất EEPROM?Truy xuất EEPROM có giống như truy xuất SRAM?
- Một mã lệnh của AVR tối thiểu bao nhiêu byte?
- Tổ chức bộ nhớ của AVR theo kiến trúc Havard,giải thích rõ thuật ngữ này.
- Tổ chức hệ thống bus của CPU có đặc điểm khác biệt gì?
- Thanh ghi SREG nằm ở vùng nhớ nào?Để truy xuất SREG sử dụng lệnh IN/OUT hay LDS/STS?
- Cho R20=61H,R21=94H,lệnh SUB R20,R21 thực hiện phép trừ R20-R21 kết quả cất trong R20. Cho biết kết quả phép trừ và nội dung thanh ghi SREG sau khi thực hiện lệnh.
- Chức năng thanh ghi SP?Khi reset khởi động vùng stack bắt đầu từ vị trí nào?
- Giả sử SP=0x0800,R5=$FC,R10=$2B.Mô tả hoạt động của stack và các thanh ghi khi CPU thực hiện đoạn lệnh sau: PUSH R PUSH R POP R POP R
- Các thanh ghi điều khiển truy xuất các port I/O: ký hiệu,địa chỉ,chức năng?
- Dựa vào các ví dụ minh họa,viết đoạn lệnh khai báo PB7,PB6 là input có điện trở kéo lên,PB1,PB0 là output.
- Gắn thạch anh ngoài Fxtal=8Mhz vào 2 chân XTAL1,XTAL2 MCU,mặc định tần số FCK của MCU bằng bao nhiêu?
- Để sử dụng thạch anh ngoài Fxtal=8Mhz và muốn đặt tần số FCK=8Mhz,phải cài đặt các bit cầu chì như thế nào?
- Để sử dụng cổng SPI và toàn bộ PortC,phải cài đặt các bit cầu chì như thế nào?
11A8 DELAY:….
11B6 RET
- Viết một đoạn lệnh thực hiện: (a) Dịch trái 1 số nhị phân 16 bit R21:R20(R21 byte cao) (b) Quay trái 1 số nhị phân 16 bit R21:R
- Viết một đoạn lệnh nhận dạng cạnh xuống xuất hiện trên PB1.
- Viết một đoạn chương trình chuyển 1 chuỗi data có ký tự kết thúc chuỗi=$00 cất trong bộ nhớ Flash địa chỉ đầu=TAB,sang vùng nhớ SRAM địa chỉ đầu=S_BUF(Các ký hiệu đã định nghĩa trước)
- Viết một chương trình đọc data từ PORTD,nếu data=$20 - $7F xuất ra PORTB,nếu data <$ hoặc >$7F xuất ra PORTB=$00.Thực hiện lập vòng liên tục.
- Viết một chương trình đọc byte data từ PORTA,dò từ LSB nếu gặp bit0 đầu tiên xuất bit0 đúng vị trí trọng số ra PORTC,nếu không có bit0,xuất $FF ra PORTC,lập vòng liên tục.
- Viết một chương trình con tên COMP16 so sánh 2 số nhị phân 16 bit cất trong R21:R20 và R19:R18, kết quả trả về C=1 nếu R21:R20 < R19:R18,C=0 nếu R21:R20 ≥ R19:R18,bảo toàn nội dung các thanh ghi.
- Viết một chương trình con tên ADD16 cộng 2 số nhị phân 16 bit,trả về: số bị cộng(16)←số bị cộng(16)+số cộng(16),C=1 nếu kết quả tràn
- Viết một chương trình con tên SUB16 trừ 2 số nhị phân 16 bit,trả về: số bị trừ(16)←số bị trừ(16) - số trừ(16),C=1 nếu kết quả tràn(âm)
- Viết một chương trình con tên MUL16_8,nhân số nhị phân 16 bit cho 8 bit,trả về kết quả 24 bit: KQ=số nhân(8):số bị nhân(16)←số bị nhân(16)xsố nhân(8)
- Viết một chương trình con tên DIV16_8 chia số nhị phân 16 bit cho 8 bit,sử dụng phép dịch bit và trừ (xem lại giải thuật phép chia nhị phân).Kết quả trả về thương số 16 bit(đặt trong thanh ghi số bị chia) và dư số 8 bit.
- Viết một đoạn chương trình thực hiện phép tính: y=x^2 - x+1,x=8 bit,y=16 bit
- Viết một chương trình con tên BCD_HEX8 chuyển số BCD thành số HEX:input R17(BCD)=00-99, output R17(HEX)=$00-$63.
- Viết một chương trình con tên ADD_BCD cộng 2 số BCD(00-99),trả về kết quả số BCD(00-99)và C=1 nếu kết quả tràn.
- Viết một chương trình con tên SUB_BCD trừ 2 số BCD(00-99),trả về kết quả số BCD(00-99)và C= nếu kết quả tràn(âm)
- Viết một chương trình con tạo thời gian trễ 1ms,10ms,100ms,sử dụng cùng 1 chương trình con chỉ khác biến nhập thay đổi thời gian.
- Viết một chương trình tạo chuỗi xung vuông đối xứng tần số 1Khz,xuất ra PB5.
- Viết một chương trình tạo chuỗi xung vuông tần số 1Khz,CKNV=30%,xuất ra PD7.
BÀI TẬP CHƯƠNG 6 VXL
Các bài tập sau thiết kế với Fosc=8Mhz,1MC=125ns,viết chương trình bằng hợp ngữ,chạy mô phỏng và minh họa kết quả bằng Atmel Studio 7 hoặc Proteus. 6.1 Viết đoạn chương trình khởi động PORTA nhập data có điện trở kéo lên,PORTB xuất data 6.2 Viết đoạn chương trình khởi động PORTB là port xuất/nhập,PORTC có 3 bit thấp xuất,2 bit cao kế tiếp nhập,có điện trở kéo lên nguồn.Khởi đầu PORTB xuất,các tín hiệu xuất được xóa bằng 0. 6.3 Từ bài tập 6.2,viết một đoạn chương trình khởi động các port,khi có tín hiệu PC3=0,PORTB xuất data cất trong R17 và các tín hiệu PC2PC1PC0=100.Khi có tín hiệu PC4=0,PC2PC1PC0=011 và data được đọc từ PORTB về cất trong R17. 6.4 Viết một đoạn chương trình nhận dạng khi PC0=0,xuất chuỗi ký tự kết thúc bằng mã NULL=$00 từ bảng tra trong bộ nhớ chương trình có địa chỉ đầu ký hiệu TABLE,ra PORTB.Lập vòng lại liên tục. 6.5 Lập lại bài tập 6.4 thêm vào yêu cầu mỗi lần xuất data ra PORTB ,tạo 1 xung trên PC2 thời gian mức 1 không nhỏ hơn 500ns. 6.6 Vẽ sơ đồ MCU324P giao tiếp với nút nhấn SW0,SW1 và 2 LED đơn L0,L1.Viết chương trình thực hiện khi nhấn SW0.L0 sáng,L1 tối;khi nhấn SW1,L1 sáng,L0 tối.Chống rung SW bằng phần mềm. 6.7* Trong ví dụ 6.3,biên soạn lại chương trình thực hiện như sau:
- SW0 nhấn: tối dãy LED
- SW1 nhấn: sáng/tối dãy LED với thời gian sáng/tối 0.5s
- SW2 nhấn: sáng 1 LED dịch từ bit thấp đến cao và quay vòng lại,thời gian chờ dịch 0.5s
- SW3 nhấn: sáng 2 LED ở giữa dãy,sau đó sáng dần lan ra 2 biên và quay vòng lại,thời gian chờ sáng lan dần ra biên 0.5s Thực hiện các mode sáng trên bằng chương trình con và trong thời gian sáng ở 1 mode bất kỳ,khi nhấn SW chuyển mode sáng khác phải đáp ứng ngay! 6.8 Trong ví dụ 6.4,thay dãy LED bằng LED 7 đoạn AC.Biên soạn lại chương trình thực hiện khi nhấn phím từ bàn phím sẽ hiển thị mã phím ra LED 7 đoạn AC. 6.9 Viết một đoạn chương trình nhận dạng khi PC0=0,đọc byte số HEX từ PORTD,tra bảng TAB_7SEG chứa mã 7 đoạn LED AC,xuất ra PORTB và PORTA mã 7 đoạn ứng với 2 ký tự HEX đọc được,số HEX cao ở PORTB và thấp ở PORTA. 6.10 Viết một chương trình con tên ROL_16 quay trái qua cờ C 1 từ nhị phân 16 bit cất trong 2 thanh ghi/ô nhớ ký hiệu H_BYTE và L_BYTE với H_BYTE chứa byte cao. 6.1 1 Vẽ sơ đồ MCU kết nối PORTD input,PORTB output,2 SW nối PC0,PC1 tích cực mức 0. Viết chương trình nhập số bị chia và số chia 8 bit,hiển thị thương số và dư số như sau:
- Nhấn SW0≡PC0=0 lần đầu nhập số bị chia,nhấn SW0 lần 2 nhập số chia
- Nhấn SW1≡PC1=0 lần đầu xuất thương số,nhấn SW1 lần 2 xuất dư số 6.1 2 Từ sơ đồ hình 6.10,thêm 1 SW kết nối PB3,tích cực mức 0. (a) Viết một chương trình khi nhấn SW data nhập từ PORTD được xuất ra output shift reg. (b) Kết nối thêm 1 shift reg. mở rộng thành shift reg. 16 bit.Viết chương trình nhấn SW 2 lần đầu, lần lượt nhập data từ PORTD byte cao trước.Nhấn SW lần thứ 3 xuất ra output shift reg. byte cao trước. 6.13 * Viết một chương trình con tên BIN16_BCD chuyển đổi số nhị phân 16 bit sang số BCD không nén 5 digit chứa trong 5 ô nhớ,vận dụng chương trình con DIV16_8 trong bài tập trước.
6.14* Từ sơ đồ hình 6.13,viết một chương trình con hiển thị 1 ký tự HEX ra 1 LED 7 đoạn tại digit đã chọn,input chương trình con là byte data 4 bit thấp chứa mã BCD,4 bit cao chứa mã chọn digit LED. 6.15 Viết chương trình nhập byte data từ PORTD hiển thị giá trị thập phân ra bộ hiển thị LED hình 6.13,áp dụng chương trình con bài tập 6.14,cho delay hiển thị 1 digit 1 ms. 6.16 Viết một chương trình con tên CHR_SHIFT lần lượt dịch số Hex(từ 0 - F) cất trong thanh ghi/ô nhớ ký hiệu CHR_IN vào 2 thanh ghi/ô nhớ ký hiệu NUM_32,NUM_10 theo như ví dụ sau:
- Khởi động NUM_ 32 =$00,NUM_ 10 =$
- CHR_IN=1→gọi CHR_SHIFT→NUM_32=$00,NUM_10=$
- CHR_IN=2→gọi CHR_SHIFT→NUM_32=$00,NUM_10=$
- CHR_IN=3→gọi CHR_SHIFT→NUM_32=$01,NUM_10=$
- CHR_IN=4→gọi CHR_SHIFT→NUM_32=$12,NUM_10=$
- …… 6.17* Từ sơ đồ hình 6.13 kết nối thêm keypad 4x4 vào PORTD.Viết chương trình lần lượt nhập ký tự HEX từ keypad và dịch trái ký tự mỗi lần nhập,hiển thị ra LED. 6.18 * Thiết lập bộ mã hiển thị biểu tượng như hình sau: Áp dụng chương trình ví dụ 6.10 và sơ đồ hình 6.16,biên soạn lại chương trình thực hiện như sau: 1.Hiển thị biểu tượng đứng yên trong 2 s 2.Hiển thị dịch chuyển biểu tượng sang phải(tốc độ điều chỉnh được) cho đến hết màn hình 3.Hiển thị biểu tượng từ biên phải màn hình dịch chuyển sang trái cho đến hết biên trái màn hình 4.Hiển thị biểu tượng từ biên trên dịch chuyển xuống dưới cho đến hết biên dưới màn hình 5.Lập vòng về bước 1 Các mode hiển thị trên viết bằng chương trình con để dễ quản lý. 6.19 Trong hình 6.19 ví dụ 6.12,giả sử data đọc từ PORTD là số BCD nén cất trong thanh ghi/ô nhớ ký hiệu DAT_IN,viết chương trình đọc data từ PORTD,hiển thị giá trị đọc được ra LCD ký tự như sau (giả sử DAT_IN= 26 ): 6.20 * Chuyển ví dụ 6.13 về sơ đồ MCU giao tiếp thanh ghi dịch 74HC595,ngõ ra thanh ghi dịch lái LCD ký tự.Viết lại chương trình như ví dụ 6.13. 6.21* Từ ví dụ 6.13 và sơ đồ hình 6.20,áp dụng vào mạch đếm sản phẩm hoạt động như sau:
- Cảm biến sản phẩm cho 1 xung độ rộng 10μs ở ngõ ra mỗi lần có 1 sản phẩm đi ngang qua
- Ngõ ra cảm biến sản phẩm kết nối với PD2 của MCU 324 P
- Một nút nhấn SW tích cực mức 0 reset bộ đếm về 0 Viết chương trình đếm số sản phẩm làm việc như sau:
Nhiet do :
T=26°C
BÀI TẬP CHƯƠNG 7-VXL
Trong các bài tập sau đây,chọn Fosc=8Mhz,1MC=125ns mặc định,trừ trường hợp cụ thể sẽ có ghi chú riêng.
- Viết một chương trình tạo chuỗi xung vuông đối xứng ngõ ra PB0 tần số 20KHz,sử dụng Timer0: (a) Mode NOR (b) Mode CTC Đánh giá sai số xung tạo ra thực tế.
- Viết một chương trình tạo chuỗi xung vuông đối xứng ngõ ra PC0 tần số 100Hz,sử dụng Timer0: (c) Mode NOR (d) Mode CTC Đánh giá sai số xung tạo ra thực tế.
- Lập lại bài 2 với Timer
- Lập lại bài 2 với Timer
- Viết một chương trình tạo chuỗi xung vuông tần số 400Hz CKNV 35% ngõ ra PB5 ,sử dụng Timer0: (a) Mode NOR (b) Mode CTC Đánh giá sai số xung tạo ra thực tế.
- Lập lại bài 5 với Timer2.
- Lập lại bài 5 với Timer1.
- Dựa vào hình 7.15 ví dụ 7.6,viết một chương trình thực hiện khi nhấn/nhả SW LED sáng trong 2s: (a) Sử dụng Timer0 tạo thời gian delay (b) Sử dụng Tiner1 tạo thời gian delay
- Vẽ sơ đồ MCU324P giao tiếp 4 SW khi nhấn tích cực mức 0 và 1 LED đơn(phân cực dòng 10mA khi LED sáng).Viết một chương trình sử dụng Timer tạo thời gian delay,thực hiện các công việc như sau:
- Nhấn SW1 LED sáng trong 2s
- Nhấn SW2 LED sáng chớp tắt 1 lần trong 2s
- Nhấn SW3 LED sáng chớp tắt 2 lần trong 2s
- Nhấn SW2 LED sáng chớp tắt 4 lần trong 2s Lập vòng liên tục các công việc trên.
- Viết một chương trình tạo chuỗi xung tuần hoàn có độ rộng thay đổi như hình BT7.10: Hình BT7.10: Chuỗi xung bài tập 7.
- Viết một chương trình tạo 2 chuỗi xung vuông đối xứng tần số f1=1Khz,tần số f2=2Khz: (a) Sử dụng Timer0 mode CTC xuất xung f1 ra PD0,Timer2 mode CTC xuất xung f2 ra PD (b) Sử dụng Timer0 và Timer2 như câu (a) dùng chức năng tạo sóng xuất xung f1 ra OC0A,xuất xung f2 ra OC2A
- Lập lại bài 11 nhưng chỉ sử dụng Timer0(ngõ ra tùy chọn)
- Thiết kế mạch tạo tín hiệu xung PWM tần số fo=3Khz,độ rộng xung thay đổi được từ 1 - 255μs bằng cách cài đặt DIPSW- 8 ở ngõ vào.Sử dụng Timer0 mode FPWM,ngõ ra tùy chọn.
- Lập lại bài 13,sử dụng Timer2 mode PCPWM.
- Từ bài 13(hoặc 14)thêm vào chương trình đo độ rộng xung(thời gian mức 1) (a) Hiển thị giá trị đo bằng mã Hex ra PortA. (b) *Hiển thị giá trị đo ra LCD ký tự 16x
- Dựa vào hình 7. 44 ví dụ 7. 16 ,thiết kế mạch tạo tín hiệu xung PWM tần số fo=200Hz,CKNV thay đổi từ 5% - 95% bằng cách nhấn SW ở ngõ vào,mỗi lần nhấn SW1 tăng 1%,nhấn SW2 giảm 1% .Sử dụng Timer1 mode FPWM,ngõ ra tùy chọn.
- Lập lại bài 16,sử dụng Timer1 mode PCPWM.
- Từ ví dụ 7.16,động cơ có gắn một bộ đo tốc độ phát ra 100 xung/vòng.Vẽ sơ đồ kết nối bộ đo tốc độ với MCU và viết thêm chương trình đo tốc độ vòng/phút(rpm),lưu giá trị đo tốc độ vào R23:R22.
BÀI TẬP CHƯƠNG 8-VXL
Trong các bài tập sau cho Fosc=8MHz,1MC=125ns,trừ trường hợp có ghi chú cụ thể
- Viết đoạn lệnh khởi động USART0 truyền bất đồng bộ phát 8 bit data,parity chẵn,1 stop bit, BR=38.4K.
- Viết đoạn lệnh khởi động USART1 truyền bất đồng bộ phát/thu 9 bit data,parity lẻ,2 stop bit, BR=19.2K,Fosc=4Mhz.
- Viết một chương trình con khởi động USART0 mode bất đồng bộ,phát/thu data 8 bit,parity lẻ, stop bit,BR=9600.
- Lập lại câu 3,nếu PB0=0 BR=9600,nếu PB0=1 BR=19200.
- Viết một chương trình con phát 9 bit data ra USART0,input 8 bit data cất trong R17,bit thứ 9=C.Giả sử đã khởi động USART0 mode bất đồng bộ thích hợp.
- Viết một chương trình con thu 9 bit data từ USART0,trả về 8 bit data cất trong R17,bit thứ 9=C.Giả sử đã khởi động USART0 mode bất đồng bộ thích hợp.Nếu có lỗi đường truyền trả về R17=$FF và C=1.
- Viết một chương trình phát liên tục chuỗi ký tự mã ASCII từ $20 - $7F ra USART0.Khởi động USART0 làm việc như bài tập 3.
- Viết một chương trình liên tục thu chuỗi ký tự từ USART1.Khởi động USART1 làm việc như bài tập 3. Kết hợp mô phỏng trên Proteus bài tập 7 và 8.
- Viết một chương trình thu ký tự từ USART0,nếu là ký tự mã ASCII từ $20 - $7F xuất ra PortB.Nếu thu được ký tự CR=$0D(mã phím Enter)phát ra USART1 chuỗi ký tự “Phat USART1! “ .Lập vòng liên tục các công việc trên. USART0 làm việc mode bất đồng bộ 8 bit data,không parity,1 stop bit, BR=9600.USART1 làm việc mode bất đồng bộ 8 bit data,parity lẻ,1 stop bit,BR=38.4K. Mô phỏng bài tập 9 trên Proteus
- Vẽ sơ đồ MCU324P giao tiếp LCD ký tự 16x2 mode 4 bit.Viết chương trình thu ký tự từ USART và hiển thị ra LCD theo trình tự sau:
- Bắt đầu hiển thị ký tự từ đầu dòng 1,xuống dòng khi hiển thị đủ 16 ký tự hoặc thu ký tự CR=$0D.
- Tiếp tục hiển thị từ đầu dòng 2 cho đến khi đủ 16 ký tự hoặc thu ký tự CR xóa toàn bộ màn hình quay trở về hiển thị từ đầu dòng 1. Cho USART0 làm việc mode bất đồng bộ 8 bit data,không parity,1 stop bit,BR=9600. Mô phỏng bài tập 10 trên Proteus
- Viết một chương trình con khởi động SPI mode Master ,tốc độ truyền 250Khz,MSB trước,lấy mẫu cạnh xuống ở cạnh sau xung CK.
- Viết một chương trình con khởi động SPI mode Slaver đáp ứng theo Master như bài tập 11.
- Viết một chương trình khởi động cổng SPI mode Master như bài tập 11 và USART0 mode bất đồng bộ như bài tập 3.Sau đó Master sẽ thực hiện các công việc như sau:
- Thu chuỗi ký tự kết thúc bằng mã CR=$0D từ USART0(thu luôn ký tự CR) cất vào SRAM địa chỉ đầu $200.
- Phát chuỗi ký tự thu được kết thúc bằng ký tự CR ra SPI,đồng thời thu chuỗi ký tự từ Slaver kết thúc bằng mã NULL=$00(thu luôn mã NULL)cất vào SRAM địa chỉ $300.
- Nhấn SW kết nối với PC0 lần lượt hiển thị ký tự thu từ SPI ra PORTA
- Lập vòng liên tục các công việc trên
- Viết một chương trình khởi động cổng SPI mode Slaver và USART0 đáp ứng theo Master như bài tập 13.Sau đó Slaver sẽ thực hiện các công việc như sau:
- Thu chuỗi ký tự kết thúc bằng mã CR từ Master qua SPI cất vào SRAM địa chỉ đầu $
- Đồng thời phát chuỗi ký tự “Hello Master!”,$00 cất trong Flash ROM ra SPI cho Master
- Sau khi thu phát xong SPI,phát chuỗi ký tự thu được từ SPI ra USART
- Lập vòng liên tục các công việc trên Lưu ý việc đồng bộ thu phát SPI giữa Master và Slaver! Kết hợp mô phỏng trên Proteus bài tập 13 và 14.
BÀI TẬP CHƯƠNG 9-VXL
Trong các bài tập sau cho Fosc=8MHz,1MC=125ns,trừ trường hợp có ghi chú cụ thể
- Khởi động ADC cấu hình Vref=AREF(nguồn ngoài),ngõ vào đơn ADC7,data dịch phải, fCKADC=250Khz,chọn mode tự kích bằng tín hiệu ngắt ngoài ngõ 0.
- Khởi động ADC cấu hình Vref=2.56V(nguồn trong),ngõ vào vi sai ADC1(+)/ADC0(-), gain=10,data dịch phải, fCKADC=62.5Khz,chọn mode chuyển đổi 1 lần.
- Viết một chương trình đo điện áp DC từ 0 - 2V,chọn Vref=2.56V(nguồn trong). (a) Hiển thị giá trị đọc ADC ra PortD byte cao và PortC byte thấp (b) Hiển thị số đo điện áp dạng mã nhị phân từ 0 - 2000mV ra PortD byte cao và PortC byte thấp
- Thiết kế mạch đo điện áp 2 kênh ADC0 và ADC1 thực hiện theo trạng thái SW:
- SW không nhấn,hiển thị số nhị phân kênh ADC0 V1=0 - 5V chỉ thị 0 - 500(đơn vị 10mV)
- Nhấn giữ SW,hiển thị số nhị phân kênh ADC1 V2=0 - 2V chỉ thị 0 - 2000(đơn vị mV) Hiển thị cập nhật số đo dưới dạng số nhị phân ra PortD byte cao,PortC byte thấp
- Viết một chương trình đo điện áp DC từ - 1V ÷ +1V,cập nhật hiển thị giá trị đo dưới dạng số nhị phân có dấu chỉ thị - 1000 ÷1000mV ra PortD byte cao,PortC byte thấp.Cho độ nhạy phép đo RES=5mV.
- Lập lại bài 5 cứ sau 2s cập nhật giá trị đo một lần.
- Thiết kế mạch VCO(Voltage Control Oscillator)phát chuỗi xung vuông đối xứng tần số thay đổi được theo điện áp DC thay đổi đặt ở ngõ vào.Cho tần số thay đổi tuyến tính từ 0 đến 10Khz theo điện áp DC thay đổi từ 0 đến 5V,với độ nhạy 10Hz/5mV.
- Lập lại bài 4,hiển thị giá trị đo điện áp 2 kênh ra LCD ký tự 16x2 theo định dạng sau: 9.(*) Thiết kế mạch lấy mẫu tín hiệu tuần hoàn(sine) chu kỳ 20ms như hình BT 9 :
- Bắt đầu lấy mẫu từ gốc 0+
- Trong bán kỳ dương lấy mẫu biên độ 10 mẫu cất vào RAM nội
- Hiển thị giá trị biên độ mẫu có giá trị lớn nhất dạng số nhị phân ra PortD byte cao, PortC byte thấp
- Cập nhật các giá trị mẫu liên tục Hình BT
BÀI TẬP CHƯƠNG 10-VXL
Trong các bài tập sau đây cho Fosc=8Mhz,1MC=125ns trừ các trường hợp có ghi chú cụ thể.
- Viết dàn ý một chương trình có sử dụng các nguồn ngắt: TIMER0_COMPA,thu USART1,INT1. Khai báo đầy đủ các ISR và cho phép các nguồn ngắt trên.
- Viết dàn ý một chương trình có sử dụng các nguồn ngắt: TIMER1_CAPT,SPI,TWI,INT0,PCINT Khai báo đầy đủ các ISR và cho phép các nguồn ngắt trên.
- Giả sử Timer1 ở mode CTC4,TCNT1H=$03,TCNT1L=$E5,OCR1AH=$03,OCR1AL=$E7,I=1, OCIE1A=1.Mô tả khi nào có ngắt xảy ra,và là nguồn ngắt nào?
- Giả sử Timer1 ở mode CTC12,TCNT1H=$01,TCNT1L=$90,OCR1AH=$01, OCR1AL=$F3, OCR1BH=$01, OCR1BL=$2B,ICR1H=$03,ICR1L=$E7,I=1,TIMSK1=$26.Khi Timer1 đếm tiếp đến khi trở về 0x0000 ,các nguồn ngắt nào có thể xảy ra?
- Xem lại ví dụ 10.11,chứng minh lại cụ thể chương trình đo được đến Tmin=3μs.
- Viết một chương trình tạo xung vuông đối xứng tần số 1Hz sử dụng ngắt tràn Timer1 và ngắt CTC Timer1.
- Viết một chương trình tạo xung vuông tần số 500Hz,CKNV 30% sử dụng ngắt tràn Timer0 và ngắt CTC Timer0.
- *Viết một chương trình tạo xung vuông tần số 4Khz,CKNV thay đổi từ 1 - 255 μs:
- Sử dụng ngắt Timer2 thích hợp tạo xung ra
- Sử dụng ngắt ADC đọc điện áp DC từ nguồn 5V qua biến trở phân áp thay đổi CKNV
- Chương trình chính hiển thị giá trị CKNV dạng BCD xuất ra PortC
- Viết một chương trình sử dụng ngắt USART0 thu chuỗi ký tự chữ cái thường kết thúc bằng mã CR=$0D,chuyển thành chữ cái in hoa phát ra USART0.Cho baudrate=19200,8 bit data,1 stop bit.
- Viết một chương trình sử dụng ngắt USART1 thu chuỗi ký tự kết thúc bằng mã CR=$0D, phát chuỗi ký tự vừa thu được ra cổng TWI cho thiết bị I2C,sử dụng ngắt TWI.Cho địa chỉ thiết bị I2C 0x00A0,tần số xung CK I2C=200Khz.
- Viết một chương trình sử dụng 2 nguồn ngắt SPI và TWI thực hiện công việc sau:
- Thu chuỗi ký tự kết thúc bằng mã NULL=$00 từ thiết bị I2C địa chỉ 0x2E
- Phát chuỗi ký tự vừa thu được ra thiết bị SPI,đồng thời thu từ thiết bị SPI chuỗi ký tự kết thúc bằng mã NULL(chiều dài không được vượt quá chuỗi ký tự phát)
- Phát chuỗi ký tự vừa thu từ thiết bị SPI ra thiết bị I2C Cho MCU là Master,tốc độ truyền SPI là 2Mhz,tốc độ truyền I2C là 160Khz.
- Cho mạch điện như hình BT12.Viết chương trình khi chỉnh VR1 và/hoặc VR2 sao cho:
- Nếu V1>V2 PortC hiển thị giá trị nhị phân V
- Nếu V2>V1 PortC hiển thị giá trị nhị phân V Hình BT
- Thiết kế mạch và chương trình ghi/đọc EEPROM MCU324P thực hiện các tác vụ sau:
- Sử dụng ngắt thu USART0 thu chuỗi ký tự kết thúc bằng mã CR=$0D(chiều dài <=16 ký tự)
- Sử dụng ngắt EEPROM ghi chuỗi ký tự vừa thu từ USART0 vào EEPROM MCU324P địa chỉ đầu từ 0x