Khối điều khiển và ngôn ngữ lập trình
Vi xử lý 8086
Vi xử lý 8086 là bộ vi xử lý 16 bit đầu tiên của Intel, đồng thời là vi xử lý đầu tiên hỗ trợ tập lệnh x86 Intel cũng giới thiệu vi xử lý 8088, tương thích với 8086 nhưng có độ rộng bus dữ liệu chỉ bằng một nửa (8 bit) Vi xử lý này được sử dụng rộng rãi trong nhiều lĩnh vực, đặc biệt là trong các máy IBM PC/XT.
+) Có một hàng đợi lệnh, có khả năng lưu trữ 6 byte lệnh từ bộ nhớ, giúp xử lý nhanh hơn
+) là bộ xử lý 16bit đầu tiên có ALU 16 bit, thanh ghi 16bit, bus dữ liệu bên trong và bus dữ liệu ngoài 16bit giúp xử lý nhanh hơn
+) Nó sử dụng hai giai đoạn pipelining, tức là giai đoạn tìm nạp và giai đoạn thực thi, giúp cải thiện hiệu suất
+) Gồm 256 ngắt vector, 29000 bóng bán dẫn
Hình 2 Sơ đồ mô tả cấu trúc của bộ vi xử lý 8086 Đơn vị thực thi EU
Hướng dẫn cho BIU bao gồm việc ghi chú nguồn dữ liệu và tiến hành giải mã, thực hiện các chỉ dẫn cần thiết Chức năng chính của BIU là điều khiển các hoạt động trên dữ liệu thông qua bộ giải mã lệnh ALU và EU, mà không cần kết nối trực tiếp với các bus hệ thống BIU thực hiện các hoạt động này thông qua dữ liệu được cung cấp.
BIU chịu trách nhiệm quản lý tất cả dữ liệu và địa chỉ trên các xe bus cho EU, bao gồm việc gửi địa chỉ, nạp lệnh từ bộ nhớ, và đọc dữ liệu từ các cổng và bộ nhớ Do EU không có kết nối hướng với hệ thống bus, BIU đảm nhận vai trò quan trọng trong việc kết nối giữa EU và bus nội bộ.
Hình 3 Sơ đồ chân của bộ vi xử lý 8086
Nguồn cung và tín hiệu số được cung cấp thông qua nguồn điện 5V DC ở chân V CC - 40, trong khi chân V SS - 1 và 20 được sử dụng để nối đất, đảm bảo hoạt động ổn định của hệ thống.
Tín hiệu xung clock cung cấp thời gian cho bộ xử lý thực hiện các hoạt động với tần số khác nhau, bao gồm 5MHz, 8MHz và 10MHz Địa chỉ trạng thái bus và bus dữ liệu được xác định bởi AD0-AD15, với 16 bus địa chỉ/dữ liệu Trong đó, AD0-AD7 truyền dữ liệu byte bậc thấp, còn AD8-AD15 truyền dữ liệu byte bậc cao Trong chu kỳ xung nhịp đầu tiên, bus này mang địa chỉ 16 bit, sau đó chuyển sang truyền dữ liệu 16 bit.
Xe buýt A16/S3-A19/S6 là bốn xe buýt có địa chỉ và trạng thái cụ thể Trong chu kỳ xung nhịp đầu tiên, xe buýt này truyền tải địa chỉ 4 bit, sau đó tiếp tục phát đi các tín hiệu trạng thái.
BHE/S7 BHE là viết tắt của Bus High Enable, có mặt ở chân 34, được sử dụng để chỉ ra việc truyền dữ liệu qua bus dữ liệu D8-D15 Tín hiệu này ở mức thấp trong chu kỳ đồng hồ đầu tiên và sau đó sẽ hoạt động.
RD Nó có sẵn ở chân 32 và được sử dụng để đọc tín hiệu cho hoạt động đọc
READY là tín hiệu báo nhận từ các thiết bị I/O, cho biết rằng dữ liệu đang được truyền Khi tín hiệu này ở mức cao, nó cho thấy thiết bị đã sẵn sàng để truyền dữ liệu (Chân 22).
RESET là tín hiệu được sử dụng để khởi động lại quá trình thực thi, khiến bộ xử lý dừng ngay hoạt động hiện tại Tín hiệu này hoạt động ở mức cao trong hệ thống.
4 chu kỳ xung nhịp đầu tiên để ĐẶT LẠI bộ vi xử lý ( Chân 21)
Tín hiệu INTR là một yêu cầu ngắt, được lấy mẫu trong chu kỳ xung nhịp cuối cùng của mỗi lệnh, nhằm xác định xem bộ xử lý có nhận diện tín hiệu này là một ngắt hay không Tín hiệu này có sẵn tại chân 18.
TEST Khi tín hiệu này ở mức cao, thì bộ xử lý phải đợi trạng thái IDLE, nếu không thì quá trình thực thi sẽ tiếp tục.(Chân 23)
NMI Nó là một đầu vào được kích hoạt cạnh, gây ra một yêu cầu ngắt tới bộ vi xử lý.( Chân 17)
INTA Nó là một tín hiệu báo nhận ngắt và id Khi bộ vi xử lý nhận được tín hiệu này, nó sẽ báo nhận ngắt (Chân 24)
ALE là viết tắt của chốt kích hoạt địa chỉ, được tạo ra khi bộ xử lý bắt đầu bất kỳ hoạt động nào Tín hiệu này cho biết sự sẵn có của một địa chỉ hợp lệ trên các đường địa chỉ và dữ liệu.
Nó là viết tắt của Data Enable Nó được sử dụng để kích hoạt Bộ thu phát
8286 Bộ thu phát là một thiết bị dùng để tách dữ liệu khỏi bus địa chỉ / dữ liệu.(Chân
Tín hiệu Truyền / Nhận dữ liệu (TRD) quyết định hướng luồng dữ liệu qua bộ thu phát Khi tín hiệu ở mức cao, dữ liệu sẽ được truyền ra ngoài, và ngược lại khi tín hiệu ở mức thấp.
Tín hiệu này phân biệt giữa bộ nhớ và các hoạt động I/O, với mức cao biểu thị cho hoạt động I/O và mức thấp cho hoạt động của bộ nhớ Tín hiệu này có sẵn tại pin 28.
Nó là viết tắt của tín hiệu ghi, được sử dụng để ghi dữ liệu vào bộ nhớ hoặc thiết bị đầu ra, tùy thuộc vào trạng thái của tín hiệu M / IO (Chân 29).
Nó là viết tắt của tín hiệu Hold Acknowledgement và có sẵn ở chân 30 Tín hiệu này ghi nhận tín hiệu HOLD
Tín hiệu này thông báo cho bộ xử lý rằng các thiết bị bên ngoài đang yêu cầu truy cập vào các bus địa chỉ và dữ liệu, và nó được cung cấp tại pin 31.
Vi mạch 8255A
• Vi mạch 8255A là vi mạch cỡ lớn LSI, là mạch phối ghép vào ra song song lập trình được
Mạch phối ghép 40 chân là một thành phần quan trọng được sử dụng rộng rãi trong các hệ vi xử lý 8, 16 và 32 bit nhờ vào khả năng mềm dẻo trong ứng dụng thực tế.
• 24 đường dẫn lối vào ra xếp thành 3 cổng song song (port A,port B, port C) Một nửa cổng (PC4…PC&) thuộc nhóm A, còn lại nửa thuộc nhóm B
• Chân reset phải đuộc nối với tín hiệu reset chung toàn hệ thống
• Tín hiệu CS được nối với mạch tạo xung chọn thiết bị để đặt mạch
8255 là một vi mạch được sử dụng để giao tiếp với các thiết bị ngoại vi Để sử dụng 8255, các tín hiệu địa chỉ A0 và A1 sẽ chọn 4 thanh ghi bên trong vi mạch Trong đó, một thanh ghi điều khiển sẽ quản lý hoạt động của 8255, trong khi ba thanh ghi còn lại tương ứng với các cổng PA, PB và PC để thực hiện việc đọc dữ liệu.
Cấu tạo và nguyên lý hoạt động :
24 chân cho 3 cổng vào / ra
PAO - PAT : 8 chân cho Công A
PB0 - PB7 : 8 chân cho Cổng B
PC0 PC7 : B chân cho Cổng C
Nhóm A Gồm Cổng A và 4 bit cao của Cổng C
Nhóm B : Gồm cổng B và 4 bit thấp của Cổng C
B255 Có thể hoạt động ở chế độ ( 0 , 12 )
Dùng để chốt địa chỉ và trạng thái
Chân OC (Output Control) điều khiển cho phép/ cấm dữ liệu ra
Chức năng của từng chân LCD 1602:
- Chân số 1 - VSS : chân nối đất cho LCD được nối với GND của mạch điều khiển
- Chân số 2 - VDD : chân cấp nguồn cho LCD, được nối với VCC=5V của mạch điều khiển
- Chân số 3 - VE : điều chỉnh độ tương phản của LCD
- Chân số 4 - RS : chân chọn thanh ghi, được nối với logic "0" hoặc logic "1":
+ Logic “0”: Bus DB0 - DB7 sẽ nối với thanh ghi lệnh IR của LCD (ở chế độ “ghi”
- write) hoặc nối với bộ đếm địa chỉ của LCD (ở chế độ “đọc” - read)
+ Logic “1”: Bus DB0 - DB7 sẽ nối với thanh ghi dữ liệu DR bên trong LCD
- Chân số 5 - R/W : chân chọn chế độ đọc/ghi (Read/Write), được nối với logic “0” để ghi hoặc nối với logic “1” đọc
Chân số 6 - E, hay còn gọi là chân cho phép (Enable), đóng vai trò quan trọng trong việc chấp nhận các lệnh sau khi tín hiệu được truyền lên bus DB0-DB7 Cụ thể, trong chế độ ghi, dữ liệu trên bus sẽ được LCD chuyển vào thanh ghi bên trong khi phát hiện một xung chuyển từ cao xuống thấp (high-to-low transition) của tín hiệu chân E.
Trong chế độ đọc, dữ liệu sẽ được LCD truyền ra các chân DB0-DB7 khi phát hiện cạnh lên (low-to-high transition) tại chân E Dữ liệu này sẽ được giữ lại trên bus cho đến khi chân E trở về mức thấp.
Chân số 7 đến 14 (D0 đến D7) là 8 đường bus dữ liệu dùng để trao đổi thông tin với MPU, hoạt động trong hai chế độ: chế độ 8 bit, trong đó dữ liệu được truyền trên cả 8 đường với bit MSB là DB7, và chế độ 4 bit, nơi dữ liệu được truyền trên 4 đường từ DB4 đến DB7, với bit MSB cũng là DB7.
- Chân số 15 - A : nguồn dương cho đèn nền
- Chân số 16 - K : nguồn âm cho đèn nền
Sơ đồ khối phối lắp mạch
Lý do chọn 8086 và ASM
Trong quá trình học về vi xử lý 8086, chúng tôi nhận thấy đây là thiết bị cơ bản cho các chip cao cấp như i5 và i7 Để hiểu rõ hơn về 8086, nhóm chúng tôi đã quyết định thực hiện một mạch thực tế Ngoài ra, ngôn ngữ lập trình ASM, mặc dù là ngôn ngữ bậc thấp, không hỗ trợ các cấu trúc điều khiển như if hay for như trong C/C++.
THIẾT KẾ MẠCH
Kết quả mô phỏng
+ Thiết kế thành công được mạch
Mã nguồn và các vi xử lý hoạt động ổn định, được trình bày chi tiết ở phần III, cho phép thực hiện các phép tính cộng, trừ, nhân, chia một cách chính xác.
Lập trình vi xử lý
Sử dụng dạng ngôn ngữ lập trình bậc thấp Assembly
; GIA TRI CUA CAC CONG PA PB PC
PORTA_VAL DB 0 PORTB_VAL DB 0
CWR equ 10001000B ; C UPPER INPUT CON LAI OUTPUT
PA EQU 00H ;PORTA KET NOI VOI D0-D7 CUA LED
PB EQU 02H ;PORTB0 LA RW (READ/WRITE), PORTB1 LA RS(RESET SELECT), PORTB2 LA EN(ENABLE)
PC EQU 04H ;PORT KET NOI KEYPAD PCWR EQU 06H ;PORT DE DIEU KHIEN IO
NHAP DW 0 ; LUU SO NHAP VAO TU BAN PHIM SO_10 DW 10 ; DE NHA, CHIA 10
PHEP_TOAN DW 0 ; PHAN BIET +-x/
KET_QUA DW 0 ; LUU VA HIEN THI KET QUA
SO_PHEP_TINH DW 0 ; DE PHAN BIET LAN BAM DAU TIEN
HIEN_THI DW 0 ; DUNG DE HIEN THI TUNG CHU SO KHI CO KET QUA
XOA_MH DW 0 ; XOA MAN HINH SAU KHI RA KET QUA
BIEN_CX DW 0 ; TRANH TH CX BI THAY DOI VA KO CAN DUNG PUSH POP
CAC_CHU_SO DW 1 ; XOA MAY DAU 0 O KET QUA
DAU_TRU DW 0 ; CHECK DAU
MOV DX,PCWR ; SETUP CHE DO CUA 8255
; DAY LA PHAN SETUP TRUOC KHI BAT DAU CALL LCD_INIT
MOV DL,1 ;HANG 1 MOV DH,1 ;COT 1 CALL LCD_SET_CUR
LEA SI,MSSV1 ; CHO DIA CHI CUA NAME1 VAO
SI, DE HIEN TRONG HAM IN CHUOI
MOV DL,1 ;HANG 1 MOV DH,8 ;COT 1 CALL LCD_SET_CUR
LEA SI,MSSV2 ; CHO DIA CHI CUA MSSV1 VAO
SI, DE HIEN TRONG HAM IN CHUOI
MOV DL,2 ;HANG 2 MOV DH,4 ;COT 1 CALL LCD_SET_CUR
LEA SI,MSSV3 CALL LCD_PRINTSTR
; PHAN TREN NAY TUONG TU PHAN SETUP TRONG ADRUINO Y, CHAY 1 LAN THOI
LAP: ; CHUONG TRINH SE LAP TU DAY ; CHO HANG 1 XUONG LOW
NUT_7: ; NHAP SO VAO ROI NHAN 10
ADD NHAP, AX ; CONG VAO SO_NHAP
MOV NHAP, AX ; CHO LAI VAO SO_NHAP
NUT_8: ; NHAP SO VAO ROI NHAN 10
ADD NHAP, AX ; CONG VAO SO_NHAP
MOV NHAP, AX ; CHO LAI VAO SO_NHAP
NUT_9: ; NHAP SO VAO ROI NHAN 10
ADD NHAP, AX ; CONG VAO SO_NHAP
MOV NHAP, AX ; CHO LAI VAO SO_NHAP
CMP NHAP, 0 ; TRANH TH AN DAU TRUOC CA KHI NHAP SO
CMP SO_PHEP_TINH, 0 ; DO LUC TRUOC DA CO PHEP TINH ROI NEN PHAI DOI DAU = HOAC LA GHI TIEP SO
MOV AX, NHAP ; CHIA 10 DI VI SO BI NHAP GAP 10 LAN DIV SO_10
CMP SO_PHEP_TINH, 0 ; KIEM TRA XEM CO PHAI LAN DAU BAM KO
NUT_4: ; NHAP SO VAO ROI NHAN 10
ADD NHAP, AX ; CONG VAO SO_NHAP
MOV NHAP, AX ; CHO LAI VAO SO_NHAP
NUT_5: ; NHAP SO VAO ROI NHAN 10
ADD NHAP, AX ; CONG VAO SO_NHAP
MOV NHAP, AX ; CHO LAI VAO SO_NHAP
NUT_6: ; NHAP SO VAO ROI NHAN 10
ADD NHAP, AX ; CONG VAO SO_NHAP
MOV NHAP, AX ; CHO LAI VAO SO_NHAP
CMP NHAP, 0 ; TRANH TH AN DAU TRUOC CA KHI NHAP SO
CMP SO_PHEP_TINH, 0 ; DO LUC TRUOC DA CO PHEP TINH ROI NEN PHAI DOI DAU = HOAC LA GHI TIEP SO
MOV AX, NHAP ; CHIA 10 DI VI SO BI NHAP GAP 10 LAN DIV SO_10
CMP SO_PHEP_TINH, 0 ; KIEM TRA XEM CO PHAI LAN DAU BAM KO
NUT_1: ; NHAP SO VAO ROI NHAN 10
ADD NHAP, AX ; CONG VAO SO_NHAP
MOV NHAP, AX ; CHO LAI VAO SO_NHAP
NUT_2: ; NHAP SO VAO ROI NHAN 10
ADD NHAP, AX ; CONG VAO SO_NHAP
MOV NHAP, AX ; CHO LAI VAO SO_NHAP
NUT_3: ; NHAP SO VAO ROI NHAN 10
ADD NHAP, AX ; CONG VAO SO_NHAP
MOV NHAP, AX ; CHO LAI VAO SO_NHAP
CMP NHAP, 0 ; TRANH TH AN DAU TRUOC CA KHI NHAP SO
CMP SO_PHEP_TINH, 0 ; DO LUC TRUOC DA CO PHEP TINH ROI NEN PHAI DOI DAU = HOAC LA GHI TIEP SO
MOV AX, NHAP ; CHIA 10 DI VI SO BI NHAP GAP 10 LAN DIV SO_10
MOV PHEP_TOAN, 2 ; DANH DAU PHEP TOAN LA PHEP TRU
CMP SO_PHEP_TINH, 0 ; KIEM TRA XEM CO PHAI LAN DAU BAM KO
JMP DOI ; DO LUC TRUOC DA CO PHEP TINH ROI NEN PHAI DOI DAU = HOAC LA GHI TIEP SO
MOV KET_QUA, 0 MOV SO_PHEP_TINH, 0 ; RESET HET TAT CA CAC BIEN MOV XOA_MH, 0
MOV CAC_CHU_SO, 0 MOV DAU_TRU, 0 CALL LCD_CLEAR
CMP NHAP, 0 ; TRANH TH AN DAU TRUOC CA KHI NHAP SO
MOV DH,12 ;COT 12 CALL LCD_SET_CUR
MOV AX, NHAP ; CHIA 10 DI VI SO BI NHAP GAP 10 LAN DIV SO_10
CMP SO_PHEP_TINH, 0 ; NEU CHUA AN +-x/ THI HIEN LUON
CMP PHEP_TOAN, 2 ; THUC HIEN PHEP TOAN +-x/ NEU LA 1 2
CMP NHAP, 0 ; TRANH TH AN DAU TRUOC CA KHI NHAP SO
CMP SO_PHEP_TINH, 0 ; DO LUC TRUOC DA CO PHEP TINH ROI NEN PHAI DOI DAU = HOAC LA GHI TIEP SO
MOV AX, NHAP ; CHIA 10 DI VI SO BI NHAP GAP 10 LAN DIV SO_10
CMP SO_PHEP_TINH, 0 ; KIEM TRA XEM CO PHAI LAN DAU BAM KO
JMP DOI ; DO LUC TRUOC DA CO PHEP TINH ROI NEN PHAI DOI DAU = HOAC LA GHI TIEP SO
ADD KET_QUA, BX ; THUC HIEN PHEP CONG
SUB KET_QUA, BX ; PHEP TRU
MOV AX, KET_QUA ; MUL = NHAN
MOV AX, KET_QUA ; DIV = CHIA
JAE KETQUA4 ; CHUC NANG BO SO 0
JE KHONG_DOI_DAU ; GHI DAU NEU NHU DOI DAU
MOV CX, CAC_CHU_SO ; LUU LAI SO CHUSO
MOV BIEN_CX, CX ; TRANH MAT BIEN TRONG THANH GHI
MOV CX, BIEN_CX ; BAT BUOC PHAI CO
MOV CX, CAC_CHU_SO ; KET QUA SE HIEN THI SO CHU
MOV HIEN_THI, 0 ; DEM_PHEP_TINH VAN KHAC 0
MOV BX, NHAP ; KHI AN DAU = MA KO AN +-x/
MOV KET_QUA, BX ; CHO SO NHAP = KET QUA MOV PHEP_TOAN, 0
TINH_LAN_DAU: ; DUNG KHI AN +-x/ LAN DAU MOV BX, NHAP
MOV NHAP, 0 ; RESET BIEN SO_NHAP
KETQUA5: ; DUNG DE DEM XEM CO BAO NHIEU CHU SO
PROC CHECK_DAU ; KIEM TRA DAU TRUOC KHI TINH TRU
PUSH AX ; LUU LAI GIA TRI THANH GHI TRANH MAT GIA TRI
JAE DUONG ; NHAY NEU LON HON HOAC BANG
MOV NHAP, AX ;KET_QUA = SO_NHAP ;SO_NHAP KET_QUA
POP BX ; TRA LAI DUNG GIA TRI THANH GHI
PROC LCD_INIT ; KHOI TAO LCD
MOV AL,0 CALL OUT_B ; SET CAC GIA TRI CUA RS=En=RW=0
MOV CX,1000 CALL DELAY ; CAI DAT LAI TRINH TU
MOV AH,30H ; 30H = 00110000B CALL LCD_CMD
MOV AH,30H ; 30H LA MA SETUP CUA LED
CALL LCD_CMD ; MAY CAI KHAC CUNG LA MA SETUP CUA CAI LED NAY, THEO NHA SAN XUAT
CALL LCD_CMD MOV CX,500 CALL DELAY MOV AH,38H ; 38H = 00111000B CALL LCD_CMD
MOV AH,0CH ; 0CH = 00001100B CALL LCD_CMD
MOV AH,01H ;00000001B CALL LCD_CMD
MOV AH,06H ;00000110B CALL LCD_CMD
;CODE CHUNG DUNG MOI KHI THAY DOI SETUP CUA LED PROC LCD_CMD
;DAU VAO: AH = MA LENH
; RS = 0 = CHO LENH CHI DAN VAO
PUSH DX ; LUU LAI GIA TRI CAC THANH GHI DE KHI CALL LENH KO THAY DOI GIA TRI CUA CHUNG
MOV AL,PORTB_VAL ; LAM CHAN RS CUA LED
AND AL,0FDH ; DUNG LENH OUT_B NEN PHAI DUNG AL
MOV AL,AH ; cho Al = AH VI OUT_A DUNG THANH GHI AL
MOV AL,PORTB_VAL ; BAT CHAN EN CUA LED LEN 1
AND AL,0FBH ; LAM CHO EN CUA LED 0
POP AX ; LAY LAI GIA TRI CAC THANH GHI POP DX
CALL LCD_CMD ; TAC DUNG LA XOA MAN HINH
PROC LCD_WRITE_CHAR ; VIET 1 KY TU VAO VI TRI CON TRO
OR AL,10B ; BAT RS LEN 1( CHE DO CHO DU LIEU VAO>
CALL OUT_A ; DOI QUA THANH GHI AL DE DUNG LENH OUT_A
OR AL,100B ; BAT CHAN EN LEN 1 CALL OUT_B
AND AL,0FBH ; DOI GIA TRI CHAN EN VE 0 CALL OUT_B
POP AX RET ENDP LCD_WRITE_CHAR
PROC LCD_PRINTSTR ; IN CHUOI KY TU VAO VI TRI CON TRO CHUOT
PUSH SI ; MOI LAN NAP LAI THAY DOI GIA TRI SI NEN PHAI PUSH SI DE LUU LAI
;DOC VA VIET KY TU
@LCD_PRINTSTR_LT: ; CO DF = 0 THI DOC THUAN,
LODSB ; load String byte: NAP DAN GIA TRI CAC KY TU VAO THANH GHI AL
MOV AH,AL ; CHO VAO AH DE DUNG HAM VIET KY TU
CALL LCD_WRITE_CHAR JMP @LCD_PRINTSTR_LT
POP AX POP SI RET ENDP LCD_PRINTSTR
PROC LCD_SET_CUR ; DIEU KHIEN VI TRI CON TRO
;LCD DUNG COT 0 LAM COT CO BAN
DEC DH ; VI COT CO BAN LA 0 NEN - 1 DI CHO DUNG VI TRI
JE @ROW1 CMP DL,2 ; KIEM TRA XEM LA HANG 1 HAY 2
MOV AH,80H ; 80H = 10000000B JMP @LCD_SET_CUR_ENDCASE
MOV AH,0C0H ; C0H = 1100000B JMP @LCD_SET_CUR_ENDCASE
@LCD_SET_CUR_ENDCASE: ; DH = COT
ADD AH,DH ; GIASU T GOI COT 1 THI GIA TRI
CALL LCD_CMD ; AH = 10000001B ; HANG 1 COT 1
POP AX RET ENDP LCD_SET_CUR
PROC LCD_SHOW_CUR ; HIEN CON TRO
PUSH AX MOV AH,0FH ; 0FH = 00001111B CALL LCD_CMD
POP AX RET ENDP LCD_SHOW_CUR
PROC LCD_HIDE_CUR ; TAT HIEN CON TRO
PUSH AX MOV AH,0CH
CALL LCD_CMD ; 0CH = 00001100B POP AX
RET ENDP LCD_HIDE_CUR
;GUI DU LIEU TOI CAC CONG PA, PB, PC VA LUU GIA TRI CUA
OUT DX,AL MOV PORTA_VAL,AL POP DX
PUSH DX MOV DX,PB
OUT DX,AL ; CHO GIA TRI AL VAO O NHO CO DIA CHI CUA PB
MOV PORTB_VAL,AL ; LUU LAI GIA TRI Al VAO GIA TRI CUA PB
POP DX RET ENDP OUT_B
PUSH DX MOV DX,PC OUT DX,AL MOV PORTC_VAL,AL POP DX
RET ; TUONG TU PB ENDP OUT_C