Tải bản đầy đủ (.docx) (18 trang)

PIC 16F877A VÀ VIẾT CHƯƠNG TRÌNH ĐIỀU KHIỂN CHO LED 7 THANH

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (370.52 KB, 18 trang )

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT HƯNG YÊN
KHOA ĐIỆN –ĐIỆN TỬ

BÀI TẬP LỚN: LẬP TRÌNH VI XỬ LÝ NÂNG CAO
ĐỀ TÀI:TÌM HIỂU PIC 16F877A VÀ VIẾT CHƯƠNG TRÌNH ĐIỀU KHIỂN
CHO LED 7 THANH

GIÁO VIÊN BỘ MÔN :
SINH VIÊN THỰC HIỆN:

VŨ HỒNG SƠN
NGUYỄN ĐÌNH ÂN

Hưng Yên, ngày 6 tháng 7 năm 2020

1


NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN

...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................


...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
........................................................................................

Hưng Yên, ngày 6 tháng 7 năm 2020

2


MỤC LỤC

3


LỜI MỞ ĐẦU
Ngày nay kỹ thuật vi điều khiển đã trở nên quen thuộc trong các ngành kỹ thuật và
trong dân dụng. Các bộ vi điều khiển có khả năng xử lý nhiều hoạt động phức tạp mà
chỉ cần một chip vi mạch nhỏ, nó đã thay thế các tủ điều khiển lớn và phức tạp bằng
những mạch điện gọn nhẹ, dễ dàng thao tác sử dụng.
Vi điều khiển không những góp phần vào kỹ thuật điều khiển mà còn góp phần to lớn
vào việc phát triển thông tin. Chính vì các lý do trên, việc tìm hiểu, khảo sát vi điều
khiển là điều mà các sinh viên ngành điện mà đặc biệt là chuyên ngành kỹ thuật điệnđiện tử phải hết sức quan tâm. Đó chính là một nhu cầu cần thiết và cấp bách đối với
mỗi sinh viên, đề tài này được thực hiện chính là đáp ứng nhu cầu đó. Các bộ điều
khiển sử dụng vi điều khiển tuy đơn giản nhưng để vận hành và sử dụng đươc lại là
một điều rất phức tạp. Phần công việc xử lý chính vẫn phụ thuộc vào con người, đó
chính là chương trình hay phần mềm. Nếu không có sự tham gia của con người thì hệ
thống vi điều khiển cũng chỉ là một vật vô tri. Do vậy khi nói đến vi điều khiển cũng
giống như máy tính bao gồm 2 phần là phần cứng và phần mềm.
Mặc dù vi điều khiển đã đi được những bước dài như vậy nhưng để tiếp cận được với

kỹ thuật này không thể là một việc có được trong một sớm một chiều. Để tìm hiểu bộ
vi điều khiển một cách khoa học và mang lại hiệu quả cao làm nền tản cho việc xâm
nhập vào những hệ thống tối tân hơn. Việc trang bị những kiến thức về vi điều khiển
cho sinh viên là hết sức cần thiết.
Hưng yên, ngày 6 tháng 7 năm 2020

4


CHƯƠNG 1: TỔNG QUAN
1.1 Giới thiệu khái quát về vi điều khiển
Bộ Vi xử lý có khả năng vượt bậc so với các hệ thống khác về khả năng tính toán, xử
lý, và thay đổi chương trình linh hoạt theo mục đích người dùng, đặc biệt hiệu quả đối
với các bài toán và hệ thống lớn.Tuy nhiên đối với các ứng dụng nhỏ, tầm tính toán
không đòi hỏi khả năng tính toán lớn thì việc ứng dụng vi xử lý cần cân nhắc. Bởi vì
hệ thống dù lớn hay nhỏ, nếu dùng vi xử lý thì cũng đòi hỏi các khối mạch điện giao
tiếp phức tạp như nhau. Các khối này bao gồm bộ nhớ để chứa dữ liệu và chương trình
thực hiện, các mạch điện giao tiếp ngoại vi để xuất nhập và điều khiển trở lại, các khối
này cùng liên kết với vi xử lý thì mới thực hiện được công việc. Để kết nối các khối
này đòi hỏi người thiết kế phải hiểu biết tinh tường về các thành phần vi xử lý, bộ nhớ,
các thiết bị ngoại vi. Hệ thống được tạo ra khá phức tạp, chiếm nhiều không gian,
mạch in phức tạp và vấn đề chính là trình độ người thiết kế.kết quả là giá thành sản
phẩm cuối cùng rất cao, không phù hợp để áp dụng cho các hệ thống nhỏ.
Vì một số nhược điểm trên nên các nhà chế tạo tích hợp một ít bộ nhớ và một số mạch
giao tiếp ngoại vi cùng với vi xử lý vào một IC duy nhất được gọi là MicrocontrollerVi điều khiển.
Một số đặc điểm khác nhau giữa vi xử lí (VXL)và VĐK:
- Về phần cứng: VXL cần được ghép thêm các thiết bị ngoại vi bên ngoài như bộ nhớ,
và các thiết bị ngoại vi khác, … để có thể tạo thành một bản mạch hoàn chỉnh. Đối với
VĐK thì bản thân nó đã là một hệ máy tính hoàn chỉnh với CPU, bộ nhớ, các mạch
giao tiếp, các bộ định thời và mạch điều khiển ngắt được tích hợp bên trong mạch.

- Về các đặc trưng của tập lệnh: Do ứng dụng khác nhau nên các bộ VXL và VĐK
cũng có những yêu cầu khác nhau đối với tập lệnh của chúng. Tập lệnh của các VXL
thường mạnh về các kiểu định địa chỉ với các lệnh cung cấp các hoạt động trên các
lượng dữ liệu lớn như 1byte, ½ byte, word, double word,...Ở các bộ VĐK, các tập lệnh
rất mạnh trong việc xử lý các kiêu dữ liệu nhỏ như bit hoặc một vài bit.
- Do VĐK cấu tạo về phần cứng và khả năng xử lí thấp hơn nhiều soi với VXL nên
giá thành của VĐK cũng rẻ hơn nhiều. Tuy nhiên nó vẫn đủ khả năng đáp ứng được tất
cả các yêu cầu của người dùng.Vi điều khiển được ứng dụng trong các dây chuyền tự
động loại nhỏ, các robot có chức năng đơn giản, trong máy giặt, ôtô v.v...
* Phân loại
-Độ dài thanh ghi
Dựa vào độ dài của các thanh ghi và các lệnh của VĐK mà người ta chia ra các loại
VĐK 8bit, 16bit, hay 32bit.... Các loại VĐK 16bit do có độ dài lệnh lớn hơn nên các
tập lệnh cũng nhiều hơn, phong phú hơn. Tuy nhiên bất cứ chương trình nào viết bằng
VĐK 16bit chúng ta đều có thể viết trên VDK 8bit với chương trình thích hợp.
5


-Kiến trúc CISC và RISC
VXL hoặc VĐK CISC là VĐK có tập lệnh phức tạp.Các VĐK này có một số lượng
lớn các lệnh nên giúp cho người lập trình có thể linh hoạt và dễ dàng hơn khi viết
chương trình. VĐK RISC là VĐK có tập lệnh đơn giản. Chúng có một số lương nhỏ
các lệnh đơn giản. DO đó, chúng đòi hỏi phần cứng ít hơn, giá thành thấp hơn, và
nhanh hơn so với CISC. Tuy nhiên nó đòi hỏi người lập trình phải viết các chương
trình phức tạp hơn, nhiều lệnh hơn.
-Kiến trúc Harvard và kiến trúc Vonneumann:
Kiến trúc Harvard sử dụng bộ nhớ riêng biệt cho chương trình và dữ liệu. Bus địa chỉ
và bus dữ liệu độc lập với nhau nên quá trình truyền nhận dữ liệu đơn giản hơn Kiến
trúc Vonneumann sử dụng chung bộ nhớ cho chương trình và dữ liệu. Điều này làm
cho VĐK gọn nhẹ hơn, giá thành nhẹ hơn.

Một số loại VĐK có trên thị trường:
- VĐK MCS-51: 8031, 8032, 8051, 8052, ...
- VĐK ATMEL: 89Cxx, AT89Cxx51.....
- VĐK AVR AT90Sxxxx
- VĐK PIC 16C5x, 17C43...
1.2 Cấu trúc tổng quan về VĐK
1.2.1 CPU:
Là trái tim của hệ thống. Là nơi quản lí tất cả các hoạt động của VĐK. Bên trong CPU
gồm:
- ALU là bộ phận thao tác trên các dữ liệu
- Bộ giải mã lệnh và điều khiển, xác định các thao tác mà CPU cần thực hiện
- Thanh ghi lệnh IR, lưu giữ opcode của lệnh được thực thi
- Thanh ghi PC, lưu giũ địa chỉ của lệnh kế tiếp cần thực thi
- Một tập các thanh ghi dùng để lưu thông tin tạm thời
1.2.2 ROM:
ROM là bộ nhớ dùng để lưu giữ chương trình.ROM còn dùng để chứa số liệu các
bảng, các tham số hệ thống, các số liệu cố định của hệ thống.Trong quá trình hoạt
động nội dung ROM là cố định, không thể thay đổi, nội dung ROM chỉ thay đổi khi
ROM ở chế độ xóa hoặc nạp chương trình.

6


1.2.3 RAM:
RAM là bộ nhớ dữ liệu. Bộ nhớ RAM dùng làm môi trường xử lý thông tin, lưu trữ
các kết quả trung gian và kết quả cuối cùng của các phép toán, xử lí thông tin. Nó cũng
dùng để tổ chức các vùng đệm dữ liệu, trong các thao tác thu phát, chuyển đổi dữ liệu.
d. BUS:
BUS là các đường dẫn dùng để di chuyển dữ liệu. Bao gồm: bus địa chỉ, bus dữ liệu ,
và bus điều khiển

e.BỘ ĐỊNH THỜI: Được sử dụng cho các mục đích chung về thời gian.
WATCHDOG: Bộ phận dùng để reset lại hệ thống khi hệ thống gặp “bất thường”.
ADC: Bộ phận chuyển tín hiệu analog sang tín hiệu digital. Các tín hiệu bên ngoài đi
vào VDK thường ở dạng analog.ADC sẽ chuyển tín hiệu này về dạng tín hiệu digital
mà VDK có thể hiểu được.
1.3 Khái quát về vi điều khiển PIC
1.3.1 Khái niệm
PIC là viết tắt của “Programable Intelligent Computer”, có thể tạm dịch là “máy tinh
thông minh khả trình” do hãng Genenral Instrument đặt tên cho vi điều khiển đầu tiên
của họ: PIC1650 được thiết kế để dùng làm các thiết bị ngoại vi cho vi điều khiển
CP1600. Vi điều khiển này sau đó được nghiên cứu phát triển thêm và từ đó hình
thành nên dòng vi điều khiển PIC ngày nay.
1.3.2 Cấu trúc PIC
Cấu trúc phần cứng của một vi điều khiển được thiết kế theo hai dạng kiến trúc: kiến
trúc Von Neuman và kiến trúc Havard.0

Hình 1.1: Kiến trúc Havard và kiến trúc Von-Neuman
7


Tổ chức phần cứng của PIC được thiết kế theo kiến trúc Havard. Điểm khác biệt giữa
kiến trúc Havard và kiến trúc Von-Neuman là cấu trúc bộ nhớ dữ liệu và bộ nhớ
chương trình.
Vi điều khiển được tổ chức theo kiến trúc Havard còn được gọi là vi điều khiển RISC
(Reduced Instruction Set Computer) hay vi điều khiển có tập lệnh rút gọn.
Vi điều khiển được thiết kế theo kiến trúc Von-Neuman còn được gọi là vi điều khiển
CISC (Complex Instruction Set Computer) hay vi điều khiển có tập lệnh phức tạp vì
mã lệnh của nó không phải là một số cố định mà luôn là bội số của 8 bit (1 byte).
1.3.3 PIPELINING
Đây chính là cơ chế xử lí lệnh của các vi điều khiển PIC. Một chu kì lệnh của vi điều

khiển sẽ bao gồm 4 xung clock. Ví dụ ta sử dụng oscillator có tần số 4 MHZ, thì xung
lệnh sẽ có tần số 1 MHz (chu kì lệnh sẽ là 1 us). Giả sử ta có một đoạn chương trình
như sau:
1. MOVLW
2. MOVWF

55h
PORTB

3. CALL

SUB_1

4. BSF

PORTA,BIT3

5. instruction @ address SUB_1
d. Các dòng PIC
Các kí hiệu của vi điều khiển PIC:
- PIC12xxxx: độ dài lệnh 12 bit
- PIC16xxxx: độ dài lệnh 14 bit
C: PIC có bộ nhớ EPROM (chỉ có 16C84 là EEPROM)
F: PIC có bộ nhớ flash
LF: PIC có bộ nhớ flash hoạt động ở điện áp thấp
LV: tương tự như LF, đây là kí hiệu cũ- PIC18xxxx: độ dài lệnh 16 bit
Bên cạnh đó một số vi điệu khiển có kí hiệu xxFxxx là EEPROM, nếu có thêm chữ A
ở cuối là flash (ví dụ PIC16F877 là EEPROM, còn PIC16F877A là flash).
Ngoài ra còn có thêm một dòng vi điều khiển PIC mới là dsPIC
-Ở Việt Nam phổ biến nhất là các họ vi điều khiển PIC do hãng Microchip sản xuất.

Cách lựa chọn một vi điều khiển PIC phù hợp:
8


- Trước hết cần chú ý đến số chân của vi điều khiển cần thiết cho ứng dụng. Có nhiều
vi điều khiển PIC với số lượng chân khác nhau, thậm chí có vi điều khiển chỉ có 8
chân, ngoài ra còn có các vi điều khiển 28, 40, 44, … chân
. - Cần chọn vi điều khiển PIC có bộ nhớ flash để có thể nạp xóa chương trình được
nhiều lần hơn. Tiếp theo cần chú ý đến các khối chức năng được tích hợp sẵn trong vi
điều khiển, các chuẩn giao tiếp bên trong.
- Sau cùng cần chú ý đến bộ nhớ chương trình mà vi điều khiển cho phép.
- Ngoài ra mọi thông tin về cách lựa chọn vi điều khiển PIC có thể được tìm thấy trong
cuốn sách “Select PIC guide” do nhà sản xuất Microchip cung cấp.
1.3.4 Ngôn ngữ lập trình của PIC
Ngôn ngữ lập trình cho PIC rất đa dạng. Ngôn ngữ lập trình cấp thấp có MPLAB
(được cung cấp miễn phí bởi nhà sản xuất Microchip), các ngôn ngữ lập trình cấp cao
hơn bao gồm C, Basic, Pascal, … Ngoài ra còn có một số ngôn ngữ lập trình được phát
triển dành riêng cho PIC như PICBasic, MikroBasic,…
1.3.5 Mạch nạp PIC
Đây cũng là một dòng sản phẩm rất đa dạng dành cho vi điều khiển PIC. Có thể sử
dụng các mạch nạp được cung cấp bởi nhà sản xuất là hãng Microchip như:
PICSTART plus, MPLAB ICD 2, MPLAB PM 3, PRO MATE II. Có thể dùng các sản
phẩm này để nạp cho vi điều khiển khác thông qua chương trình MPLAB. Dòng sản
phẩm chính thống này có ưu thế là nạp được cho tất cả các vi điều khiển PIC, tuy
nhiên giá thành rất cao và thường gặp rất nhiều khó khăn trong quá trình mua sản
phẩm
Ngoài ra do tính năng cho phép nhiều chế độ nạp khác nhau, còn có rất nhiều mạch
nạp được thiết kế dành cho vi điều khiển PIC. Có thể sơ lược một số mạch nạp cho
PIC như sau:
- JDM programmer: mạch nạp này dùng chương trình nạp Icprog cho phép nạp các vi

điều khiển PIC có hỗ trợ tính năng nạp chương trình điện áp thấp ICSP (In Circuit
Serial Programming).
- WARP-13A và MCP-USB: hai mạch nạp này giống với mạch nạp PICSTART PLUS
do nhà sản xuất Microchip cung cấp, tương thích với trình biên dịch MPLAB, nghĩa là
ta có thể trực tiếp dùng chương trình MPLAB để nạp cho vi điều khiển PIC mà không
cần sử dụng một chương trình nạp khác, chẳng hạn như ICprog
- P16PRO40: mạch nạp này do Nigel thiết kế và cũng khá nổi tiếng. Ông còn thiết kế
cả chương trình nạp, tuy nhiên ta cũng có thể sử dụng chương trình nạp Icprog.
- Mạch nạp Universal của Williem: đây không phải là mạch nạp chuyên dụng dành cho
PIC như P16PRO40
Các mạch nạp kể trên có ưu điểm rất lớn là đơn giản, rẻ tiền, hoàn toàn có thể tự lắp
ráp một cách dễ dàng, và mọi thông tin về sơ đồ mạch nạp, cách thiết kế, thi công,
9


kiểm tra và chương trình nạp đều dễ dàng tìm được và download miễn phí thông qua
mạng Internet. Tuy nhiên các mạch nạp trên có nhược điểm là hạn chế về số vi điều
khiển được hỗ trợ, bên cạnh đó mỗi mạch nạp cần được sử dụng với một chương trình
nạp thích hợp.

10


CHƯƠNG 2: CƠ SỞ LÝ THUYẾT GIỚI THIỆU VỀ KHÁI QUÁT
PIC16F877A

2.1 Hình dạng ,cấu tạo

Hình 2.1 Hình ảnh thực tế của PIC16F877A


Hình 2.2 Sơ đồ chân vi điều khiển PIC16F877A/PIC16F874A
11


2.2 Sơ đồ khối vi điều khiển PIC16F877A

Hình 2.3 Sơ đồ khối vi điều khiển pic 16F877A


Sơ đồ khối gồm các khối :
Khối ALU – Arithmetic Logic Unit.
- Khối bộ nhớ chứa chương trình – Flash Program Memory.
- Khối bộ nhớ chứa dữ liệu EPROM – Data EPROM.
- Khối bộ nhớ file thanh ghi RAM – RAM file Register.
- Khối giải mã lệnh và điều khiển – Instruction Decode Control.
- Khối thanh ghi đặc biệt.
- Khối ngoại vi timer.
- Khối giao tiếp nối tiếp.
- Khối chuyển đổi tín hiệu tương tự sang số
- ADC.
- Khối các port xuất nhập.
c, Chức năng các chân của điều khiển PIC16F877A
• Chân OSC1/CLK1(13): ngõ vào kết nối với dao động thạch anh hoặc ngõ vào nhận
xung clock từ bên ngoài.
• Chân OSC2/CLK2(14): ngõ ra dao động thạch anh hoặc ngõ ra cấp xung clock.
• Chân MCLD/VPP (1) có 2 chức năng
- MCLR ngõ vào reset tích cực ở mức thấp.
- Vpp: ngõ vào nhận điện áp lập trình khi lập trình cho PIC.
• Chân RA0/AN0(2), RA1/AN1(3), RA2/AN2(3): có 2 chức năng - RA0,1,2: xuất/ nhập
số. - AN 0,1,2: ngõ vào tương tự của kênh thứ 0,1,2.

• Chân RA2/AN2/VREF-/CVREF+(4): xuất nhập số/ ngõ vào tương tự của kênh thứ 2/
nhõ vào điện áp chuẩn thấp của bộ AD/ ngõ vào điện áp chẩn cao của bộ AD.
• Chân RA3/AN3/VREF+(5): xuất nhập số/ ngõ vào tương tự kênh 3/ ngõ vào điện áp
chuẩn (cao) của bộ AD.


• Chân RA4/TOCK1/C1OUT(6): xuất nhập số/ ngõ vào xung clock bên ngoài cho Timer
0/ ngõ ra bộ so sánh 1
• Chân RA5/AN4/SS / C2OUT(7): xuất nhập số/ ngõ vào tương tự kênh 4/ ngõ vào chọn
lựa SPI phụ/ ngõ ra bộ so sánh 2.
• Chân RB0/INT (33): xuất nhập số/ ngõ vào tín hiệu ngắt ngoài.
• Chân RB1(34), RB2(35): xuất nhập số. • Chân RB3/PGM(36): xuất nhập số/ cho phép
lập trình điện áp thấp ICSP.
• Chân RB4(37), RB5(38): xuất nhập số.
• Chân RB6/PGC(39): xuất nhấp số/ mạch gỡ rối và xung clock lập trình ICSP.
• Chân RB7/PGD(40): xuất nhập số/ mạch gỡ rối và dữ liệu lập trình ICSP.
• Chân RC0/T1OCO/T1CKI(15): xuất nhập số/ ngõ vào bộ giao động Timer1/ ngõ vào
xung clock bên ngoài Timer 1.
• Chân RC1/T1OSI/CCP2(16) : xuất nhập số/ ngõ vào bộ dao động Timer 1/ ngõ vào
Capture2, ngõ ra compare2, ngõ ra PWM2.
• Chân RC2/CCP1(17): xuất nhập số/ ngõ vào Capture1 ,ngõ ra compare1, ngõ ra PWM1.
• Chân RC3/SCK/SCL(18): xuất nhập số/ ngõ vào xung clock nối tiếp đồng bộ, ngõ ra
chế độ SPI./ ngõ vào xung clock nối tiếp đồng bộ, ngõ ra của chế độ I2C.
• Chân RC4/SDI/SDA(23): xuất nhập số/ dữ liệu vào SPI/ xuất nhập dữ liệu I2C.
• Chân RC5/SDO(24): xuất nhập số/ dữ liệu ra SPI.
• Chân RC6/TX/CK(25): xuất nhập số/ truyền bất đồng bộ USART/ xung đồng bộ
USART.
• Chân RC7/RX/DT(26): xuất nhập số/ nhận bất đồng bộ USART.
• Chân RD0-7/PSP0-7(19-30): xuất nhập số/ dữ liệu port song song.
• Chân RE0/RD /AN5(8): xuất nhập số/ điều khiển port song song/ ngõ vào tương tự 5

• Chân RE1/WR /AN6(9): xuất nhập số/ điều khiển ghi port song song/ ngõ vào tương tự
kênh thứ 6. • Chân RE2/CS /AN7(10): xuất nhấp số/ Chân chọn lụa điều khiển port song
song/ ngõ vào tương tự kênh thứ 7.
• Chân VDD(11, 32) và VSS(12, 31): là các chân nguồn của PIC


CHƯƠNG 3: SƠ ĐỒ KHỐI VÀ CHƯƠNG TRÌNH ĐIỀU KHIỂN
3.1 Sơ đồ khối

Khối Nguồn

Khối Vi xử lý
trung tâm

3.2 Lưu đồ thuật toán và Sơ đồ mô phỏng

Hình ảnh mô phỏng

Khối hiển thị


Sơ đồ thuật toán
3.4 Chương trình điều khiển
#INCLUDE <16F887.H>

// KHAI BÁO THU VIEN

#FUSES NOWDT, PUT, HS, NOPROTECT, NOLVP
#USE DELAY(CLOCK=1M)


CONST UNSIGNED CHAR MA7DOAN[16]= {0XC0,0XF9,0xA4,0XB0,0X99,0X92,0X82,0XF8,
0X80,0X90,0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E};


UNSIGNED INT8 L;
UNSIGNED INT16 I;
VOID HIENTHI()
{
FOR(L=0;L<100;L++)
{

OUTPUT_B(MA7DOAN[I/1000]);
OUTPUT_HIGH(PIN_D0);

OUTPUT_LOW(PIN_D0);

OUTPUT_B(MA7DOAN[I/100%10]);
OUTPUT_HIGH(PIN_D1);
OUTPUT_B(MA7DOAN[I/10%10]);
OUTPUT_HIGH(PIN_D2);
OUTPUT_B(MA7DOAN[I%10]);
OUTPUT_HIGH(PIN_D3);
}
}

VOID MAIN()
{
SET_TRIS_B(0X00);

SET_TRIS_D(0X00);

OUTPUT_D(0XFF);
WHILE(TRUE)
{
FOR(I=0;I<1000;I++)

DELAY_MS(1);

OUTPUT_LOW(PIN_D1);
OUTPUT_LOW(PIN_D2);

OUTPUT_LOW(PIN_D3);

DELAY_MS(1);
DELAY_MS(1);

DELAY_MS(1);


{
HIENTHI();
//DELAY_MS(200);

}
}
}



×