Một bộ tạo số ngẫu nhiên sử dụng vi điều khiển 8051 hiển thị một số ngẫu nhiên từ 0 đến 99 được trình bày trong bài viết này. Mạch chính nó rất đơn giản và có thể không tìm thấy bất kỳ ứng dụng nào trong các dự án nhúng nghiêm túc và bài viết này chỉ là minh họa. Mạch này dựa trên vi điều khiển AT89S51, hai màn hình hiển thị LED bảy đoạn, hai transistor và một số linh kiện passsive.
Sơ đồ mạch
Bộ tạo số ngẫu nhiên sử dụng 8051 Bộ tạo số ngẫu nhiên sử dụng 8051 Danh sách các linh kiện Vi điều khiển (AT89S51) - 1 chiếc Nút nhấn - 2 chiếc Hiển thị bảy đoạn - 2 chiếc Transistor (2N2222) - 2 chiếc Resistor (100 ohm) - 10 chiếc Resistor (8.2k ohm) - 1 chiếc Resistor (10k ohm) - 1 chiếc Tụ (10uF/10V) - 2 chiếc Cách hoạt động Hai màn hình hiển thị LED bảy đoạn được kết hợp và các đường dữ liệu của chúng được kết nối với Port0 của vi điều khiển. Transistor Q1 và Q2 điều khiển các màn hình D1 và D2 tương ứng. Tín hiệu điều khiển cho các transistor này được lấy từ P1.1 và P1.2. Nút nhấn S1, tụ C1 và resistor R10 tạo thành mạch đặt lại sau khi nhấn. Resistor R9, tụ C2 và nút nhấn S2 sẽ cung cấp một tín hiệu ngắt phần cứng ở chân INTO (chân 12) khi nút S2 được nhấn. Ở đây, R9 và C2 cũng dùng để chống nhiễu.
Sau khi bật nguồn, màn hình sẽ hiển thị trống và khi nút nhấn S2 được nhấn, màn hình sẽ hiển thị một số ngẫu nhiên từ 0 đến 99. Để thử lại, bạn phải nhấn nút đặt lại sau đó nhấn nút S2. Nếu bạn chỉ cần một chữ số, hãy loại bỏ màn hình D2 và các linh kiện đi kèm. Mọi thứ còn lại không thay đổi.
ORG 000H SJMP MAIN ORG 003H // sets the starting address for the ISR ACALL ISR // calls the ISR subroutine when S2 is pressed RETI // return from interrrupt MAIN:SETB IP.0 // this part sets the initial conditions SETB TCON.0 SETB IE.0 SETB IE.7 MOV P0,#00000000B MOV P1,#00000000B MOV DPTR,#LUT // moves the starting address of LUT to DPTR LABEL:MOV R6,#99D // this part generates the random number LOOP:MOV A,R6 DJNZ R6,LOOP SJMP LABEL ISR: MOV A,R6 // Subroutine ISR displays the current random number MOV B,#10D DIV AB SETB P1.2 ACALL DISPLAY MOV P0,A ACALL DELAY MOV A,B CLR P1.2 SETB P1.1 ACALL DISPLAY MOV P0,A ACALL DELAY CLR P1.1 SJMP ISR RET DELAY: MOV R3,#02H // this subroutine creates 1mS delay for switching the displays DEL1: MOV R2,#0FAH DEL2: DJNZ R2,DEL2 DJNZ R3,DEL1 RET DISPLAY: MOVC A,@A+DPTR // produces the digit drive pattern for the current digit in A RET LUT: DB 3FH // Look up table DB 06H DB 5BH DB 4FH DB 66H DB 6DH DB 7DH DB 07H DB 7FH DB 6FH END
Về chương trình Phần đầu của chương trình là phần được đánh dấu là MAIN, thiết lập các điều kiện ban đầu và tham số ngắt. Phần tiếp theo là vòng lặp được đặt tên là LABEL, nạp giá trị 99D vào thanh ghi R6 sau đó giảm giá trị này đi 1 cho đến khi giá trị là 0, sau đó lặp lại quy trình. Đây là phần tạo số ngẫu nhiên. Mỗi khi R6 giảm giá trị, giá trị kết quả được chuyển vào bộ ghi A. Phần tiếp theo là chương trình dịch vụ ngắt được viết dưới dạng một chương trình con được đặt tên là ISR. Mỗi khi có một ngắt tại INT0 (khi nút nhấn S2 được nhấn), ISR được gọi.
ISR thực hiện các phép tính toán toán học cần thiết trên nội dung của A để tách ra hai chữ số và sau đó tiến hành hiển thị chúng trên màn hình. Chương trình con DELAY tạo ra một độ trễ khoảng 1ms để chuyển đổi màn hình. Chương trình con DISPLAY cộng giá trị hiện tại trong A với địa chỉ được lưu trữ trong DPTR (địa chỉ bắt đầu của bảng tra cứu) và chuyển nội dung mục tiêu vào A. Kết quả sẽ là mẫu điều khiển chữ số cho chữ số hiện tại trong A.
Hotline: 0979 466 469