Ngày nay khoa học kỹ thuật đang phát triển hết sức mạnh mẽ, đặc biệt là lĩnh vực điều khiển và tự động hóa. Để tăng tính năng điều khiển, các bộ vi điều khiển đã không ngừng được cải tiến và nâng cấp. Và một trong những họ vi điều khiển đang được ứng dụng rộng rãi ngày nay là họ vi điều khiển 8051. Các bộ vi điều khiển thuộc họ 8051 đầu tiên ra đời vào năm 1981. Các bộ vi điều khiển này mới chỉ có 128byte Ram, 4Kb Rom, 2 bộ định thời, một cổng nối tiếp và 4 cổng vào ra. Tất cả được đặt trên cùng 1 chip. Và của nhiều hãng sản xuất như vi điều khiển 8052, …Họ vi điều khiển 8051 được ứng dụng trong thực tế rất phổ biến như ứng dụng để điều khiển động cơ, điều khiển led, điều khiển đèn giao thông, làm bộ đếm sản phẩm, …trong nhiều ứng dụng đó nhóm sinh viên chúng em gồm 8 bạn đã tham gia vào thực hiện đề tài “Hiển thị LCD sử dụng 8051 bằng Miltisim và Keil”. Trong quá trình thực hiện làm do chúng em chưa có kinh nghiệm nhiều nên còn thiếu sót mong thầy (cô) chỉ dạy chúng em thêm trong những lần tiếp theo để chúng em thực hiện đề tài thành công hơn. GVHD: ĐẶNG VĂN HẢI LẠI THỊ HỒNG NHUNG SVBC:HOÀNG TRUNG KIÊNMAI THI HƯƠNG GIANGLƯU THANH SƠNHOÀNG ĐÌNH HẢIBÙI THỊ NGỌC TRÂMNGUYỄN VĂN HIỀNDƯƠNG TÙNG LÂMLÊ VĂN ĐẠT
Trang 1BAN CƠ YẾU CHÍNH PHỦ HỌC VIỆN KỸ THUẬT MẬT MÃ
KHOA ĐIỆN TỬ - VIỄN THÔNG
HOÀNG TRUNG KIÊN
MAI THI HƯƠNG GIANG
LƯU THANH SƠN
HOÀNG ĐÌNH HẢI
BÙI THỊ NGỌC TRÂM NGUYỄN VĂN HIỀN DƯƠNG TÙNG LÂM
LÊ VĂN ĐẠT SINH VIÊN KHÓA 1
Hà Nội, ngày 07 tháng 10 năm 2019
Trang 2Lời nói đầu:
Ngày nay khoa học kỹ thuật đang phát triển hết sức mạnh mẽ, đặc biệt là lĩnh vực điều khiển và tự động hóa Để tăng tính năng điều khiển, các bộ vi điều khiển đã không ngừng được cải tiến và nâng cấp Và một trong những họ vi điều khiển đang được ứng dụng rộng rãi ngày nay là họ vi điều khiển 8051 Các bộ vi điều khiển thuộc họ
8051 đầu tiên ra đời vào năm 1981 Các bộ vi điều khiển này mới chỉ
có 128byte Ram, 4Kb Rom, 2 bộ định thời, một cổng nối tiếp và 4 cổng vào ra Tất cả được đặt trên cùng 1 chip Và của nhiều hãng sản xuất như vi điều khiển 8052, …
Họ vi điều khiển 8051 được ứng dụng trong thực tế rất phổ biến như ứng dụng để điều khiển động cơ, điều khiển led, điều khiển đèn giao thông, làm bộ đếm sản phẩm, …trong nhiều ứng dụng đó nhóm sinh viên chúng em gồm 8 bạn đã tham gia vào thực hiện đề tài “Hiển thị LCD sử dụng 8051 bằng Miltisim và Keil” Trong quá trình thực hiện làm do chúng em chưa có kinh nghiệm nhiều nên còn thiếu sót mong thầy (cô) chỉ dạy chúng em thêm trong những lần tiếp theo để chúng
em thực hiện đề tài thành công hơn.
MỤC LỤC
Trang 3CHƯƠNG 1: TÌM HIỂU YÊU CẦU ĐỀ TÀI
CHƯƠNG 1.1 GIỚI THIỆU VỀ 8051
CHƯƠNG 1.2: GIỚI THIỆU VỀ LCD
1.2.1 GIỚI THIỆU SƠ LƯỢC VỀ LCD
1.2.2 SƠ ĐỒ, CHỨC NĂNG, LIÊN KẾT CHÂN CÁC CHÂN
Trang 4Vi điều khiển 8051
Các tính năng của vi điều khiển 8051:
– 64Kb ROM – program memory
– 128byte RAM – data memory
– 4 register bank
– 128 flag – do người dùng tự define
– data bus 2 chiều, 8-bit
– address bus 1 chiều 16-bit
Trang 5– 32 thanh ghi đa dụng 8-bit
Sau đây là bảng so sánh các thông số cơ bản của anh em nhà 8051:
1.1.2 CẤU TRÚC VI ĐIỀU KHIỂN 8051
1.1.2.1 TỔ CHỨC BỘ NHỚ
Các vi điều khiển thuộc họ 8051 đều tổ chức thành 2 không gian chương trình
và dữ liệu, hình 1 và hình 2 sẽ mô tả điều này Kiến trúc vi xử lý 8 bit của 8051này cho phép truy nhập và tính toán nhanh hơn đối với không gian dữ liệu nhờviệc phân chia 2 không gian bộ nhớ chương trình và dữ liệu như trên Tuy nhiên
bộ nhớ ngoài được truy nhập bởi hệ thống 16 bit địa chỉ vẫn có thể thực hiệnnhờ thanh ghi con trỏ
Bộ nhớ chương trình (ROM, EPROM) là bộ nhớ chỉ đọc, có thể mở rộng tối
đa 64Kbyte Với họ vi điều khiển 89xx, bộ nhớ chương trình được tích hợp sẵn
Trang 6trong chip có kích thước nhỏ nhất là 4kByte Với các vi điều khiển không tíchhợp sẵn bộ nhớ chương trình trên chip, buộc phải thiết kế bộ nhớ chương trìnhbên ngoài Ví dụ sử dụng EPROM: 2764 (64Kbyte), khi đó chân PSEN phải ởmức tích cực (5V).
Hình 1: Cấu trúc vi điều khiển 8051
Bộ nhớ dữ liệu (RAM) tồn tại độc lập so với bộ nhớ chương trình Họ vi điềukhiển 8051 có bộ nhớ dữ liệu tích hợp trên chip nhỏ nhất là 128byte và có thể
mở rộng với bộ nhớ dữ liệu ngoài lên tới 64kByte Với những vi điều khiểnkhông tích hợp ROM trên chip thì vẫn có RAM trên chip là 128byte Khi sửdụng RAM ngoài, CPU đọc và ghi dữ liệu nhờ tín hiệu trên các chân RD và
WR Khi sử dụng cả bộ nhớ chương trình và bộ nhớ dữ liệu bên ngoài thì buộcphải kết hợp chân RD và PSEN bởi cổng logic AND để phân biệt tín hiệu truyxuất dữ liệu trên ROM hay RAM ngoài
Bộ nhớ chương trình:
Trang 7Hình 2: Cấu trúc bộ nhớ chương trình
Bộ nhớ dữ liệu:
Hình 3: Địa chỉ ngắt trên các bộ nhớ chương trình
Hình 2 mô tả cấu trúc bộ nhớ chương trình Sau khi khởi động, CPU bắt đầuthực hiện chương trình ở vị trí 0000H Hình 3 mô tả địa chỉ ngắt mặc định trên
bộ nhớ chương trình Mối khi xảy ra ngắt, con trỏ của CPU sẽ nhảy đến đúngđịa chỉ ngắt tương ứng và thực thi chương trình tại đó Ví dụ ngắt ngoài 0 sẽ cóđịa chỉ là 0003H, khi xảy ra ngắt ngoài 0 thì con trỏ chương trình sẽ nhảy đếnđúng địa chỉ 0003H để thực thi chương trình tại đó Nếu trong chương trình ứngdụng không xử dụng đến ngắt ngoài 0 thì địa chỉ 0003H vẫn có thể dùng chomục đích khác (sử dụng cho bộ nhớ chương trình)
Trang 8Hình 5 mô tả cấu trúc bộ nhớ dữ liệu trong chip, được chia thành 3 khối là 128byte thấp, 128 byte cao và 128 byte đặc biệt.
Hình 5: Cấu trúc bộ nhớ trong
Hình 6 mô tả cấu trúc 128 byte thấp của bộ nhớ dữ liệu của họ vi điều khiển
8051 32 byte đầu tiên (00H-1FH) được sử dụng cho 4 bộ 8 thanh ghi R0-R7.Hai bit của thanh ghi đặc biệt PSW sẽ lựa chọn 1 trong 4 bộ thanh ghi mà viđiều khiển sẽ dùng trong khi thực thi chương trình
Hình 6: Cấu trúc 128 byte thấp của bộ nhớ dữ liệu trong
8051 chứa 210 vị trí bit được định địa chỉ trong đó 128 bit chứa trong các byte
ở địa chỉ từ 20H đến 2FH (16 byte x 8 bit = 128 bit) và phần còn lại chứa trongcác thanh ghi đặc biệt Ngoài ra 8051 còn có các port xuất/nhập có thể định địachỉ từng bit, điều này làm đơn giản việc giao tiếp bằng phần mềm với các thiết
bị xuất/nhập đơn bit
Trang 9Vùng RAM đa mục đích có 80 byte đặt ở địa chỉ từ 30H đến 7FH, bên dướivùng này từ địa chỉ 00H đến 2FH là vùng nhớ có thể được sử dụng tương tự.Bất kỳ vị trí nhớ nào trong vùng RAM đa mục đích đều có thể được truy xuất tự
do bằng cách sử dụng các kiểu định địa chỉ trực tiếp hoặc gián tiếp
Bất kỳ vị trí nhớ nào trong vùng RAM đa mục đích đều có thể được truy xuất
tự do bằng cách sử dụng các kiểu định địa chỉ trực tiếp hoặc gián tiếp
Cũng như các thanh ghi từ R0 đến R7, ta có 21 thanh ghi chức năng đặc biệtSFR chiếm phần trên của Ram nội từ địa chỉ 80H đến FFH Cần lưu ý là khôngphải tất cả 128 địa chỉ từ 80H đến FFH đều được định nghĩa mà chỉ có 21 địachỉ được định nghĩa
Hình 7: 128 byte cao của bộ nhớ dữ liệu
1.1.2.2 CÁC THANH GHI ĐẶC BIỆT
Trang 10Hình 8: Các thanh ghi đặc biệt
Lệnh chia DIV AB chia A bởi B, thương số cất trong thanh chứa A và dư sốcất trong thanh ghi B Thanh ghi B còn được xử lý như một thanh ghi nháp Cácbit được định địa chỉ của thanh ghi B có địa chỉ từ F0H đến F7H
Thanh ghi trạng thái chương trình (PSW):
Thanh ghi trạng thái chương trình PSW (địa chỉ: D0H) là thanh ghi mô tả toàn
bộ trạng thái chương trình đang hoạt động của hệ thống Bảng 7 và Bảng 8 sẽ
mô tả thanh ghi này
Trang 117 6 5 4 3 2 1 0
Bảng 7: Thanh ghi trạng thái chương trình PSW
có Bit nhớ từ Bit 7 trong phép cộnghoặc có Bit mượn cho Bit 7 trongphép trừ
cộng nếu có Bit nhớ từ Bit 3 sangBit 4 hoặc kết quả trong 4 Bit thấpnằm trong khoảng 0AH->0FH
00=Bank 0: Địa chỉ 00H->07H01=Bank 1: Địa chỉ 08H->0FH10=Bank 2: Địa chỉ 10H->17H11=Bank 3: Địa chỉ 18H->1FH
khi phép toán có dấu có kết quả >+127 hoặc < -128
hoặc Clear bởi phần cứng sau mỗi
1 chu kỳ lệnh, để chỉ ra rằng có 1
số chẵn hoặc số lẻ Bit 1 trong thanh
Trang 12Bảng 8: Chi tiết các bit trong thanh ghi PSW
Thanh ghi ngăn xếp (Stack Pointer):
Con trỏ stack SP (stack pointer) là 1 thanh ghi 8 bit ở địa chỉ 81H SP chứa địachỉ của dữ liệu hiện đang ở đỉnh của stack Các lệnh liên quan đến satck baogồm lệnh cất dữ liệu vào stack và lệnh lấy dữ liệu ra khỏi stack Việc cất vàostack làm tăng SP trước khi ghi dữ liệu và việc lấy dữ liệu ra khỏi stack sẽ giảm
SP Vùng stack của 8051 được giữ trong RAM nội và được giới hạn đến các địachỉ truy xuất được bởi kiểu định địa chỉ gián tiếp Các lệnh PUSH và POP sẽ cất
dữ liệu vào stack và lấy dữ liệu từ stack, các lệnh gọi chương trình con(ACALL, LCALL) và lệnh trở về (RET, RETI) cũng cất và phục hồi nội dungcủa bộ đếm chương trình PC (Program counter)
Thanh ghi bộ đệm truyền thông nối tiếp (Serial Data Buffer):
Bộ đệm truyền thông được chia thành hai bộ đệm, bộ đệm truyền dữ liệu và bộđệm nhận dữ liệu Khi dữ liệu được chuyển vào thanh ghi SBUF, dữ liệu sẽđược chuyển vào bộ đệm truyền dữ liệu và sẽ được lưu giữ ở đó cho đến khiquá trình truyền dữ liệu qua truyền thông nối tiếp kết thúc Khi thực hiện việcchuyển dữ liệu từ SBUF ra ngoài, dữ liệu sẽ được lấy từ bộ đệm nhận dữ liệucủa truyền thông nối tiếp
Thanh ghi của bộ định thời/bộ đếm:
8051 có 2 bộ đếm/định thời (counter/timer) 16 bit để định các khoảng thờigian hoặc để đếm các sự kiện Các cặp thanh ghi (TH0, TL0) và (TH1, TL1) làcác thanh ghi của bộ đếm thời gian Bộ định thời 0 có địa chỉ 8AH (TL0, bytethấp) và 8CH (TH0, byte cao) Bộ định thời 1 có địa chỉ 8BH (TL1, byte thấp)
và 8DH (TH1, byte cao)
Hoạt động của bộ định thời được thiết lập bởi thanh ghi chế độ định thờiTMOD (Timer Mode Register) ở địa chỉ 88H Chỉ có TCON được định địa chỉtừng bit
Trang 13Các thanh ghi điều khiển:
Các thanh ghi điều khiển đặc biệt như IP, IE, TMOD, TCON, SCON vàPCON là các thanh ghi điều khiển và ghi nhận trạng thái của hệ thống ngắt, bộđếm/định thời, truyền thông nối tiếp Chi tiết của các thanh ghi này sẽ được mô
tả sau
1.1.2.3 SƠ ĐỒ CHÂN
Hinh 9: Sơ đồ chân 8051
Chức năng các chân chip:
+ Port 0(từ chân 32-39) kí hiệu P0.0-P0.7: làm nhiệm vụ xuất /nhập, khi dùng
port 0 phải dùng thêm các điện trở kéo lên (pull up), giá trị của điện trở phụthuộc vào thành phần kết nối với Port.khi dùng làm ngõ ra thì port 0 có thể kéođược 8 ngõ TTL Khi dùng là ngõ vào port 0 phải được set mức logic 1 trước
đó Với các thiết kế lớn hơncó bộ nhớ ngoài thì port 0 trở thành bit địa chỉ và bit
dữ liệu đa hợp
+ Port 1(từ chân 1-8) kí hiệu P1.0-P1.7: dùng xuất /nhập, giao tiếp với thiết bị
bên ngoài
Trang 14+ Port 2(từ chân 21-28) kí hiệu P2.0-P2.7: làm nhiệm vụ xuất nhập có khả
năng kéo được 4 ngõ TTL hoặc là byte địa chỉ cao nhất của bus địa chỉ 16 bitcho các thiết kế có bộ nhớ chương tình ngoài hoặc các thiết kế có nhiều hơn256byte bộ nhớ dữ liệu Khi dùng làm ngõ vào Port 2 phải được set mức logic 1trước đó
+ Port 3 (từ chân 10-17) kí hiệu P3.0-P3.7: có thể kéo được 4 ngõ TTL Khi
dùng là ngõ vào port 3 phải được set mức logic 1 trước đó Khi không hoạtđộng xuất /nhập, các chân có chức năng riêng
+ 0 được sử dụng làm bus địa chỉ /dữ liệu đa hợp, chân ALE xuất tín hiệu để
chốt địa chỉ (byte thấp của địa chỉ 16 bit) vào 1 thanh ghi ngoài trong suốt ½đàu hua chu kỳ bộ nhớ memory cycle) Sau khi điều này đã được thực hiện cácchân của port 0sex xuất /nhập dữ liệu hợp hệ trong suốt ½ thứu hai của chu kỳ
bộ nhớ Tín hiệu ALE Có tần số bằng 1/6 tần số của mạch dao động bên trongchip vi điều khiển
+ PSEN (Program store enable): là tín hiệu suất trên chân 29 đây là tín hiệu
điều khiển cho phép ta truy xuát bộ nhớ chương trình ngoài Chân này thườngnối với chân cho phép xuất /OE (Output enable) của EPROM hoặc ROM để chophép các đọc byte lệnh Tín hiệu /PSEN ở mức logic 0 trong suốt thời gian tìmnạp lệnh Các mã nhị phân của chương trình hay Opcode được đọc từ EPROMqua bus dữ liệu và được chốt vào thanh ghi lệnh IR của 8051để được giải mã.Khi thực hiện 1 chương trình chư sở ROM nội, chân /PSER được duy trì ở mứclogic không tích cực (logic 1)
+ ALE (address latch enable): dùng để giải đa hợp (demultiplexing) bus dữ
liệu và bus địa chỉ
+ EA: ngõ vào EA có thể được nối với 5V (logic 1) hoặc với GND (logic 0).
Nếu chân này nối lên 5v chip 8051 thực thi chương trình trong ROM nội Nếu
Trang 15chân này được nối với GND (và chân /PSEN cũng ở logic) thì chương trình cầnđược thực thi chứa ở bộ nhớ ngoài.
+ RESET(RST): ngõ vào RST là ngõ vào xóa chính (master reset) của 8051
dùng để thiết lập lại trạng thái ban đầu cho hệ thống hay gọi tất cả là reset hệthống Khi ngõ vào này được treo ở mức logic 1 tối thiểu 2 chu kỳ máy, cácthanh ghi bên trong của 8051 được nạp lại các giá trị thích hợp cho việc khởiđộng lại hệ thống
là Text LCD (để phân biệt với Graphic LCD có thể hiển thị hình ảnh) Mỗi ôcủa Text LCD bao gồm các “chấm” tinh thể lỏng, việc kết hợp “ẩn” và “hiện”các chấm này sẽ tạo thành một ký tự cần hiển thị Trong các Text LCD, các mẫu
ký tự được định nghĩa sẵn Kích thước của Text LCD được định nghĩa bằng số
đồ họa), dễ dàng đưa vào
LCD là tên viết tắt của (Liquid Crystal Display) hay còn được biết đến cái têndân dã hơn là màn hình tinh thể lỏng Có rất nhiều loại màn hình LCD khácnhau Với những ứng dụng nhỏ thường sử dụng loại màn hình cỡ nhỏ đơn giản
là loại LCD16x2 Các ký tự được hiển thị trên màn hình với 2 hàng, mỗi hànghiển thị được 16 ký tự
Trang 16Có thể chia các module LCD làm 2 loại chính:
+ Loại hiển thị ký tự (charater LCD) gồm có các các kích cỡ 16x1(16 kí tự x1dòng) ;16x2(16 ký tự x2 dòng); 16x4(16 ký tự x4 dòng);20x1(20 ký tự x1 dòng)Loại hiển thị đồ họa (graphic LCD) đen trắng hoặc màu gồm các kích cỡ 1,47inch (128x128 điểm ảnh); 1,8inch (128x160 điểm ảnh ); 2,4 inch(240x320 điểmảnh)
1.2.2 SƠ ĐỒ, CHỨC NĂNG, LIÊN KẾT CÁC CHÂN CỦA LCD
Sơ đồ chân LCD:
> Mô tả các chân, loại 16 chân.
+ VDD (chân 2): cấp nguồn dương 5v +/ VSS (chân 1): cấp nguồn âm(GND) + VEE (chân 3): điều khiển độ tương phản của LCD (contrast), chân này cần
được nối với 1 biến trở 10k để chia áp Trong khi hoạt động, chỉnh để thay đổigiá trị biến trở để đạt được độ tương phản cần thiết, sau đó giữ mức biến trởnày Các chân điều khiển RS, R/W, EN và các đường dữ liệu được nối trực tiếpvới vi điều khiển Tùy theo chế độ hoạt động 4bit hay 8bit mà các chân từ D0đến D3 có thể bỏ qua hoặc nối với vi điều khiển
+ Trong một số LCD, 2 chân LED nền được đánh số 15 và 16 nhưng trongmột số trường hợp 2 chân này được ghi là A (Anode) và K (Cathode), gọi là 2chân nguồn cho “đèn LED nền”
Trang 17+) Chân chọn thanh ghi RS (chân 4_Register Select)
Có hai thanh ghi rất quan trọng trong LCD, chân này cho phép lựa chọn 1 trong
2 thanh ghi IR hoặc DR để làm việc Vì cả 2 thanh ghi này đều được kết nối vớicác chân Data của LCD nên cần 1 bit để lựa chọn giữa chúng Nếu RS=0, thanhghi IR được chọn, thanh ghi mà lệnh được chọn để cho phép người dùng gửimột lệnh chẳng hạn như xóa màn hình và nếu RS=1 thanh ghi DR được chọn,thanh ghi dữ liệu được chọn cho phép người dùng gửi dữ liệu cần hiển thị trênLCD Chúng ta đều biết thanh ghi IR là thanh ghi chứa mã lệnh cho LCD, vì thếnếu muốn gửi 1 mã lệnh đến LCD thì chân RS phải được reset về 0 Ngược lại,khi muốn ghi mã ASCII của ký tự cần hiển thị lên LCD thì chúng ta sẽ set RS=1
để chọn thanh ghi DR Hoạt động của chân RS được mô tả như sau :
- Thanh ghi IR: Để điều khiển LCD, người dùng phải “ra lệnh” thông qua
tám đường bus DB0-DB7 Mỗi lệnh được nhà sản xuất LCD đánh địa chỉ rõràng Người dùng chỉ việc cung cấp địa chỉ lệnh bằng cách nạp vào thanh ghi
IR Nghĩa là, khi ta nạp vào thanh ghi IR một chuỗi 8 bit, chip HD44780 sẽ trabảng mã lệnh tại địa chỉ mà IR cung cấp và thực hiện lệnh đó
VD: Lệnh “hiển thị màn hình” có địa chỉ lệnh là 00001100 (DB7 DB0)
Lệnh “hiển thị màn hình và con trỏ” có mã lệnh là 00001110
- Thanh ghi DR: Thanh ghi DR dùng để chứa dữ liệu 8 bit để ghi vào vùng
RAM DDRAM hoặc CGRAM (ở chế độ ghi) hoặc dùng để chứa dữ liệu từ 2vùng RAM này gởi ra cho MPU (ở chế độ đọc) Nghĩa là, khi MPU ghi thôngtin vào DR, mạch nội bên trong chip sẽ tự động ghi thông tin này vào DDRAMhoặc CGRAM Hoặc khi thông tin về địa chỉ được ghi vào IR, dữ liệu ở địa chỉnày trong vùng RAM nội của HD44780 sẽ được chuyển ra DR để truyền choMPU Bằng cách điều khiển chân RS và R/W chúng ta có thể chuyển qua lại giữ
2 thanh ghi này khi giao tiếp Xem bảng thiết lập đối với hai chân RS và R/Wtheo mục đích giao tiếp với MPU
+) Chân đọc/ghi R/W (chân 5)
Chân lựa chọn giữa việc đọc và ghi Nếu R/W=0 thì dữ liệu sẽ được ghi từ bộđiều khiển ngoài (vi điều khiển AVR chẳng hạn) vào LCD Nếu R/W=1 thì dữliệu sẽ được đọc từ LCD ra ngoài Tuy nhiên, chỉ có duy nhất 1 trường hợp mà
dữ liệu có thể đọc từ LCD ra, đó là đọc trạng thái LCD để biết LCD có đangbận hay không (cờ Busy Flag - BF) Do LCD là một thiết bị hoạt động tươngđối chậm (so với vi điều khiển), vì thế một cờ BF được dùng để báo LCD đangbận, nếu BF=1 thì chúng ta phải chờ cho LCD xử lí xong nhiệm vụ hiện tại, đếnkhi nào BF=0 một thao tác mới sẽ được gán cho LCD Vì thế, khi làm việc với