Articles by "Lập trình pic"

10 4.104 8051 9 Acquy adc pic All datasheet ALTIUM Altium Designer AM-FM Arduino ARM ARM là gì Ấn Tượng Bản tin công nghệ Bản tin Thiết Bị Số Barobo bất động sản biến Binary Bit board lpc2378 Bộ chuyển đổi ADC Bộ Đếm Bộ điều khiển cửa cuốn Bộ Định Thời Buy Khóa Số Điện Tử Buy Mạch đếm sản phẩm Buy Mạch giao thông Buy Mạch nạp Buy Matrix Byte C cho AVR các hàm vào ra các loại lõi arm các mạch DAC cơ bản các ngắt trong pic Cách đọc điện trở Cách Đọc Giá Trị Điện Trở Cách đọc giá trị tụ điện Cách hàn linh kiện dán cách làm mạch khóa số cách tạo linh kiện dán cad/cam Cài Đặt cài đặt proteus 8 cảm biến Cấu Kiện Logic Khả Trình cấu tạo cấu trúc arm cấu trúc lệnh CCS Chân chân Transistor Chip Khả Trình chuyển đổi Chuyển đổi số tương tự Chuyển Đổi Tương Tự/Số - ADC Chuyển động số chương trình City Clip Điện Tử Code 8051 - ASM Code 8051 - C Code 8051-C code ASM code ASM mẫu 8086 Code AVR - C code C Code Lập Trình Code led sao băng code maupic code mẫu 8051 Code Mẫu 8086 Code Mẫu cho ARM - LPC1343 code mẫu pic Code PIC - C codemaupic Counter Cổng Vào Ra Cơ Bản Cuộn Cảm Cửa cuốn DA DAC Debug Decimal Delay8051 Dev-C++ Diode DIY Dò đường Do It Yourself doanh nghiệp Download DTMF Mobile đảo chiều động cơ Điện Trở Điện Tử Điện Tử Cơ Bản điều chế độ rộng xung điều chế xung PWM điều khiển bằng điện thoại Điều khiển cửa cuốn Điều khiển cửa cuốn bằng điện thoại điều khiển động cơ đo điện áp đo nhiệt độ đo nhiệt độ hiển thị lên lcd trên 8051 Đo Nhiệt Độ LM35 + LCD Đo Nhiệt Độ LM35 + Led 7 thanh đọc màu điện trở đồ chơi động cơ chân không Động cơ nhiên liệu Động cơ robo đồng hồ thời gian thực Ebook Đại Học ebook điện tử Ebook đồ án Ebook Tin Học Encoder Encoder là gì Full Giải Thuật Giải thuật PID Giáo Dục giao tiếp i2c pic 16f877a giao tiếp i2c pic16f877a với ic ds1307 giao tiếp máy tính qua rs232 Giao Tiếp Máy Tính VB6 giao tiếp rs232 giao tiếp spi giữa 2 pic giao tiếp spi trong pic Giáo Trình Điện Tử Giới thiệu 8051 Giới thiệu cơ bản GPIO Graphic Design hàm Hàn linh kiện dán Hexadecimal Hệ Hexa Hệ Nhị Phân Hệ Thập Lục Phân Hệ Thập Phân hiển thị lên lcd 16x2 Hoạt Động Học Học 8051 qua các ví dụ đơn giản Học ALtium Designer học AVR Học Corel Draw X3 Học Eagle HỌC LẬP TRÌNH 16F877A Học Lập Trình 8051 Học Lập Trình C Học Orcad Học Protues hoc-lam-robot-do-duong-qua-video Hồng ngoại hướng dẫn hướng dẫn Altium Designer hướng dẫn đo đồng hồ VOM hướng dẫn keil - C lập trình 8051 hướng dẫn làm led sao băng hướng dẫn làm led trái tim hướng dẫn lập trình ARM Hướng Dẫn Lập Trình ARM - LPC1343 hướng dẫn lập trình ARM-LPC2378 hướng dẫn lập trình CCS hướng dẫn lập trình PIC Hướng Dẫn Led Trái Tim hướng dẫn module sim548c hướng dẫn sử dụng keil hướng dẫn sử dụng proteus 8 Hyper Terminal hercules 3.2.4 I/O IC 555 IC 7447 IC 74HC151 IC 74HC154 IC 74HC245 IC 74HC595 IC 74LS138 IC DS1307 IC đồng hồ thời gian thực IC LM324 IC LM342 IC LM7805 IC số IC số opamp LM324 IC Thông Dụng IC555 Interrupt Keil 4 Full keil arm Keil C Keil uVision3 kế toán kiểm toán khái niệm Khái Niệm Cơ Bản Kho Vật Liệu khóa điện tử khóa số dùng 8051 khóa số dùng 89s52 Khóa Số Điện Tử khuếch đại kiểm tra Kinh doanh maketing kinh tế quản lí Kỹ Thuật Kỹ Thuật Vi Xử Lý làm mạch điện lý thú Làm quen AVR Lap Trinh Dieu Khien Robot Lập Trình lập trình 8051 Lập Trình AVR Lập Trình C lập trình c++ Lập Trình Led Quảng Cáo Lập Trình Nhúng Lập trình pic Lập trình Robot Lập Trình Vi Điều Khiển Lập Trình Với AVR Studio LCD 16x2 Lcd16x2 Led Clock Led Quay led sao băng led trai tim Led Trái Tim Lịch sử ra đời Linh Kiện Cơ Bản linh kiện điện tử Loa LPC 2378 LSB lý thú Mã AVR - C Mạch 7seg Mạch Amply.Mạch Loa Mạch Autorobo Mạch bảo vệ Mạch Cảm Biến mạch cảm ứng sờ tay Mạch Cầu H Mạch cube Mạch Đếm Sản Phẩm Mạch điện cơ bản Mạch điện hay Mạch Điện Ứng Dụng Mạch Điều khiển động cơ Mạch Động Cơ Mạch đồng hồ Mạch đồng hồ 4 led Mạch giao thông Mạch IC số Mạch in mạch khóa số mạch khuếch đại thuật toán mạch led chúc mừng năm mới mạch led đẹp Mạch Led đơn Mạch Led Quảng Cáo mach led trai tim mạch led trái tim Mạch Led Vumeter mạch lý thú Mạch Ma trận Phím Mạch Matrix Mạch nạp Mạch nguồn Mạch Nút Bấm mạch sóng rf mạch tăng áp Mạch thu phát Mạch tổ hợp MSI Mạch trái tim Mạch Vi điều khiển Microbicho module module GSM/GPS Module Sim548 Module Sim548 giao tiếp với vi điều khiển PIC Module Sim548C Mosfet Motor Mô Phỏng Phần Cứng Mô Tả Phần Cứng MSB mua led sao băng News Ngắt Ngắt Trong LPC23xx ngân hàng Ngôn Ngữ Ngôn Ngữ C Ngôn Ngữ Tự Học Lập Trình C Ngôn Ngữ VHDL Nguyên Lý nguyên lý ic 555 Nguyên Tắc nháy led Nhập môn C Nhỏ Gọn Nibble opamp People Phần Mềm phần mềm altium Designer Phần mềm điện tử Phần Mềm Điện Tử Phần Mềm Điện Tử Hay Phần Mềm Hay Phần Mềm Led Quảng Cáo phần mềm proteus 8 Phần mềm vi tính Phần Mền Phương pháp hàn linh kiện dán PIC pic16f877a Print Design Proteus Proteus 7.8 SP2 FULL PWM quà tặng bạn gái quà tặng độc đáo quản trị doanh nghiệp quản trị kinh doanh quét led 7 đoạn Relay robocon Robot ROBOT DÒ ĐƯỜNG rút gọn mạch logic tổ hợp Sach Dien Tu Sản Phẩm Thú Vị Sản Phẩm Thương Mại Sáng tạo Short Smart Home SMD sơ đồ nguyên lý spi Sports Sử Dụng Sử Dụng Đồng Hồ sử dụng đồng hồ VOM sử dụng ngắt trong pic sự khác nhau Sức mạnh số Tải tài chính tài chính doanh nghiệp tài chính ngân hàng Tài Khoản Chia Sẻ Tài Liệu Tài Liệu 8051 tài liệu avr Tài liệu Điện Tử Tài Liệu Pic Tài liệu robocon tài liệu về ngân hàng Tài Liệu Vi Điều Khiển tailieuvn Tạo cổng Com ảo Tạo cổng nối tiếp ảo tạo dự án trong keil arm Tạo Project trong Vi Xử Lý ARM tạo thư viện altium designer tạo xung vuông Tạp chí Tạp Chí Hay tăng áp Tập lệnh AT Team Support TEAMPLATE PROTEUS Test thị trường tài chính Thiết Bị Thú Vị Thiết kế robot Thiết lập Fuse Bits Thiết Lập Pin Thuật Toán Thuật Toán Điều Khiển PID Thuật Toán Quine MCCluskey Thư viện Protues Thực Hành Thyristor Timer Timer/Counter Tin Học Chia Sẻ Tổ Chức Bộ Nhớ tổng quan về proteus 8 Transistor Tranzito Tranzitor Trao đổi học tập Travel Trình Biên Dịch Trình Dịch Trong Suốt Truyền Thông Nối Tiếp Không Đồng Bộ- UART truyền thông nối tiếp RS232 Tụ điện TUT - 8051 - ASM TUT - 8051 - KeilC tự hành Tự Học C Tự Học Lập Trình C Tý hon UART Update USB Ứng Dụng Led Quảng Cáo ứng dụng mạch khuếch đại thuật toán vẽ mạch in vẽ mạch nguyên lý VHDL Vi Điều Khiển Vi điều khiển - Ứng dụng vi điều khiển PIC Vi mạch số Vi Xử Lý Vi Xử Lý 8051 Vi Xử Lý 8086 Vi Xử Lý ARM Vi Xử Lý PIC Video Video Mach Điện Virtual Serial Port Driver VOM vxl Web Design xác định góc quay động cơ xử lý chuỗi
Hiển thị các bài đăng có nhãn Lập trình pic. Hiển thị tất cả bài đăng



Mục lục:
Chương I. Tổng quan vể vi điều khiển PIC
Chương II. Vi điều khiển PIC 16F877A
Chương III. Tập lệnh của vi điều khiển PIC
Chương IV. Một số ứng dụng cụ thể của PIC 16F877A


Khi nhấn nút "Tải Về Máy", bạn sẽ vào trang quảng cáo, vui lòng chờ 5 giây. Nút hiện ra ở góc phải phía trên, nhấn vào để đến trang download

Phạm Văn Ngọc Anh- 01644326695


Hôm nay online, search thấy cái ứng dụng Pic 16f877a vào thực tế hây quá nên post lại cho anh em nào cần thì vào nghiên cứu, mạch nguyên lý, mạch PC và source code C, Hex cùng với hướng dẫn cụ thể (English luanguage)
Introdution

In this project we design low cost high performance programmable home security system using few LDR's as an input sensors. When above sensor(s) get triggered system may dial the user specified phone number (using build-in DTMF generator) and activate the high power audio alarm and lights. All the parameters of DTMF generator, audio alarm and light interface are programmed through the RS232 serial interface.
Current firmware of this system presents interactive control system through the RS232 interface. This control system consist with the menu driven configuration options, self tests, system report generators, etc.
This system also contain 5W (with 4Ω speaker) audio alarm with three selectable tone configurations, which include Police siren, Fire engine siren and Ambulance siren.


System Features


- Touch tone phone dialing interface
- 5W High powerful audio alarm
- 2 sensor interface with separate sensitivity adjustments
- Programmed through the RS232 interface
- Build-In intelligent light ON/OFF switch

Integrated Circuits


This system uses a Microchip's PIC16F877A as a main controller, LM339 as sensor interface, UM3561 as a tone generator and μPC2002 as a speaker driver (audio amplifier). LM7805, LM7812 and LM317 voltage regulators are used to obtain +5V, +12V and +3V respectively.
External connectors and controls

DC Power input : Attach DC power supply with 18V - 25V (2A Max.) output.
RS232 Connector : Connect RS232 serial cable to the port to configure the system. Do not use RS232 Null Modem cable with this port.
PHONE/LINE connector : Attach standard RJ12/RJ11 telephone cable connector to this port. One port is need to use with the phone line and remaining port is for the phone (and it is optional).
3V LASER supply : 3V supply line for LASER diode assembly.
Connectors for Sensor 1/2 : Attach high sensitive LDRs for these ports. To get the maximum sensitivity it is recommended to use EG&G VACTEC LDRs.
Status Indicator : Indicate run, program and sensor trigger modes.
Reset Switch : Press this button to reset entire alarm system. This button enable only when the audible alarm get activated. It is not possible to use this function at the phone dialing/ringer states.
Phone dialer enable switch : Turn on this switch to enable the phone dialing feature of this system. Environment Sensor : In-circuit LDR to detect light conditions of the environment.
Alarm Volume Control : Use this to control the output power (volume) of the audible alarm.
230V Light connector : Attach 230V AC light (or related peripheral) to these terminals.
Tone Selector : Configure the master alarm tone from this jumper as follows,
1-2 : Fire Engine Siren
2-3 : Ambulance Siren
Open : Police Siren
(Do not connect jumper terminal 1-3, this combination may permanently damage the entire system) Beeper : Produce beeps (e.g: at the input error, etc.)
Program / Run Switch connector : Attach switch to this header to select Program or Run mode.
Alarm Audio Output : Attach 8Ω (8W) or 4Ω (10W) speaker to this connector.

Calibration and Testing


Once everything is assembled take following steps to calibrate the system,
1. Remove IC1, IC2, IC3 and IC4 from the IC bases.
2. Apply 18V ( to 22V Max.) DC source to the power connector (J3).
3. Check the voltage between Pin12 (GND) and Pin3 of IC2. It need to be 4.8V - 5.1V DC.
4. Check the voltage between GND and E$4 jumper. It need to be 11.7V - 12.3V DC.
5. Check the voltage between Pin1 and Pin3 (GND) of JP1. It need to be 2.5V - 3.1 V
6. If all the above Step 3, 4 and 5 are correct, disconnect the power supply and insert IC1, IC2, IC3 and IC4 in to the appropriate IC bases. Attach suitable speaker to the X4 and connect RS232 cable to the system.
7. Close the jumper J2 (Program Mode) and power on the system.
8. Download and install PuTTY on to the target computer and setup the "Serial" connection with 9600 baud rate (see Fig. 3).

9. Press "2" and enter into the "Parameter Setup" mode. Configure all the parameter options with the appropriate settings.
10. Attach phone line to the PHONE/LINE connector and fix photoelectric LDR sensors to the X1 and X2 connectors.

11. Press "3" and execute "Self Test".
12. Adjust R4*, R6* and R8* preset controls, if the sensors are not trigged as expected.
13. Adjust R11 preset to control the "Day" and "Night" mode detection.
14. Open the Jumper J2 and press 5 to return to the Run mode.
15. Shutdown the power supply and disconnect the RS232 cable.

Fig.3 - PuTTY configuration setup for Programmable Home Security Alarm System

* R6 - X1 sensor sensitivity, R8 - X2 sensor sensitivity, R4 - sensor gain controller (Common mode)


|| Tải PuTTY tại đây

Danh sách các linh kiện





Sơ đồ nguyên lý

                            

PCB


                                       (tải ở định dang pdf)



                                               (Tải ở định dạng pdf)





Khi nhấn nút "Tải Về Máy", bạn sẽ vào trang quảng cáo, vui lòng chờ 5 giây. Nút hiện ra ở góc phải phía trên, nhấn vào để đến trang download

Phạm Văn Ngọc Anh- 01644326695


Nguồn danvienthong.blogspot.com


Một ứng dụng rất hây sử dụng vi điều khiển PIC 16F84A là Cảm biến Gas. 
Sau đây là bài hướng dẫn, mình nghĩ với hướng dẫn chi tiết và có sẵn 
firmware thì các bạn dễ dàng thực hiện thôi.
Kết nối trên testboard



Introduction:
This is a gas detecting circuit capable of sensing many different types of 
gases.  The sensor used is the GH-312 and from the datasheet it is 
capable of sensing gases like smokeliquefied gasbutane and propane
Methanealcohol,hydrogenetc.

Diagram


Parts list
R1                   1K resistor
R2                   1K resistor
P1                    100K potentiometer
C1                   10uF cap
C2                   100nF cap
C3                   100nF cap
C4                   15pF cap
C5                   15pF cap
Xtal                 8Mhz crystal
Led1                3mm red led
Piezo               Piezo
LCD                8X2 LCD
IC1                  16F84A microcontroller
VR1                7805 regulator
GH-312           Gas Sensor
PBC
                                    Top side

 
                                          Buttom side
I've used a 9V battery for this project because the sensor requires a 9V input. 
  The output when the sensor is triggered is always 5V which is perfect for a direct
 connection to any microcontroller.   Although I've used a 9V battery, any 12V 
power supply ( a small wall transformer for example ) will work perfectly since the 
sensor can handle from 9V up to 20V and the microcontroller's voltage is regulated 
by a 7805 regulator.

Testing
The first tests were made with the circuit mounted on a breadboard.   
After initialization the circuit will enter a normal state where it detects no gas. 
The display shows "Sensing...No Gas !".
To test the sensor I used my portable gas soldering iron with the gas coming 
out pointed to the sensor.
The sensor is able to detect the gas and the microcontroller will trigger a
 flashing led warning and sound.
The sound is produced by a small piezo and the display show the message 
"Found Gas".


Conlusion
It's a pretty cheap and easy to assemble circuit.
Does not require too many parts and the microcontroller is very easy to find
 ( the famous 16F84A from microchip ).
Since it's used a small lcd ( 8x2 ) this project can be portable.
Also this sensor senses several types of gas and it's pretty stable.
Phạm Văn Ngọc Anh- 01644326695


Nguồn danvienthong.blogspot.com

Nhấp nháy LED có thể coi là một chương trình “Kinh điển”. Mỗi người khi bắt tay vào
học VĐK thì bài học đầu tiên là làm nhấp nháy một hay vài con LED trên chân VĐK. Trong
tài liệu này tôi cũng chọn bài tập đó để bắt đầu.
Mục đích của bài như trên đã nói: Làm nhấp nháy 8 LED tại PORTB của PIC 16F877A,
thời gian trễ do người lập trình định trước.
Những điều thu được qua bài học:
‐  Vẽ một mạch điện tử hoàn chỉnh dùng OrCad 9.2
‐  Tạo một Dự án trong CCS (cái này đã nói trong phần 2)
‐  Tệp định nghĩa các thanh ghi của PIC do người dùng tạo ra
‐  Thiết lập chế độ vào ra cho một cổng của PIC
‐  Sử dụng hàm tạo trễ thời gian

Dưới đây là sơ đồ phần cứng. Trong sơ đồ các LED được mắc chung lên dương nguồn
thông qua điện trở. Gia trị điện trở thay đổi trong khoảng 100Ω cho đến 560Ω tùy theo độ
sáng của LED mà ta muốn và cũng để đảm bảo dòng qua mỗi LED không quá 20mA khi
nguồn cấp là 5V. Như vậy để làm sáng LED ta chỉ việc đưa mức 0 ra các chân PIC và ngược
lại để tắt ta đưa mức 1.
 Sơ đồ mạch nháy 8 LED tại PORTB


 Sơ đồ mạch nguồn cho PIC

Mã nguồn chương trình nạp vào PIC 

//=================================================  ======= 
// Ten chuong trinh : Mach nhay den LED 
// Mo ta phan cung  : Dung PIC16F877A ‐ thach anh 20MHz 
//   : LED giao tiep voi PORTB 
//   : Cuc am cua LED noi voi PORTB 
//   : RB0 ‐ RB7 la cac chan output 
//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 
// Chu thich  : dung che do Power On Reset, PORTB = 00000000 
//   : chuong trinh viet cho PIC Tutorial 
//   :  chuong trinh nay hoan toan mien phi va co the dung cho 
//   : moi muc dich khac nhau 
//=================================================  ======= 

#include <16f877a.h> 
#include <def_877a.h> 
#device *=16 ADC=8 
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, 
NOLVP, NOCPD, NOWRT 
#use delay(clock=20000000) 

void main()
// Thiet lap che do cho PORTB 
TRISB = 0x00;   // Tat ca PORTB deu la cong xuat du lieu 
PORTB = 0xFF;   // Tat het cac LED 
While(1)  
  PORTB = 0;  // Cho các LED sáng 
  delay_ms(250);  // Tạo thời gian trễ 250ms 
  PORTB = 0xFF; 
  delay_ms(250); 

Qua ví dụ đơn giản trên bạn hiểu cách xuất dữ liệu ra một cổng của PIC và dùng các 
hàm tạo trễ. 
Thủ tục thiết lập vào ra cho một cổng hay một chân của PIC 
‐  Ghi giá trị vào thanh ghi điều khiển chế độ của cổng tương ứng là TRISx 
o  Bit 0 ứng với chân xuất dữ liệu 
o  Bit 1 ứng với nhận dữ liệu 
o  Thanh ghi TRISx có thể câu hình theo từng bit 
‐  Khi muốn xuất dữ liệu, ví dụ ra PORTB, câu lệnh là: PORTB = gia_tri; 
‐  Khi muôn nhận dữ liệu từ PORTB, câu lệnh là: data_in = PORTB; 
Về các hàm tạo trễ, trong CCS hỗ trọ sẵn 3 loại hàm tạo trễ là:  
‐  delay_cycles(gia_tri): gia_tri là thời gian trễ tính theo số chu kỳ máy 
‐  delay_us(gia_tri): Tạo trễ Micro giây 
‐  delay_ms(gia_trị): Tạo trễ Mili giây 
Bản chất của các hàm tạo trễ là đưa Vi điều khiển vào một vòng lặp chẳng làm gì cả cho 
đủ số thời gian mà ta cần. Ngoài việc dùng hàm tạo trễ có sẵn ta có thể tự viết hàm tạo trễ 
dùng bộ Timer.
Phạm Văn Ngọc Anh- 01644326695

Bộ chuyển đổi từ tương tự sang số là một khối mạch điện tử quan trọng, có mặt trong rất nhiều thiết kế điện tử. Các bộ ADC thực tế được đóng gói trong những IC chuyên dụng, do nhiều hãng sản xuất. Điểm quan trong cần lưu ý ở các bộ ADC này là độ phân giải và tốc độ lấy mẫu tìn hiệu. Độ phân giải của bộ ADC có thể là 8‐bít, 10‐bít, 12‐bít, 16‐bít, 24‐bít… Tốc độ lấy mẫu của ADC có thể nhanh hay chậm, tùy từng ứng dụng mà ta chọn tốc độ thích hợp.
Vi điều khiển PIC là một trong những dòng Vi điều khiển có phần giao tiếp ngoại vi mạnh và đa dạng. Bên trong PIC đã được tích hợp sẵn một bộ ADC có độ phân giải tối đa là 10‐bít (tùy chon là 8‐bit hay 10‐bit). Với bộ ADC trong PIC ta có thể làm được khá nhiều công việc, dưới đây tôi trình bày một ứng dụng của bộ ADC trong việc thiết kế mạch đo nhiệt độ sử dụng sensor nhiệt LM335.

Dưới đây là phần code mạch đo nhiệt dộ, hiển thị trên LCD.


//=================================================  =======
// Ten chuong trinh  : Mach do nhiet do
// Mo ta phan cung  : Dung PIC16F877A ‐ thach anh 20MHz
//   : LCD giao tiep voi PORTD
//   : Dau ra LM335 dua vao chan AN0
//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
// Chu thich : hoac cac chu thich khac
//   : dung che do Power On Reset
//   : chuong trinh viet cho PIC Tutorial
//=================================================  =======
#include "16F877A.h"
#include "def_877a.h"
#device *=16 adc=10
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,
NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#use rs232(baud=115200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=9)
#include <lcd_lib_4bit.c>  // Thu vien ham cho LCD
int8 low,high,key,mode,min,max,mode1,i;
int1 do_F;
void convert_bcd(int8 x);
void bao_dong();
void test();
//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
void main()
{

 float value;
  on_off =1;
  min    =15;   //nhiet do min default
  max    =35;   //nhiet do max default
  do_F   =0 ;
  i = 50 ;
  mode   =0 ;
  mode1 = 0 ;
   trisa = 0xFF;
   trisb = 0x01;
   trisd = 0x00;
      LCD_init();
      Printf(LCD_putchar,ʺLop DT8 ‐ BKHNʺ);
      LCD_putcmd(0xC0);
      Printf(LCD_putchar,ʺKhoi tao...ʺ);
// Khoi tao cho ngat ngoai
      enable_interrupts (INT_EXT);
      ext_int_edge(H_TO_L);
      enable_interrupts (GLOBAL);
// Khoi tao che do cho bo ADC
      setup_adc_ports(AN0);
      setup_adc(ADC_CLOCK_INTERNAL);
      delay_us(10);
// Lay mau nhiet do lan dau tien
      value=(float)read_adc();
      value = (value ‐ 558.5)/2.048;        // For 5V supply
      //    value = (value ‐ 754.8)/2.048;  // For 3.7V Supply
      //    value = (value ‐ 698.2)/2.048;  // For 4V supply
      convert_bcd((int8)value);  // Tach so tram, chuc, donvi de hien thi len LED 7
      delay_ms(1000);
      LCD_putcmd(0xC0);
      Printf(LCD_putchar,ʺKhoi tao xongʺ);
      while(1)
      {
       if (i==50)
          {
            value = read_adc();

 value=(value‐558.5)/2.048;
            if (do_F==1) value=1.8*value+32;
            convert_bcd((int8)value);
            printf(ʺ\n\rNhiet do phong: %uʺ,value);// Gui gia tri len may tinh
            LCD_putcmd(0xC0);
            printf(LCD_putchar,ʺ  Temp = ʺ);
            LCD_putchar(high); LCD_putchar(low);
            if (do_F==0) printf(LCD_putchar,ʺ Cʺ);
            else printf(LCD_putchar,ʺ Fʺ);
            i=0;
          }
       i++;
       if(((int8)value > 40) || ((int8)value < 15)) on_off=1;
       else
        {
         on_off = 0;
         LCD_Putcmd(0xCF);
         LCD_putchar(ʺ ʺ);
         blink=0;
        }
       if (on_off==1)
       {
       if (blink==0) {
LCD_Putcmd(0xCF);LCD_putchar(ʺ!ʺ);blink=1;delay_ms(250);}
       else          {LCD_Putcmd(0xCF);LCD_putchar(ʺ ʺ);blink=0;delay_ms(250);}
       }
     }
   }//end main‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
#INT_EXT
void test()
{
   if (do_F == 1) do_F=0;
   else          do_F=1;
}
void convert_bcd(int8 x)
  {
   low=x%10;  //chia lay phan du, so hang don vi

 high=x/10;   //tach hang tram va hang chuc
   low = low + 0x30;
   high = high + 0x30;
  }
void bao_dong(){
int8 i;
if (blink == 0) blink = 1;
else            blink=0;
     for(i=0;i<50;i++)
     {
      LCD_Putcmd(0xCF);
      if (blink==0) LCD_putchar(ʺ!ʺ);
      else         LCD_putchar(ʺ ʺ);
     }
}

Dưới đây là một sơ đồ dùng PIC và LM335 để đo nhiệt độ, hiển thị trên LCD. Trong chương trình bạn thấy có hàm chuyển đổi nhiệt độ từ ía trị độ K về độ C. Nguyên nhân có hàm đó là do con LM335 thay đổi 10mV/K, ta cần hiển thị là độ C. Nhận thấy 0oC = 273K, như vậy tại 0oC con LM335 sẽ xuất ra một điện áp là 2.73V và với điện áp này, ADC trong PIC sẽ cho giá trị số là:  (2.73*1023)/5 = 558 . 5585 . Như vậy khi tính toán giá trị nhiệt độ ta cần trừ đi giá trị 558.558 này. Công thức đầy đủ là:
 Do_C= [(adc_value)- 558.558] / 2.048
Giá trị 2.048 có là do ta dùng ADC 10‐bit, điện áp lấy mẫu là 5V, như vậy mỗi mức lượng tử sẽ tương ứng với  5V/1024 = 4.883mV.
LM335 thay dổi 10mV/K do đó ứng với sụ thay đổi 1 độ C sẽ thay đổi 2.048 mức lượng tử (10mV/4.883mV = 2.048). Công thức trên là cho ADC 10‐bit, với các bộ ADC 8‐bit hay 12‐bit việc tính toán chuyển đổi giá trị cũng tương tự.
 Mạch đo nhiệt độ LM335 hiển thị trên LCD 16x2


Việc giao tiếp giữa Vi điều khiển và máy tính là bài lập trình khá quan trọng khi ta làm việc với các dòng Vi điều khiển khác nhau. Với Vi điều khiển PIC cũng vậy, trong mỗi IC PIC đều có tích hợp một khối giao tiếp máy tính USART. Ta sử dụng khối giao tiếp này để truyền dữ liệu lên máy tính và xử lý dữ liệu đó tùy vào mục đích của người lập trình. Để nhận dữ liệu do Vi điều khiển truyền lên máy tính ta có thể sử dụng các phần mềm giao tiếp COM có sẵn hay viết một chương trình mới, sử dụng các ngôn ngữ lập trình như C++, VB hay Delphi… Trong chương trình ví dụ dưới đây tôi sử dụng công cụ sẵn có của CCS là Serial Port Monitor để truyền và nhận dữ liệu từ PIC.
Sơ đồ mạch điện ORCAD. Mạch sử dụng IC MAX232 để kết nối đến cổng COM của
máy tính. Mạch đơn giản chỉ nhằm mục đích giới thiệu khối giao tiếp máy tính của PIC và
cách lập trình cho nó trong CCS.
Trong chương trình ta có sử dụng hàm xử lý ngắt nối tiếp để xử lý ký tự nhân được từ máy
tính. Khi có ngắt xảy ra, ta gọi hàm getc() sẽ trả về ký tự vừa nhận được. Trên màn hình LCD
sẽ hiển thị ký tự mà ta gõ từ bàn phím máy tính.


Code mẫu cho PIC - Truyền thông nối tiếp RS232
 Mạch giao tiếp máy tính, hiển thị LCD
[success title="MÃ NGUỒN CHƯƠNG TRÌNH" icon="check-circle"]

Mã nguồn chương trình: 

#include <16f877a.h> 
#include <def_877a.h> 
#use delay(clock=20000000) 
#FUSES  NOWDT,  HS,  NOPUT,  NOPROTECT,  NODEBUG,  NOBROWNOUT, 
NOLVP, NOCPD, NOWRT 
// Khai báo sử dụng giao tiếp nối tiếp RS232 
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=9) 

#include <lcd_lib_4bit.c> 

int8 count=0; 
char string_in[16]; 

#INT_RDA  // Hàm xử lý ngắt nối tiếp 
Receive_isr() { 
char c; 
int8 i; 
count++; 
c = getc(); 
putc(c); 
if (c==ʹcʹ | c==ʹCʹ) 
   { 
      LCD_putcmd(0x01);    //Clear Screen 
      c=ʹcʹ; 
      count=0; 
   } 
if ((count<=16) && (c!=ʹcʹ))  LCD_putchar(c); 
if (count > 16) 
   { 
      count=0; 
      LCD_putcmd(0xC0); 
   } 
void main() 
{
enable_interrupts(int_rda);
enable_interrupts(GLOBAL);
lcd_init(); // Khởi tạo cho LCD
lcd_putcmd(0x01);
lcd_putcmd(line_1);
printf(ʺEnter a String.ʺ);
printf(ʺOr anything you want!ʺ);
while (1) {}
} [/success]
Mô tả chương trình: Trên đây là chương trình giao tiếp với máy tính, ta thấy trong CCS để sử dụng giao tiếp nối tiếp ta chỉ cần khai báo #use rs232(). Các hàm giao tiếp với máy tính mà CCS hỗ trợ là:
‐  putc(char ky_tu) : Gửi một ký tự ASCII lên máy tính
‐  getc() : Hàm trả về một ký tự nhận được từ máy tính
‐  printf(string): hàm gửi một chuỗi ký tự lên máy tính

Trong Vi điều khiển PIC có nhiều nguồn ngắt. Để biết cụ thể ta có thể vào mục View >> Valid Interrupts . Khi đó một của sổ sẽ hiện ra liệt kê đầy đủ các nguồn ngắt của từng con PIC.

 Các nguồn ngắt trong PIC


Để viết một hàm phục vụ ngắt ta chỉ việc thêm khai báo #INT_tên_ngắt vào 
trước hàm phục vụ cho ngắt đó. Khi đó trình dich sẽ hiểu đó là địa chỉ hàm cho 
ngắt, khi có ngắt tương ứng xảy ra thì nó sẽ nhảy đến vị trí đó . Lấy ví dụ khi ta muốn xử lý ngắt ngoài, hàm sẽ được viết như sau:

#INT_EXT 
Ext_isr() 
// Nhập mã tại đây 
}




Dưới đây là chương trình nháy led theo nhiều kiểu khác nhau, sử dụng 1 phím bấm nối với chân ngắt ngoài RB0 để chọn kiểu nháy. Có 8 kiểu nháy LED khác nhau, Khi đến kiểu nháy thứ 8, nếu ta nhấn thì sẽ trở về chế độ ban đẩu. Ban đầu biến mode = 0 và tất cả các LED đều tắt Mỗi khi nhấn phím bấm, biến mode sẽ tăng lên 1 đơn vị. Giá trị biến mode tương ứng với chương trình nháy được thực hiện. Khi mode = 9 thì sẽ được gán về mode = 0. Các kiểu nháy khác nhau là do ta bật tắt các LED trên cổng D theo các cách khác nhau. Lấy ví dụ khi ta muôn các LED nháy xen kẽ nhau ta chỉ việc gửi ra cổng D giá trị AAh (10101010) và 55h (01010101).
 Nháy LED nhiều chế độ dùng Ngắt

Mã nguồn chương trình: 

#include <16F877A.h> 
#include <def_877a.h> 
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, 
NOLVP, NOCPD, NOWRT 
#use delay(clock=20000000) 

int8 mode,i; 
byte temp; 



#INT_EXT
EXT_ISR() {

mode++;
if (mode==9) mode = 0;
}
// End of INT

void program1();
void program2();
void program3();
void program4();
void program5();
void program6();
void program7();
void program8();

void main() {

   trisd = 0x00;
   trisb = 0xFF;
   portd=0xff;
   enable_interrupts(int_EXT);
   ext_int_edge(H_TO_L);  // Chọn ngắt theo sườn âm
   enable_interrupts(GLOBAL);
   mode = 0;
while (1) {
   switch(mode) {
      case 1: program1(); break;
      case 2: program2(); break;
      case 3: program3(); break;
      case 4: program4(); break;
      case 5: program5(); break;
      case 6: program6(); break;
      case 7: program7(); break;
      case 8: program8(); break;
   }
}
}

void program1() {

 PortD = 0x00;
   delay_ms(250);
   Portd = 0xFF;
   delay_ms(250);
}
void program2() { // LED sáng chạy từ trái qua phải
   temp = 0xFF;
   for (i=0;i<=8;i++) {
      portd = temp;
      delay_ms(250);
      temp >>= 1;
   }
}
void program3() { // LED sáng chạy từ phải qua trái
    temp = 0xFF;
   for (i=0;i<=8;i++) {
      portd = temp;
      delay_ms(250);
      temp <<= 1;
   }
}
void program4() {
   portd = 0xAA;
   delay_ms(500);
   portd = 0x55;
   delay_ms(500);
}
void program5() {
   Portd = 0x7E;   delay_ms(150);
   Portd = 0xBD;   delay_ms(250);
   Portd = 0xDB;   delay_ms(150);
   Portd = 0xE7;   delay_ms(150);
   Portd = 0xDB;   delay_ms(150);
   Portd = 0xBD;   delay_ms(150);
   Portd = 0x7E;   delay_ms(150);
}
void program6() {
  temp = 0xFF;
   for (i=0;i<=8;i++) {
      portd = temp;
      delay_ms(250);

 temp = temp >> 1;
   }
}
void program7() {

   Portd = 0xFE;   delay_ms(150);
   Portd = 0xFD;   delay_ms(150);
   Portd = 0xFB;   delay_ms(150);
   Portd = 0xF7;   delay_ms(150);
   Portd = 0xEF;   delay_ms(150);
   PortD = 0xDF;   delay_ms(150);
   Portd = 0xBF;   delay_ms(150);
   Portd = 0x7F;   delay_ms(150);
}

void program8() {
   Portd = 0x7F;   delay_ms(150);
   Portd = 0xBF;   delay_ms(150);
   PortD = 0xDF;   delay_ms(150);
   Portd = 0xEF;   delay_ms(150);
   Portd = 0xF7;   delay_ms(150);
   Portd = 0xFB;   delay_ms(150);
   Portd = 0xFD;   delay_ms(150);
   Portd = 0xFE;   delay_ms(150);
}
Phạm Văn Ngọc Anh- 01644326695

Author Name

{picture https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjN0PUWA2genMqX3Sm26mBTX_30OJgDenoIi4K6BR-E1vl3nI7LALp0X759QZgzqrMcGBB7jEbdZnubJbp4n2ZZ22KT196CWCg9DLs3MfEivocdmkjZEPEn-A42hyphenhyphen9dmsca0VIDQr_LjqM/s512-Ic42/pham-van-ngoc-anh.jpg}

Tôi là Ngọc Anh. Tôi đến từ Nghệ An. Tôi tốt nghiệp một trường đại học tại Sài Gòn. Hiện tôi đang phát triển công ty riêng. Liên lạc với tôi qua:

{facebook https://www.facebook.com/phamvanngocanh}
{twitter https://twitter.com/nghiphong1993}
{google https://plus.google.com/+dientuchiase/posts}
{youtube https://www.youtube.com/channel/UCeJKhA_goBNFmDw6RKNtmYQ}

Biểu mẫu liên hệ

Tên

Email *

Thông báo *

Được tạo bởi Blogger.