intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài tập lớn "Hệ vi xử lý ONCHIP 8"

Chia sẻ: Nguyễn Bình | Ngày: | Loại File: DOCX | Số trang:12

252
lượt xem
63
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Ngày nay, nhờ sự phát triển của công nghệ điện tử, nhất là công nghệ chế tạo vi điện tử, đồng thời cùng với sự phát triển của các thế hệ máy vi tính, các bộ vi điều khiển cũng được ra đời và phát triển.

Chủ đề:
Lưu

Nội dung Text: Bài tập lớn "Hệ vi xử lý ONCHIP 8"

  1. LỜI MỞ ĐẦU Ngày nay, nhờ sự phát triển của công nghệ điện tử, nhất là công nghệ chế tạo vi điện tử, đồng thời cùng với sự phát triển của các thế h ệ máy vi tính, các bộ vi điều khiển cũng được ra đời và phát triển. Các bộ vi đi ều khiển đang có ứng dụng ngày càng rộng rãi và thâm nhập ngày càng nhi ều trong lĩnh vực kỹ thuật và đời sống xã hội. Hầu hết các thiết bị kỹ thuật từ phức tạp cho đến đơn giản như thiết bị điều khiển tự động, thiết bị văn phòng,và các thiết bị chất lượng cao trong gia đình đều có dùng các b ộ vi điều khiển. Hệ vi xử lý ONCHIP 89C51 là một hệ vi điều khiển có đầy đủ chức năng của hệ vi xử lý 8bit có nhiều chức năng đặc biệt, được áp dụng điều khiển các thiết bị thông tin, viễn thông như trong các hệ thống điều khiển đèn giao thông, truyền tin nối tiếp, truyền tin song song, đo đ ộ r ộng xung. Trong đó,đo độ rộng xung dùng 89C51 được sử dụng rất nhiều trong các thiết bị phát hiện xung, đồng hồ đo xung, đồng hồ đo tốc độ, cũng có th ể được sử dụng trong thiết bị điều chỉnh độ rộng xung, ứng dụng trong công nghệ Rada, thông tin để thu tin và phát hiện mục tiêu,vv…. Em xin chân thành cảm ơn thầy Nguyễn Hải Dương đã giúp em hoàn thành đồ án này.
  2. I. MÔ TẢ CHỨC NĂNG CỦA HỆ THỐNG Thiết kế hệ thống đo độ rộng xung 6 kênh trên hệ VXL on-chip 89C51 với focs= 12 MHz trên hệ vi xủa Bài toán đặt ra là thiết kế h ệ th ống đo độ rộng xung dùng 89C51. Chức năng của hệ thống gắn liền với yêu cầu thực tế đặt ra là xuất hiện một xung bất kỳ và nhiệm vụ là phải tính toán được độ rộng của xung tai thời điểm bất kỳ. Xung xuất hiện là không bi ết trước d ạng và đặc tính của nó, xung có thể được đưa tới từ một bộ thu tin nào đó hay t ừ một bộ tạo xung. Xung cần đo độ rộng được đưa vào ch ân tín hiệu INTO(bit P3.2 – chân IC 12), kết quả đo phải chứa trong 2 thanh ghi: R1 ch ứa byte cao của kết quả, R0 chứa byte thấp của kết quả. Hệ thống hiển thị sử dụng mà hình LCD 16*2 với thông tin hiển thị gồm số hiệu kênh và độ rộng xung. Việc lựa chọn kênh hiển thị qua bàn phím điện thoại. II. THIẾT KẾ PHẦN CỨNG 2.1. Sơ đồ khối của hệ thống Chức năng của các khối: 1. Khối nguồn +5V( Source +5V) : Cung cấp nguồn để VĐK hoạt động 2. Bàn phím (Key pad) : để lựa chọn kênh hiển thị 3. VĐK (MCU): Xử lý tín hiệu đưa vào để tính toán đ ộ rộng xung và đưa giá trị tương ứng đến LCD 4. Khối hiển thị (LCD) : Hiện thị kết quả đo được 5. 6 kênh xung cần đo( 6 channel input): Có thể là xung t ừ b ộ thu tin hoặc bộ tạo xung 6. Bộ chuyển mạch (Switch) lựa chọn kênh xung cần đo 2.2. Sơ đồ nguyên lý của hệ thống ( thiết kế trên phần mềm proteus)
  3. Các linh kiện được sử dụng 1. Vi điều khiển AT89C51 2. Key pad –phone Bàn phím này gồm 12 phím chia làm 4 hàng, 3 cột 3. LCD 16*2 Các địa chỉ của vị trí con trỏ của LCD 16*2 như sau 16 × 2 LCD 80 81 82 83 84 85 86 Through 8F C0 C0 C2 C3 C4 C5 C6 Through CF 4. IC cầu W005G và IC 7805 để tạo nguồn 5V 5. IC MUX 74151 IC 74151 có chân lý như sau:
  4. Tín hiệu Tín hiệu ra vào /E C B A Y= kênh 0 0 0 0 0 0 0 0 1 1 0 0 1 0 2 0 0 1 1 3 0 1 0 0 4 0 1 0 1 5 0 1 1 0 6 0 1 1 1 7 1 X X X Y=0 Yêu cầu bài toán là đo độ rộng xung 6 kênh nên ta sử d ụng tổ hợp 6 tín hiệu đầu tương ứng như sau: Kênh CBA Kênh CBA 1 000 4 011 2 001 5 100 3 010 6 101 6. Thạch anh 12MHZ 7. Điện trở, tụ điện, LED. III. XÂY DỰNG THUẬT TOÁN III.1. Phân tích bài toán Hệ thống đo độ rộng xung có sơ đồ như trên hình 3.Ph ương pháp đo đ ộ rộng: ta chèn một chuỗi xung chuẩn(xung răng lược) có độ rộng xác định trước trong thời gian tồn tại của xung cần đo. Độ rộng xung cần đo=(chu kỳ xung răng lược)*(số lượng xung răng lược). Sai số của phép đo max = ½ chu kỳ xung răng lược Vì tần số dao động nội = 1 2MHz/12 = 1MHz nên chu kỳ xung răng lược = 1 micro giây nên nội dung Timer0 chính là kết quả. Sử dụng Timer0 chạy ở mode 1-16bit để tạo xung răng lược. Muốn vậy, thanh ghi TMOD = 0 9H = 00001001(gate0=1, tạo điều kiện cho INTO được kích hoạt Timer0, C/TO = 0 làm việc với dao động nội, M1M0=01 cho Timer0 = mode 1). Khởi đầu cần xóa cờ TF0 và cấm Timer0 chạy TR0. Do đó TCON =00H= 0000 0000 (TF0 = TR0 =0) Lưu đồ thuật toán III.2.
  5. IV. XÂY DỰNG PHẦN MỀM ;------- -----------KHAI BA0 VA DINH NGHIA------------- E_LCD EQU P1.0 ;chan cho phep cua LCD RW_LCD EQU P1.1 ;chan dieu khien doc/ghi RS_LCD EQU P1.2 ;chan chon thanh ghi data/command CHECK EQU P1.3 PORT_LCD EQU P2 ;cong du lieu cua LCD READY_PIN EQU P2.7 ;chan kiem tra su san sang cua LCD LCD_CLR EQU 01H RDY_LCD EQU 20H ROW1 EQU P0.0 ROW2 EQU P0.1 COL1 EQU P0.4 COL2 EQU P0.5 COL3 EQU P0.6 STATE1 EQU P1.5 STATE2 EQU P1.6 STATE3 EQU P1.7 INPUT_PULSE EQU P3.2 ;chan tin hieu dau vao ;------------------CHUONG TRINH CHINH------------------ ORG 0000H CLR CHECK LJMP MAIN ;goi den chuong trinh chinh va bo qua cac ISR ngat RET ORG 30H ;---------------------------------------------------------------------- MAIN: ACALL INSTALLATION ;khoi tao he thong JB CHECK, MAIN_SUB MAINLOOP: SETB PSW.4 CLR ROW1 JNB COL1,KEY1 JNB COL2,KEY2 JNB COL3,KEY3 SETB ROW1 ;--------------------------------- CLR ROW2 JNB COL1,KEY4 JNB COL2,KEY5 JNB COL3,KEY6 SETB ROW2 ;---------------------------------- JMP MAINLOOP ;----------------------------------
  6. KEY1: KEY3: KEY5: JNB COL1, JNB COL3, JNB COL2, KEY5 KEY1 KEY3 MOV R7,#'5' MOV R7,#'1' MOV R7,#'3' SETB ROW2 SETB ROW1 SETB ROW1 CLR STATE1 CLR STATE1 CLR STATE1 CLR STATE2 CLR STATE2 SETB STATE2 SETB STATE3 CLR STATE3 CLR STATE3 JMP FREE JMP FREE JMP FREE KEY6: KEY2: KEY4: JNB COL3, JNB COL2, KEY2 JNB COL1, KEY4 KEY6 MOV R7,#'2' MOV R7,#'4' MOV R7,#'6' SETB ROW1 SETB ROW2 SETB ROW2 SETB STATE1 SETB STATE1 SETB STATE1 CLR STATE2 SETB STATE2 CLR STATE2 CLR STATE3 CLR STATE3 SETB STATE3 JMP FREE JMP FREE JMP FREE ;------------------------------------- FREE: SETB CHECK CLR PSW.4 ;------------------------------------- MAIN_SUB: ACALL MEASURE_PULSE_WIDTH ACALL PROCESS_AND_DISPLAY RET ;Ket thuc chuong trinh chinh INSTALLATION: ; chuong trinh khoi tao he thong ACALL INSTALL_LCD ;khoi dong LCD SETB INPUT_PULSE ;goi chan tin hieu la dau vao RET ;------------------------MODULE DO DO RONG XUNG------------------- MEASURE_PULSE_WIDTH: MOV R1,#00 MOV R0,#00 MOV TMOD,#09H MOV TCON,#00H SETB TR0 ;------------------------------------ PULSE_CHECK:JB INPUT_PULSE,PULSE_CHECK CLR TF0
  7. MOV TH0,#00 MOV TL0,#00 ;--------------------------------- PULSE_LOW: JNB INPUT_PULSE,PULSE_LOW ;neu xung vao co muc thap ;---------------------neu co Xung vao co muc tich cuc cao thi bat dau do PULSE_HIGH: JB INPUT_PULSE,PULSE_HIGH ;van dang co xung ;----------------------neu da het xung thi doc tin hieu Do Rong JB TF0,PULSE_CHECK MOV R0,TL0 ;byte thap--> R0 MOV R1,TH0 ;byte cao --> R1 RET ;------------Chuong trinh con xu ly tin tuc do duoc va Hien thi len LCD PROCESS_AND_DISPLAY: ;-------------Dong 1------------ MOV A,#80h MOV A,#" " MOV A,#"E" ACALL ACALL ACALL DATAWRT DATAWRT COMMWRT MOV A,#"C" MOV A,#"L" MOV A,#"(" ACALL ACALL ACALL DATAWRT DATAWRT DATAWRT MOV A,#"H" MOV A,#" " MOV A,#"^" ACALL ACALL ACALL DATAWRT DATAWRT DATAWRT MOV A,#"A" SETB PSW.4 MOV A,#"_" ACALL MOV A,R7 ACALL DATAWRT ACALL DATAWRT MOV A,#"N" DATAWRT MOV A,#"^" ACALL CLR PSW.4 ACALL DATAWRT DATAWRT MOV A,#"N" MOV A,#")" ACALL ACALL DATAWRT DATAWRT
  8. ;---------------Dong 2------------ MOV A,#0C0h MOV R3 ,#HIGH(1000) MOV R3 ,#HIGH(10) MOV A,#"P" MOV R2 ,#LOW(1000) MOV R2 ,#LOW(10) ACALL DATAWRT LCALL DIV16_16 LCALL DIV16_16 MOV A,#"W" MOV A ,R2 MOV A ,R2 ACALL DATAWRT ADD A ,#30HACALL ADD A ,#30H MOV A,#"=" DATAWRT; R4 ACALL DATAWRT ; ACALL DATAWRT MOV R3 ,#HIGH(100) R2 MOV R2 ,#LOW(100) MOV A ,R0 MOV R3 LCALL DIV16_16 SUBB A,# ;bu sai ,#HIGH(10000) MOV A ,R2 so MOV R2 ADD A ,#30H ADD A ,#30H ,#LOW(10000) ACALL DATAWRT ; ACALL DATAWRT LCALL DIV16_16 R3 MOV A,#"u" MOV A ,R2 ACALL DATAWRT ADD A ,#30H MOV A,#"s" ACALL DATAWRT; ACALL DATAWRT R5 MOV R0,#0000H MOV R1,#0000H MOV R2,#0000H MOV R3,#0000H MOV R4,#0000H MOV R5,#0000H JMP MAIN ; -----------------Chuong trinh chia so 16 bit duoc tham khao tu: ;---------------------http://www.8052.com/div16.phtml div16_16: CLR C ;Clear carry initially MOV R4,#00h ;Clear R4 working variable initially MOV R5,#00h ;CLear R5 working variable initially MOV B,#00h ;Clear B since B will count the number of left-shifted bits div1: INC B ;Increment counter for each left shift MOV A,R2 ;Move the current divisor low byte into the accumulator RLC A ;Shift low-byte left, MOV R2,A ;Save the updated divisor low-byte MOV A,R3 ;Move the current divisor high byte into the accumulator
  9. RLC A ;Shift high-byte left high, rotating in carry from low- byte MOV R3,A ;Save the updated divisor high-byte JNC div1 ;Repeat until carry flag is set from high-byte div2: ;Shift right the divisor MOV A,R3 ;Move high-byte of divisor into accumulator RRC A ;Rotate high-byte of divisor right and into carry MOV R3,A ;Save updated value of high-byte of divisor MOV A,R2 ;Move low-byte of divisor into accumulator RRC A ;Rotate low-byte of divisor right, with carry from high-byte MOV R2,A ;Save updated value of low-byte of divisor CLR C ;Clear carry, we don't need it anymore MOV 07h,R1 ;Make a safe copy of the dividend high-byte MOV 06h,R0 ;Make a safe copy of the dividend low-byte MOV A,R0 ;Move low-byte of dividend into accumulator SUBB A,R2 ;Dividend - shifted divisor = result bit (no factor, only 0 or 1) MOV R0,A ;Save updated dividend MOV A,R1 ;Move high-byte of dividend into accumulator SUBB A,R3 ;Subtract high-byte of divisor MOV R1,A ;Save updated high-byte back in high-byte of divisor JNC div3 ;If carry flag is NOT set, result is 1 MOV R1,07h ;Otherwise result is 0, save copy of divisor to undo subtraction MOV R0,06h div3: CPL C ;Invert carry, so it can be directly copied into result MOV A,R4 RLC A ;Shift carry flag into temporary result MOV R4,A MOV A,R5 RLC A MOV R5,A DJNZ B,div2 ;Now count backwards and repeat until "B" is zero MOV R3,05h ;Move result to R3/R2 MOV R2,04h ;Move result to R3/R2 RET ;-----------------------MODULE LCD-------------------------- INSTALL_LCD: ;chuong trinh con khoi tao cho LCD MOV A,#38H ;gui lenh tao LCD 2 dong ACALL COMMWRT
  10. MOV A,#0CH ;gui lenh hien thi man hinh va tat con tro ACALL COMMWRT MOV A,#80H ;dua con tro ve hang 1, cot 1 ACALL COMMWRT RET ;--------------------------------------- COMMWRT: CALL READY MOV PORT_LCD, A CLR RS_LCD CLR RW_LCD SETB E_LCD NOP NOP CLR E_LCD RET ;-------------------------------------- DATAWRT: CALL READY MOV PORT_LCD, A SETB RS_LCD CLR RW_LCD SETB E_LCD NOP NOP CLR E_LCD RET ;-------------------------------------- READY: CLR E_LCD CLR RS_LCD SETB RW_LCD MOV PORT_LCD, #0FFH SETB E_LCD JB PORT_LCD.7, READY CLR E_LCD CLR RW_LCD RET DELAY: MOV R5, #250 DELAY1: MOV R6, #255 DELAY2: DJNZ R6, DELAY2 DJNZ R5, DELAY1
  11. RET END ;--------------------------------------------------------------------------------------------- V. NẠP CHƯƠNG TRÌNH CHO HỆ LÀM VIỆC KẾT LUẬN Chương trình cho phép đo chính xác độ rộng xung 6 kênh Lựa chọn kênh hiển thị qua bàn phím, có thể mở rộng đo nhiều kênh hơn Giá trị hiển thị trên màn hình là 16 bít cho nên có thể đo xung có tần số nhỏ . Ví dụ, với xung có độ rộng 90% thì tần số có thể là 15Hz
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2