THƯ VIỆN ĐIỆN TỬ
Nếu đây là lần đầu tiên ghé thăm diễn đàn, xin mời bạn xem phần hỏi/đáp để biết cách dùng diễn đàn. Nếu
bạn chỉ là khách tới thăm mà chưa phải là thành viên của THUVIENDIENTU, bạn vẫn có thể xem đầy đủ tất
cả các bài viết. Để có thể gửi bài viết, câu hỏi và tham gia thảo luận cùng chúng tôi, bạn hãy Đăng kí ở đây.
THƯ VIỆN ĐIỆN TỬ
Nếu đây là lần đầu tiên ghé thăm diễn đàn, xin mời bạn xem phần hỏi/đáp để biết cách dùng diễn đàn. Nếu
bạn chỉ là khách tới thăm mà chưa phải là thành viên của THUVIENDIENTU, bạn vẫn có thể xem đầy đủ tất
cả các bài viết. Để có thể gửi bài viết, câu hỏi và tham gia thảo luận cùng chúng tôi, bạn hãy Đăng kí ở đây.
THƯ VIỆN ĐIỆN TỬ
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

THƯ VIỆN ĐIỆN TỬ


 
Trang ChínhTrang Chính  Latest imagesLatest images  Tìm kiếmTìm kiếm  Đăng kýĐăng ký  Đăng NhậpĐăng Nhập  

 

 Học lập trình CCS cơ bản dành cho Vi Điều Khiển PIC

Go down 
2 posters
Tác giảThông điệp
dientu




Tổng số bài gửi : 5
Reputation : 0
Join date : 21/08/2010

Học lập trình CCS cơ bản dành cho Vi Điều Khiển PIC Empty
Bài gửiTiêu đề: Học lập trình CCS cơ bản dành cho Vi Điều Khiển PIC   Học lập trình CCS cơ bản dành cho Vi Điều Khiển PIC I_icon_minitimeSun Aug 22, 2010 12:14 pm

BÀI 1

Ví dụ mở đầu :

#include <16f887.h>
#FUSES HS, NOWDT, NOPROTECT //HS : Thach anh
#use delay (clock = 20mhz)

int i,j; //Bien toan cuc
int tinh-trung-binh (char x, char y); // chuong trinh con
void init();
void main (void) //Chuong trinh chinh
{
init();
While (1);
}
void init()
{

}

 Output : Xuất một mức logic cho ngõ ra
• Output_x (Giá trị);
Ex: Output_a (0b11110000); (A0 -> A3 : 0 ; A4 -> A7 : 1)
0b : Binary
0x : Hex
Char x= 100;
Char y = 99;
(unsigned int) x*y = 9900 (ép kiểu do char <9900)
• Output_bit (PIN_X, value);
output_bit (PIN_B4, 1);
output_bit (PIN_C1, 0);
• Output_high (PIN_X);
Output_high (PIN_B4);
• Output_low (PIN_X);
Output_high (PIN_C1);
• Output_toggle (PIN_X);
Output_toggle (PIN_C1);
• Ví dụ 1:
Viết chương trình :
Sáng chân C1
Delay_ms (2000);
Tắt
#include <16f887.h>
#FUSES HS, NOWDT, NOPROTECT
//HS : Thach anh
#use delay (clock = 20M)

void main (void) //Chuong trinh chinh
{
output_high (PIN_C1);
delay_ms(2000);
output_low (PIN_C1);
}

Note : Để biên dịch phải chuột vào Source Files -> Add Files : Chọn file đang sử dụng. Sau đó vào Project -> Build All (Hoặc click vào icon Build All)
Vào proteus chọn pic16f887 rồi thiết lập 2 thông số : Processor Clock Frequency & Program File.
Ở Processor Clock Frequency chọn 20MHz.
ProgramFile chọn file hex đang sử dụng.


Học lập trình CCS cơ bản dành cho Vi Điều Khiển PIC 1282452877811528751_574_574

Ráp mạch Proteus như hình vẽ

Học lập trình CCS cơ bản dành cho Vi Điều Khiển PIC 12824528781197235406_574_574

• Ví dụ 2: (Về nhà)
Viết chương trình :
Sáng chân C1
Chớp tắt trong 500ms





BÀI 2

 Input
• input_x(); Kiểm tra trạng thái ngõ vào các chân port x
• input(PIN_X); Kiểm tra giá trị ngõ vào chân x
Ex: input(PIN_B4)
Ví dụ :

Học lập trình CCS cơ bản dành cho Vi Điều Khiển PIC 12824528761137274150_574_574

Nhấn nút lần 1 đèn sáng, nhấn lần nữa đèn tắt.
#include <16f887.h>
#FUSES HS, NOWDT, NOPROTECT
#use delay (clock = 20M)
short nutnhan;
void main (void) //Chuong trinh chinh
{
while(1)
{
if (!input(PIN_B4)&&(nutnhan==0))
{
output_toggle(PIN_C1);
nutnhan=1;
}
if (input(PIN_B4))
nutnhan=0;
}
}

 Ngắt ngoài (RB0)
• Ngắt trên chân BO tác động ở cạnh xuống.
• Khai báo ngắt : #INT_EXT
Ex: void ngat()
{
Output_high (PIN_C1);
}
void main()
{
Enable_interrupts(INT_EXT);
Enable_interrupts(GLOBAL);
While(1);
}
• Lệnh cho phép ngắt
enable_interrupts (INT_EXT);
enable_interrupts(GLOBAL);
• Lệnh khóa ngắt
disable_interrupts (INT_EXT);
disable_interrupts (GLOBAL);
• Ví dụ :
Bình thường : Đèn RC1 chớp tắt
Nhấn RB0 : đèn đổi trạng thái

#include <16f887.h>
#FUSES HS, NOWDT, NOPROTECT
#use delay (clock = 20M)
#INT_EXT
void ngat()
{
output_toggle(PIN_A0);
}
void main()
{
output_low(PIN_A3);
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
while(1)
{
output_toggle(PIN_C1);
delay_ms(500);
}
}


BÀI 3

• ON CHANGE PORT B (B4 – B7)
• Ví dụ : Khi có sự thay đổi trên các chân từ B4 – B7 thì ngắt xảy ra.
Khai báo ngắt : INT_RB (INT_EXT)
B4 : Chớp tắt xen kẽ
B5 : Chớp đồng thời
B6 : Tắt tất cả
Khoảng thời gian chớp tắt là 1000ms

Học lập trình CCS cơ bản dành cho Vi Điều Khiển PIC 1282452879133806957_574_574

#include <16f887.h>
#FUSES HS, NOWDT, NOPROTECT
#use delay (clock = 20M)
char kieu_led;
#INT_RB

void ngat()
{
if(!input(PIN_B4))
kieu_led=1;
else if(!input(PIN_B5))
kieu_led=2;
else if(!input(PIN_B6))
kieu_led=0;
}
void main()
{
output_low(PIN_A0);
output_high(PIN_A1);
enable_interrupts(INT_RB);
enable_interrupts(GLOBAL);
while(1)
{
switch (kieu_led)
{
case 0 :

output_low(PIN_A0);
output_high(PIN_A1);
break;

case 1 :

output_toggle(PIN_A0);
output_bit(PIN_A1, input(PIN_A0));
break;

case 2 :

output_toggle(PIN_A0);
output_bit(PIN_A1, !input(PIN_A0));
break;

}
}
delay_ms(1000);
}



 LCD
• Kết nối chân với vi điều khiển
Linh kiện PROTEUS : LCD -> LM016L

Học lập trình CCS cơ bản dành cho Vi Điều Khiển PIC 1282452881979502646_574_574

Mở PICC->Drivers->lcd.c
Thay đổi chân :
// D0 enable -> unused
// D1 rs
// D2 rw
// D3 Enable
// D4 D4
// D5 D5
// D6 D6
// D7 D7
Thay đổi struct :
struct lcd_pin_map {
BOOLEAN enable;
BOOLEAN rs;
BOOLEAN rw;
BOOLEAN unused;
->
BOOLEAN unused;
BOOLEAN rs;
BOOLEAN rw;
BOOLEAN enable;

Học lập trình CCS cơ bản dành cho Vi Điều Khiển PIC 12824528751565956760_574_574Học lập trình CCS cơ bản dành cho Vi Điều Khiển PIC 12824528761807392765_574_574


 Output : Xuất một mức logic cho ngõ ra
• Các lệnh dùng lcd
- #include <lcd.c> (Phải để sau delay)
- Thiết lập ban đầu cho lcd
Lcd_init();
- Đến vị trí x,y để hiển thị
Lcd_gotoxy (x,y);
Ex:
Lcd_gotoxy(1,1);
Lcd_gotoxy (8,2);
- Hiển thị chuỗi : lcd_putc (“Chuỗi…”);
Lcd_putc(“\f”); (Xóa màn hình + Chuỗi gõ (Gần giống lệnh Write))
- Hiển thị giá trị được lưu trong biến : value -> int
o Printf (lcd_putc, “value = %d quả”, value);
 Value = 10 quả
- Hiển thị tên lên giữa màn hình lcd
#include <16f887.h>
#FUSES HS, NOWDT, NOPROTECT
#use delay (clock = 20M)
#include <lcd.c>

void main()

{

while(1)
{
lcd_init();
lcd_gotoxy (1,1);
lcd_putc ("\f LE HONG QUANG ");
delay_ms(500);
lcd_putc ("\f PIC ");
delay_ms(500);
}
}
Về Đầu Trang Go down
kid_boy




Tổng số bài gửi : 1
Reputation : 0
Join date : 18/03/2011

Học lập trình CCS cơ bản dành cho Vi Điều Khiển PIC Empty
Bài gửiTiêu đề: Re: Học lập trình CCS cơ bản dành cho Vi Điều Khiển PIC   Học lập trình CCS cơ bản dành cho Vi Điều Khiển PIC I_icon_minitimeFri Mar 18, 2011 10:17 pm

bài viết quá bổ ích, nữa đi bạn, mình có nhiều chổ không hiểu lắm, chỗ ngắt ngoài đó bạn? bạn giải thích kỹ lại từng dòng được ko? chân thành cảm ơn rất nhiều. ^^
Về Đầu Trang Go down
 
Học lập trình CCS cơ bản dành cho Vi Điều Khiển PIC
Về Đầu Trang 
Trang 1 trong tổng số 1 trang
 Similar topics
-
» Kiến trúc vi điều khiển 8051
» Điều khiển led 7 thanh dùng 8051
» Bộ Mạch Điện Tử Điều Khiển Bấm Chuông Đèn Trò Chơi Game Show
» dieu khien dong co

Permissions in this forum:Bạn không có quyền trả lời bài viết
THƯ VIỆN ĐIỆN TỬ :: Kỹ Thuật Vi Xử Lý :: Vi Điều Khiển PIC-
Chuyển đến