1. Trang chủ
  2. » Luận Văn - Báo Cáo

ĐỒ án i đề tài thiết kế chương trình chọn và tính tiền hàng hóa tự động sử dụng hệ vi xử lý 8086

70 6 0

Đ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

Định dạng
Số trang 70
Dung lượng 4,26 MB

Cấu trúc

  • A. Ý TƯỞNG (0)
    • 1. Đặt vấn đề (0)
    • 2. Hướng thực hiện (3)
      • 2.1. Mục tiêu (3)
      • 2.2. Sơ đồ khối (3)
      • 2.3. Hoạt động của hệ thống (0)
    • 3. Cơ sở lý thuyết (4)
      • 3.1. Hệ vi xử lý 8086 (4)
      • 3.2. IC 8255A (11)
      • 3.3. IC giải mã 74273 (14)
      • 3.4. LCD 20x4 (14)
  • B. HOÀN THIỆN Ý TƯỞNG (16)
    • 1. Xây dựng 1 chương trình chọn và tính tiền hàng hóa tự động trên phần mềm EMU (16)
      • 1.1. Lưu đồ thuật toán (16)
      • 1.2. Lập trình (16)
      • 1.3. Kết quả (41)
    • 2. Mô phỏng chương trình trên phần mềm Proteus (43)
      • 2.1. Lưu đồ thuật toán (44)
      • 2.2. Xây dựng mạch nguyên lý (44)
      • 2.3. Lập trình (46)
      • 2.4. Kết quả (67)

Nội dung

Ý TƯỞNG

Hướng thực hiện

- Xây dựng 1 chương trình chọn và tính tiền hàng hóa tự động trên phần mềm EMU 8086 - Microprocessor Emulator

- Mô phỏng chương trình trên phần mềm Proteus với:

• Vi xử lý 8086: vi xử lý trung tâm.

• IC 74273 là IC số được tích hợp bởi 8 flip-flop loại D: dùng để tách các đường địa chỉ của vi xử lý 8086.

• IC 8255A: mạch phối ghép vào/ra lập trình được gồm 24 chân I/O.

• Màn hình: dùng để hiển thị menu sản phẩm ,hóa đơn.

• Bàn phím: dùng để lựa chọn sản phẩm.

- Từ những mục tiêu trên, nhóm em xây dựng được 1 sơ đồ khối hệ thống mô phỏng như sau:

Màn hìnhBàn phím hiển thị và bàn phím sẽ nhận tương tác của người mua hàng.

Khi khởi chạy, vi xử lý 8086 sẽ được tách các bit địa chỉ thông qua IC

IC 8255A sử dụng 8 bit địa chỉ và dữ liệu để thiết lập tín hiệu địa chỉ cho 4 thanh ghi bên trong, tùy theo thiết lập đã được định trước Thiết bị này phối ghép với màn hình và bàn phím nhằm hiển thị menu, tương tác và hiển thị kết quả hóa đơn.

Cơ sở lý thuyết

- Hệ vi xử lý 8086 thuộc họ Intel 80x86 với 16 bit dữ liệu và 20 bit địa chỉ 3.1.1 Sơ đồ khối của 8086

- Bên trong bộ vi xử lý 8086 bao gồm 2 khối chính:

Khối thực hiện lệnh (EU - Execution Unit) chịu trách nhiệm giải mã và thi hành các lệnh, trong khi khối giao tiếp bus (BIU - Bus Interface Unit) đảm bảo việc trao đổi thông tin hiệu quả giữa vi xử lý 8086 và các thiết bị ngoại vi.

- Sau đây chúng ta sẽ tìm hiều cấu tạo bên trong của từng khối:

Hình 1 Sơ đồ khối của bộ vi xử lý 8086

 Khối thực hiện lệnh (EU)

Khối thực hiện lệnh (EU- Execution Unit) là nơi giả mã và thi hành các lệnh

EU bao gồm: lại có chức năng đặc biệt của riêng nó mà các thanh ghi khác không thực hiện được.

Thanh ghi AX là nơi lưu trữ kết quả của các thao tác, với AL được sử dụng cho kết quả 8 bit.

+ Thanh ghi BX: đây là thanh ghi cơ sở, thương được chứa địa chỉ cơ sở của một bảng khi sử dụng lệnh XLAT

Thanh ghi CX là một loại thanh ghi đếm, thường lưu trữ số lần lặp lại khi sử dụng lệnh LÔP Trong khi đó, thanh ghi CL thường chứa thông tin về số lần quay hoặc dịch bit của các thanh ghi khác.

Thanh ghi DX là một thanh ghi dữ liệu quan trọng, thường kết hợp với thanh ghi AX để thực hiện các phép nhân và chia số 16 bit Ngoài ra, DX còn được sử dụng để lưu trữ địa chỉ các cổng trong các lệnh vào/ra dữ liệu trực tiếp.

Trong vi xử lý 8086, có 3 thanh ghi con trỏ (IP, BP, SP) và 2 thanh ghi chỉ số (SI, DI) với độ dài 16 bit Các thanh ghi này, ngoại trừ IP, có thể hoạt động như các thanh ghi đa năng, nhưng mỗi thanh ghi được sử dụng chủ yếu như là thanh ghi lệch cho các đoạn tương ứng.

+ Bảng tóm tắt sự kết hợp ngầm định giữa thanh ghi đoạn và thanh ghi lệch:

Thanh ghi đoạn Thanh ghi lệch Địa chỉ

CS IP Địa chỉ lệnh sắp thực hiện

DS BX, DI, SI Địa chỉ trong đoạn dữ liệu

SS SP hoặc BP Địa chỉ trong đoạn ngăn xếp

ES DI Địa chỉ chuỗi đích

Thanh ghi cờ F, hay còn gọi là thanh ghi trạng thái, là một thanh ghi đặc biệt trong CPU Mỗi bit của thanh ghi này phản ánh trạng thái của kết quả phép toán do ALU thực hiện hoặc trạng thái hoạt động của CPU Mặc dù thanh ghi cờ có 16 bit, chỉ 9 bit được sử dụng để làm bit cờ, bao gồm các bit như O, D, I, T, S, Z, A, P và C.

Ca ùc cờ của bộ vi xử lý 8086

X : Không được định nghĩa Hình 3.3 Sơ đồ thanh ghi cờ của bộ vi xử lý 8086/88

- Các bit cờ chia thành hai loại:

Các cờ trạng thái bao gồm 6 loại: C, P, A, Z, S và O Những cờ này được thiết lập thành 1 hoặc xóa thành 0 sau hầu hết các phép toán học và logic.

Các cờ điều khiển T, I, D được sử dụng để điều chỉnh chế độ hoạt động của bộ vi xử lý Những cờ này có thể được thiết lập bằng 1 hoặc xóa bằng 0 thông qua các lệnh điều khiển.

- Khối điều khiển (CU- Control unit): Có nhiệm vụ tạo ra các tín hiệu điều khiển các bộ phận bên trong và bên ngoài CPU.

Khối giao tiếp bus (BIU - Bus Interface Unit) đóng vai trò quan trọng trong việc đảm bảo trao đổi thông tin giữa vi xử lý 8086 và các linh kiện bên ngoài BIU bao gồm nhiều thành phần thiết yếu giúp quản lý và điều phối dữ liệu trong hệ thống.

- Một bộ cộng để tạo địa chỉ vật lý 20 bit từ các thanh ghi 16 bit.

- Bốn thanh ghi đoạn 16 bit gồm CS, DS, SS và ES để giúp 8086 truy cập tới các đoạn trên bộ nhớ.

+ Thanh ghi đoạn mã CS (Code Segment),.

+ Thanh ghi đoạn dữ liệu DS (Data Segment).

+ Thanh ghi đoạn dữ liệu phụ ES (Extra Segment).

+ Thanh ghi đoạn ngăn xếp SS (Stack Segment).

- Mạch logic điều khiển có nhiệm vụ đảm bảo giao tiếp giữa 8086 với thiết bị bên ngoài.

- Hàng đợi lệnh có độ dài 6 byte là nơi chứa các mã lệnh đọc được nằm sẵn để chờ EU xử lý.

Vi xử lý 8086 được thiết kế để hoạt động một trong hai chế độ, tùy thuộc vào mức điện áp đặt ở chân số 33 (chân MN/MX):

Chế độ tối thiểu (chế độ MIN) được kích hoạt khi điện áp tại chân số 33 đạt 5V Trong chế độ này, hệ thống chỉ sử dụng vi xử lý 8086 cùng với các vi mạch nhớ và các vi mạch giao tiếp vào ra.

Chế độ tối đa (MAX) được kích hoạt khi điện áp tại chân số 33 đạt mức 0V, áp dụng cho các hệ thống đa xử lý và đồng xử lý, bao gồm vi xử lý 8086 và bộ đồng xử lý toán học 8087.

Vi xử lý 8086 sở hữu 20 chân địa chỉ từ A0 đến A19, trong đó 16 chân địa chỉ thấp A0 đến A15 được kết hợp với 16 chân dữ liệu từ D0 đến D15 trên các chân AD0 đến AD15 Bốn chân địa chỉ cao nhất A16 đến A19 được ghép kênh với tín hiệu trạng thái S3 đến S6, xuất hiện trên các chân A16/S3 đến A19/S6.

- Các chân mang thông tin dữ liệu: Vi xử ly 8086 có 16 đường dây dữ liệu từ

D15 được kết nối với 16 đường địa chỉ từ D0 đến D15, cho phép truyền tải thông tin dữ liệu trong chu kỳ bus dữ liệu Các đường dây này đảm nhiệm vai trò mang dữ liệu, bao gồm thông tin đọc ra hoặc ghi vào bộ nhớ.

- Các chân tín hiệu trang thái.

Bốn đường dây địa chỉ cao nhất từ A16 đến A19 của 8086 được ghép kênh với các tín hiệu trạng thái từ S3 đến S6 Các bit trạng thái này được truyền đồng thời với dữ liệu qua các chân AD0 đến AD15.

READY là tín hiệu thông báo cho CPU về trạng thái sẵn sàng của thiết bị ngoại vi hoặc bộ nhớ Khi tín hiệu READY bằng 1, CPU có thể thực hiện việc đọc/ghi dữ liệu mà không cần thêm chu kỳ chờ Ngược lại, nếu thiết bị ngoại vi hoặc bộ nhớ có tốc độ chậm, chúng sẽ gửi tín hiệu READY bằng 0 để yêu cầu CPU tạm dừng Trong trường hợp này, CPU sẽ kéo dài thời gian thực hiện đọc/ghi bằng cách thêm chu kỳ chờ.

- Các chân tín hiệu điều khiển.

HOÀN THIỆN Ý TƯỞNG

Xây dựng 1 chương trình chọn và tính tiền hàng hóa tự động trên phần mềm EMU

# Chương trình lựa chọn và tính tiền, in ra hóa đơn hàng hóa tự động model small

Chào mừng bạn đến với The Coffee House! Chúng tôi rất vui được giới thiệu thực đơn đa dạng của mình, bao gồm các loại thức uống như cà phê, trà và macchiato, cùng với các món bánh và snack hấp dẫn Trong menu cà phê, bạn có thể lựa chọn từ nhiều loại như Bạc Sỉu, Americano, Cà Phê Đen, Espresso, Cà Phê Sữa, Cappuccino và Sô-cô-la đá Đối với trà và macchiato, chúng tôi cung cấp các lựa chọn như Trà Đào Cam Sả, Trà Đen Macchiato, Trà Matcha Latte, Trà Xoài Macchiato và Trà Cherry Macchiato Hãy đến và thưởng thức những hương vị độc đáo tại The Coffee House!

Vui lòng chọn từ menu các loại đồ uống đá xay với giá cả hợp lý: 1 Chanh sa đá xay (49K), 2 Đào Việt quất đá xay (59K), 3 Chocolate đá xay (59K), và 4 Cookies đá xay.

Vui lòng chọn từ các mục trong menu chính Chúng tôi cung cấp nhiều loại sinh tố trái cây với giá 59K, bao gồm sinh tố cam xoài và sinh tố việt quất Ngoài ra, bạn cũng có thể thưởng thức các loại bánh và snack với giá 29K, như bánh chocolate, bánh matcha, và bánh bông lan trứng muối Hãy chọn món yêu thích của bạn từ menu!

TIRAMISU (29K) **$" tb45 db 10,13,"** 5 QUAY VE MENU CHINH **$" tb46 db

Vui lòng chọn từ 1 đến 5 món Số tiền thanh toán (Nghìn Đồng): Cảm ơn bạn rất nhiều! Bạn đã nhập sai, vui lòng nhập lại Thực đơn bạn đã chọn bao gồm các món như Bạc Sỉu (29K), Americano (39K), Cà Phê Đen (29K), Espresso (35K), Cà Phê Sữa (29K), Cappuccino (45K), Sô-cô-la Đá (55K), Trà Đào Cam Sả (45K), Trà Đen Macchiato (42K), Trà Matcha Latte (59K), Trà Xoài Macchiato (55K), Trà Cherry Macchiato (55K), Trà Oolong Vải Như Ý (45K), Chanh Sả Đá Xay (49K), Đào Việt Quất Đá Xay (59K), Chocolate Đá Xay (59K), Cookies Đá Xay (59K), Sinh Tố Cam Xoài (59K), Sinh Tố Việt Quất (59K), Bánh Chocolate (29K), Bánh Matcha (29K), Bánh Bông Lan Trứng Muối (29K), và Bánh Tiramisu (29K).

Kiểm tra xem lựa chọn môn học nào là phù hợp nhất giữa các tùy chọn cf1 đến cf7, cũng như các môn tm1 đến tm6 Ngoài ra, xem xét các tùy chọn tu1 đến tu6 và bs1 đến bs4 để đưa ra quyết định cuối cùng.

The code initializes the data segment by moving the address of the data into the AX register and setting the DS register It then displays a string from the data segment using interrupt 21h Following this, it clears specific memory locations by moving zero values into multiple registers, including variables a through e and cf1 through cf7, as well as tm1 through tm6 and tu1 through tu6, preparing them for further operations.

; mov bs1,0 mov bs2,0 mov bs3,0 mov bs4,0 ; call nhap ;ket thuc ;mov ah, 4ch ;int 21h HLT main endp

The assembly code snippet begins with defining a menu input procedure, where it uses DOS interrupt 21h to read and display menu options The main menu is displayed using multiple `mov ah, 9` instructions to load different text strings into the DX register, followed by invoking the interrupt to print them User input is captured with `mov ah, 1`, and the input is compared against specific values to determine the selected menu option If the input matches one of the predefined values (31h to 35h), it jumps to the corresponding label; otherwise, it handles invalid input by displaying an error message before returning to the main input loop.

The code snippet begins by displaying a series of messages using interrupts, prompting user input for various options It checks the input against specific values, incrementing corresponding counters based on the user's selection If the input is invalid, it displays an error message and prompts for input again Upon valid input, it proceeds to calculate a total based on the selections made The program includes routines for handling user input and displaying results, ensuring a smooth interaction process.

The provided assembly code outlines a series of input and output operations using interrupts for user interaction It begins by displaying various messages stored in memory locations, prompting the user for input The program checks the input value and directs the flow to different sections based on the user's selection, incrementing corresponding counters for each choice If the input is invalid, it notifies the user and returns to the main input prompt The program also includes functionality to calculate totals based on user selections and display results accordingly Overall, it demonstrates a structured approach to handling user inputs and performing calculations in assembly language.

The provided assembly code outlines a procedure for user input handling and processing within a program It begins by displaying various prompts to the user using interrupt 21h and checks for specific input values (from 31h to 35h) to navigate to different sections of the code Each input corresponds to a specific action, such as incrementing counters or proceeding to calculations If the input is invalid, the program redirects to an error handling section The code also includes logic for summing values and determining the total amount, ensuring a structured flow for user interaction and data processing.

The article outlines a series of assembly language commands for a program that handles user input related to fruit drinks It begins by displaying a menu and waiting for user input, with specific commands to check the user's choice Depending on the input, it increments counters for different selections or prompts an error message for invalid entries The program uses conditional jumps to navigate through various sections, ultimately calculating the total price based on the user's selections Key functions include displaying messages, reading input, and performing arithmetic operations to derive the final total.

The article outlines a series of assembly language instructions for a program that manages user input and processes commands The program begins by displaying multiple messages stored in different text buffers, prompting user interaction It checks the user input against predefined values, directing the flow to specific input handling routines based on the input received Each valid input increments a corresponding counter and continues to a common processing function If the input is invalid, the program displays an error message and prompts the user to try again The program also includes functionality to calculate a total amount based on the user's selections Overall, the code demonstrates a structured approach to handling user input and performing calculations in an assembly language environment.

The program begins by initializing registers and displaying messages using interrupts It calculates the sum of five variables (a, b, c, d, e) and divides the result by 10, storing the remainder The program then converts the remainder to its ASCII representation and displays it Conditional checks direct the flow to specific menus based on the values of various flags (cf1, cf2, etc.), leading to different outcomes depending on the conditions met Finally, it concludes with a thank-you message.

The article outlines a series of assembly language instructions for displaying menu options using DOS interrupts Each menu item is processed by loading the appropriate message into the DX register and displaying it with interrupt 21h The program increments a counter (cf1 to cf7) and converts it to an ASCII character for display, followed by resetting the counter to zero After each menu option is displayed, the control jumps back to the menu selection function, ensuring a seamless user interface experience.

The assembly code snippet demonstrates a series of menu options, labeled from menu_21 to menu_26, which utilize DOS interrupt 21h to display text and handle user input Each menu option begins with setting up the display using `mov ah, 9` and loading the corresponding text into the data register `dx` The code then retrieves the user input, converts it to an ASCII character by adding 30h, and displays it using `mov ah, 2` After processing the input, the variable corresponding to each menu option (tm1 to tm6) is reset to zero before jumping to the `menu_da_chon` label for further action This structure ensures a consistent method for handling user selections across multiple menu options.

Mô phỏng chương trình trên phần mềm Proteus

Trong phần trước, chúng tôi đã xây dựng và mô phỏng chương trình trên phần mềm EMU 8086 chỉ với vi xử lý 8086 mà không có ghép nối ngoại vi Ở phần này, để làm cho chương trình trở nên trực quan hơn, chúng tôi đã sử dụng phần mềm Proteus Để mô phỏng trên phần mềm này, chúng tôi cần thiết kế mạch nguyên lý và tích hợp màn hình, bàn phím Do đó, chương trình cũng được điều chỉnh một phần để phù hợp với các lệnh vào/ra của ghép nối ngoại vi cùng với các chương trình con nhằm điều khiển màn hình và bàn phím.

2.2 Xây dựng mạch nguyên lý

- Do IC 74273 được tích hợp bởi 8 FlipFlop D nên mỗi IC chỉ có thể tách được

8 đường địa chỉ đa hợp của 8086 Vì vậy sơ đồ cần 3 con IC 74273 để tách hết 20 đường địa chỉ của 8086.

- Chúng em lựa chọn địa chỉ các cổng PA, PB, PC và CWR lần lượt là E1H, E3H, E5H và E7H.

- Ta có bảng địa chỉ các cổng như sau:

- Ta nhận thấy, bit có trọng số thấp nhất A0 có giá trí không đổi và là bit ‘1’ nên các chân dữ liệu được sử dụng cho 8255A sẽ là chân D8-D15.

- Bit địa chỉ thứ 2 và 3 (A1-A2) tạo thành tổ hợp 2 bit (00-01-10-11) tương tự như bit A0-A1 trên 8255A nên được sử dụng cho 2 cổng A0, A1 của 8255A.

Các bit A0 và A3-A15 là các bit địa chỉ cố định, được sử dụng để kết nối với mạch OR cùng với chân M/IO và GND, nhằm tạo ra tín hiệu chọn vỏ CS của 8255A (khi CS = 0, 8255A hoạt động) Nếu các chân địa chỉ bị thay đổi hoặc lệch, tín hiệu chọn vỏ CS sẽ không đạt giá trị 0 và IC 8255A sẽ không hoạt động.

Màn hình LCD 20x4 được kết nối với IC 8255A, trong đó cổng PA đảm nhận chức năng vào/ra dữ liệu qua 8 bit Đồng thời, 3 bit thấp của cổng PB được sử dụng để điều khiển các chân RS, RW và E của LCD.

- Bàn phím 2x3 là tổ hợp các nút nhấn được kết nối với 6 bit thấp của cổng PC.

- Từ đó, chúng em có sơ đồ mô phỏng ghép nối giữa 8086, IC giả mã địa chỉ

74273, LCD 20x4 và bàn phím như sau:

# Chương trình tính và in ra menu hàng hóa đã chọn tự động với IC lập trình vào/ra 8255A và LCD, bàn phím.

;Bien de theo doi du lieu tren cac cong

PORTA_VAL DB 0 PORTB_VAL DB 0 PORTC_VAL DB 0 ;Chuoi can in

TB2 DB " THE COFFEE HOUSE$"

TB7 DB " MENU CA PHE$"

TB10 DB "3.CA PHE SUA-29K$"

TB15 DB " MENU BANH & SNACK$"

TB16 DB "1.BANH BONG LAN-29K$"

TB19 DB " BAN MUON MUA THEM$"

TB21 DB " THUC DON DA CHON$"

TB24 DB "CA PHE SUA (29K)$"

TB28 DB "BANH BONG LAN (29K)$"

TB31 DB "So tien thanh toan:$"

; cf1 db ? cf2 db ? cf3 db ? tm1 db ? tm2 db ? tm3 db ? bs1 db ? bs2 db ? bs3 db ?

;Dia chi cac cong PORTA EQU 11100001b ;PORTA duoc ket noi tu D7-D0 cua LCD

PORTB EQU 11100011b ;PORTB0 ket noi voi chan RW, PORTB1 la RS, PORTB2 la EN cua LCD

PORTC EQU 11100101b PCW EQU 11100111b ;Thanh ghi dieu khien

;Ban phim 3x3 ;Cot DB 0D0H, 0B0H, 070H ;Key DB 0DH, 015H, 019H, 0EH, 016H, 01AH ENDS

; dat 1 so cac thu tuc:

MOV AX, @DATA; thiết lập thanh ghi AX với dữ liệu MOV DS, AX; gán thanh ghi DS với giá trị của AX để quản lý đoạn dữ liệu MOV ES, AX; cấu hình thanh ghi ES cho đoạn dữ liệu phụ Cuối cùng, thiết lập chức năng của thanh ghi điều khiển tới các cổng PA, PB, PC bằng lệnh MOV DX, PCW.

MOV AL,10001001B ;PA, PB output, PC input OUT PCW,AL

CALL LCD_INIT ; thiet lap ban dau mov a,0 mov b,0 mov c,0 mov cf1,0 mov cf2,0 mov cf3,0 mov tm1,0 mov tm2,0 mov tm3,0 mov bs1,0 mov bs2,0 mov bs3,0

MOV DL,2 ;in ra dong 2 MOV DH,1

CALL LCD_SET_CUR LEA SI,TB1

MOV DL,3 ; in ra dong 3 MOV DH,1

CALL LCD_SET_CUR LEA SI,TB2

CALL LCD_PRINTSTR MOV CX,60000

MOV DL,1 MOV DH,1 CALL LCD_SET_CUR LEA SI,TB3

; MOV DL,2 MOV DH,1 CALL LCD_SET_CUR LEA SI,TB4

; MOV DL,3 MOV DH,1 CALL LCD_SET_CUR LEA SI,TB5

; MOV DL,4 MOV DH,1 CALL LCD_SET_CUR LEA SI,TB6

CALL LCD_PRINTSTR CHON_MON:

;JE QUAY_LAI JMP CHON_MON MENU_1: mov bl,0 IN_MENU_1:

MOV DL,1 MOV DH,1 CALL LCD_SET_CUR LEA SI,TB7

; MOV DL,2 MOV DH,1 CALL LCD_SET_CUR LEA SI,TB8

; MOV DL,3 MOV DH,1 CALL LCD_SET_CUR LEA SI,TB9

; MOV DL,4 MOV DH,1 CALL LCD_SET_CUR LEA SI,TB10

JE QUAY_LAI JMP KIEM_TRA_1

The assembly code initializes registers and sets specific flags before jumping to a common section In MENU_1_1, it sets the value of AL to 0, updates the carry flag CF1, and assigns 29 to AX Similarly, MENU_1_2 assigns 45 to AX while updating CF2, and MENU_1_3 sets AX to 29 with CF3 The chung_1 section clears the LCD and displays the result on line 2.

MOV DH,1 CALL LCD_SET_CUR LEA SI,TB19

CALL LCD_PRINTSTR MOV DL,3 ; in ra dong 3 MOV DH,1

CALL LCD_SET_CUR LEA SI,TB20

JE IN_MENU_1 CMP BL,05H

JE tinh_tien JMP KT_YN_1 tinh_tien: call tinh_tien_tong jmp START

MENU_2: mov bl,0 IN_MENU_2:

MOV DL,1 MOV DH,1 CALL LCD_SET_CUR LEA SI,TB11

; MOV DL,2 MOV DH,1 CALL LCD_SET_CUR LEA SI,TB12

; MOV DL,3 MOV DH,1 CALL LCD_SET_CUR LEA SI,TB13

; MOV DL,4 MOV DH,1 CALL LCD_SET_CUR LEA SI,TB14

JE QUAY_LAIJMP KIEM_TRA_2

The assembly code snippet initializes three different menu options, each setting a variable (tm1, tm2, or tm3) to 1 and loading a specific value into the AX register (either 45 or 55) After executing these instructions, the program jumps to a common section labeled "chung_2," where it clears the LCD display and prepares to output data on the second line The code utilizes the XOR operation to reset the AH register and adds the contents of the AX register to a variable 'b', updating 'b' with the new value.

MOV DH,1 CALL LCD_SET_CUR LEA SI,TB19

CALL LCD_PRINTSTR MOV DL,3 ; in ra dong 3 MOV DH,1

CALL LCD_SET_CUR LEA SI,TB20

MOV CX,100 CALL DELAY KT_YN_2:

JE IN_MENU_2 CMP BL,05H

JE tinh_tien JMP KT_YN_2

MENU_3: mov bl,0 IN_MENU_3:

MOV DL,1 MOV DH,1 CALL LCD_SET_CUR LEA SI,TB15

; MOV DL,2 MOV DH,1 CALL LCD_SET_CUR LEA SI,TB16

; MOV DL,3 MOV DH,1 CALL LCD_SET_CUR LEA SI,TB17

; MOV DL,4 MOV DH,1 CALL LCD_SET_CUR LEA SI,TB18

JE QUAY_LAIJMP KIEM_TRA_3

The assembly code snippet initializes three menu options, setting their respective values to 1 and directing the flow to a common label It performs a bitwise operation to clear the high byte of the AX register, then adds a value to AX and stores the result in a variable Finally, it calls a function to clear the LCD display and prepares to output data to the second line of the display.

MOV DH,1 CALL LCD_SET_CUR LEA SI,TB19

CALL LCD_PRINTSTR MOV DL,3 ; in ra dong 3 MOV DH,1

CALL LCD_SET_CUR LEA SI,TB20

MOV CX,100 CALL DELAY KT_YN_3:

JE IN_MENU_2 CMP BL,05H

JE tinh_tien JMP KT_YN_3 QUAY_LAI:

;input: CX dung de dieu khien thoi gian tre CXP chinh la 1ms

JCXZ @DELAY_END ;nhay neu noi dung thanh dem rong

; Khoi tao LCD PROC LCD_INIT

;thiet lap RS=En=RW=0 > che do ghi lenh

;Thiet lap lai trinh tu

MOV AH,38H ;giao tiep 8 bit, hien thi tren ca 4 dong, kich thuoc font 5x7 CALL LCD_CMD

MOV AH,0CH ;bat hien thi va tat con tro CALL LCD_CMD

MOV AH,01H ;xoa toan bo noi dung tren man hinh LCD

MOV AH,06H ;tu dong di chuyen con tro den vi tri tiep theo moi khi xuat ra LCD 1 ki tu

CALL LCD_CMD ENDP LCD_INIT RET

;gui lenh toi LCD PROC LCD_CMD

;thiet lap rs=0 > ghi lenh

AND AL,0FCH ;En-RS-RW

;thiet lap lenh ra tren chan.

MOV AL,AH ; tuy theo AH ma LCD se xu ly theo lenh CALL OUT_A

;Sau do cho En tu 1 >0 de cho phep doc/ghi

OR AL,100B ;En-RS-RW

AND AL,0FBH ;En-RS-RW

POP AX ; lay du lieu cac thanh ghi ra POP DX

;ctc xoa toan bo noi dung tren man hinh LCD PROC LCD_CLEAR

MOV AH,1 CALL LCD_CMD ENDP LCD_CLEAR RET

;Ghi tung ki tu 1 PROC LCD_WRITE_CHAR

;set RS=1 > ghi du lieu

OR AL,10B ;EN-RS-RW

;set du lieu dau ra

MOV AL,AH ;tuy theo AH bang bao nhieu CALL OUT_A

OR AL,100B ;EN-RS-RW

AND AL,0FBH ;EN-RS-RW

POP AX ENDP LCD_WRITE_CHAR RET

;in ra chuoi ki tu tai vi tri da dat tai LCD_set_cur

;input: SI=dia chi cua chuoi, Si se tu ket thuc khi xuat hien ki tu '$'

PUSH SI;cat thanh ghi con tro nguon PUSH AX

;doc va ghi du lieu

LODSB ;Nap vao AL/AX 1 phan tu cua chuoi CMP AL,'$'

JE @LCD_PRINTSTR_EXIT MOV AH,AL

CALL LCD_WRITE_CHAR JMP @LCD_PRINTSTR_LT

POP AX POP SI ENDP LCD_PRINTSTR RET

;thiet lap hang PROC LCD_SET_CUR

;input: DL=hang, DH=Cot

; DH = 1-8, cot 1 tuong ung voi 1

;LCD se su dung dia chi cot bat dau tu 0

DEC DH ;tang DH len 1

JMP @LCD_SET_CUR_END

MOV AH,80H ; di chuyen dong 1 JMP @LCD_SET_CUR_ENDCASE

MOV AH,0C0H ;di chuyen xuong con dong 2 JMP @LCD_SET_CUR_ENDCASE

MOV AH,94H ; di chuyen dong 3 JMP @LCD_SET_CUR_ENDCASE

MOV AH,0D4H ;di chuyen xuong con dong 4 JMP @LCD_SET_CUR_ENDCASE

ADD AH,DH CALL LCD_CMD

POP AX ENDP LCD_SET_CUR RET

;set Output ra PROC OUT_A

PUSH DX MOV DX,PORTA OUT DX,AL MOV PORTA_VAL,AL POP DX

PUSH DX MOV DX,PORTB OUT DX,AL MOV PORTB_VAL,AL POP DX

The 3x3 KEYPORT keyboard scanning routine begins by initializing the AL register to zero and outputting this value to PORTA It then reads the input from PORTC and tests specific bits to determine which key has been pressed If the first key is detected, it sets BL to 01H; for the second key, it sets BL to 02H The routine continues checking each key until a key press is identified, looping back to the scanning process as necessary.

; phim_3: mov bl, 03H ;xor bh,bh ;PUSH bx RET phim_4: mov bl, 04H ;xor bh,bh ;PUSH bx RET

; phim_5: mov bl, 05H ;xor bh,bh ;PUSH bx RET phim_6: mov bl, 06H ;xor bh,bh ;PUSH bx RET KEYPORT endp

;tinh tien tong tinh_tien_tong proc

MOV DL,1 MOV DH,1 CALL LCD_SET_CUR LEA SI,TB21

The code snippet demonstrates a series of conditional jumps based on the comparison of various flags (cf1, cf2, cf3, tm1, tm2, tm3, bs1, bs2, bs3) to the value 1 Each comparison leads to a specific menu option, such as menu_11, menu_12, menu_13 for cf1, cf2, and cf3, respectively, and similarly for tm and bs flags If none of the conditions are met, the flow jumps to the cam_on label, indicating a default action.

; menu_11: mov cf1,0 MOV DL,2

MOV DH,1 CALL LCD_SET_CUR LEA SI,TB22

CALL LCD_PRINTSTR MOV CX,100

;MOV DONG_MAY, 1 jmp menu_da_chon menu_12: mov cf2,0 ;CMP DONG_MAY ,1 ;JE IN_12_DONG_4 MOV DL,2

MOV DH,1 CALL LCD_SET_CUR LEA SI,TB23

CALL LCD_PRINTSTR MOV CX,100

;MOV DONG_MAY, 1 jmp menu_da_chon menu_13: mov cf3,0 ;CMP DONG_MAY ,1 ;JE IN_13_DONG_4 MOV DL,2

MOV DH,1 CALL LCD_SET_CUR LEA SI,TB24

CALL LCD_PRINTSTR MOV CX,100

;MOV DONG_MAY, 1 jmp menu_da_chon

; menu_21: mov tm1,0 ;CMP DONG_MAY ,1 ;JE IN_12_DONG_4 MOV DL,3

MOV DH,1 CALL LCD_SET_CUR LEA SI,TB25

CALL LCD_PRINTSTR MOV CX,100

;MOV DONG_MAY, 1 jmp menu_da_chon menu_22: mov tm2,0 ;CMP DONG_MAY ,1 ;JE IN_12_DONG_4 MOV DL,3

MOV DH,1 CALL LCD_SET_CUR LEA SI,TB26

CALL LCD_PRINTSTR MOV CX,100

;MOV DONG_MAY, 1 jmp menu_da_chon menu_23: mov tm3,0 ;CMP DONG_MAY ,1 ;JE IN_12_DONG_4 MOV DL,3

MOV DH,1 CALL LCD_SET_CUR LEA SI,TB27

CALL LCD_PRINTSTR MOV CX,100

;MOV DONG_MAY, 1 jmp menu_da_chon

; menu_31: mov bs1,0 ;CMP DONG_MAY ,1 ;JE IN_12_DONG_4 MOV DL,4

MOV DH,1 CALL LCD_SET_CUR LEA SI,TB28

CALL LCD_PRINTSTR MOV CX,100

;MOV DONG_MAY, 1 jmp menu_da_chon menu_32: mov bs2,0 ;CMP DONG_MAY ,1 ;JE IN_12_DONG_4 MOV DL,4

MOV DH,1 CALL LCD_SET_CUR LEA SI,TB29

CALL LCD_PRINTSTR MOV CX,100

;MOV DONG_MAY, 1 jmp menu_da_chon menu_33: mov bs3,0 ;CMP DONG_MAY ,1 ;JE IN_12_DONG_4 MOV DL,4

MOV DH,1 CALL LCD_SET_CUR LEA SI,TB30

CALL LCD_PRINTSTR MOV CX,100

;MOV DONG_MAY, 1 jmp menu_da_chon

JE tra_ve jmp cam_on tra_ve:

RET tinh_tien_tong endp

Sau quá trình viết, mô phỏng và kiểm tra, chương trình của chúng tôi đã hoạt động hiệu quả và chính xác Tuy nhiên, do giới hạn về số dòng và ký tự hiển thị trên màn hình LCD 20x4, chúng tôi không thể hiển thị nhiều hàng hóa và số lần lặp lại của một hàng hóa như trong chương trình mô phỏng trên EMU.

- Sau đây là một số hình ảnh mô phỏng:

Ngày đăng: 17/12/2023, 01:43

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w