Tải bản đầy đủ (.pdf) (41 trang)

PHẦN 3: LẬP TRÌNH VỚI CCS - ĐẶNG LÊ KHOA - TRƯỜNG ĐH KHTN - KHOA ĐIỆN TỬ VIỄN THÔNG doc

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 (597.42 KB, 41 trang )

TRƯỜNG ðẠI HỌC KHOA HỌC TỰ NHIÊNTRƯỜNG ðẠI HỌC KHOA HỌC TỰ NHIÊN
KHOA ðIỆN TỬ KHOA ðIỆN TỬ VIỄN THÔNGVIỄN THÔNG
PHẦN 3: LẬP TRÌNH VỚI CCS
1
ðặngðặng LêLê KhoaKhoa
CHƯƠNG 1: CƠ BẢN VỀ CCS
• Ngôn ngữ C
• Cấu trúc cơ bản một chương trình
• Xuất nhập

Hàm delay

Hàm delay
• Lập trình với các vòng lặp và ñiều kiện
• Lập trình với các lệnh logic và số học
2
Ngôn
ngữ C
3
Ngôn ngữ C…
4
Ngôn ngữ C…
5
Ngôn ngữ C…
6
Cấu trúc cơ bản một chương
trình
#include <16F877.h>
#use delay(clock=16000000)
void main(void)
{


//chuong trinh C
}
7
Xuất nhập
8
Ví dụ
VD 1: Xuất giá xuất ra port C giá trị 0x0F
#include <16F877.h>
void main()
{
set_tris_c(0x00);
while(1)
{
output_c(0x0F);
}
}
9
Ví dụ
VD 2: ðọc dữ liệu port D và xuất port C
#include <16F877.h>
void main()
{
char data;
set_tris_c(0x00);
set_tris_d(0xff);
while(1)
{
data = input_d();
output_c(data);
}

}
10
Hàm delay
• Cần có khai báo #use delay ( clock =xxxx)
VD : #use delay ( clock = 20000000 )
• Hàm delay không sử dụng bất kỳ timer nào

Có 3 hàm phục vụ :

Có 3 hàm phục vụ :
delay_cycles (count )
delay_us ( time )
delay_ms (time )
11
Hàm delay….
• 1: delay_cycles (count )
Count : hằng số từ 0 – 255 , là số chu kỳ lệnh .1 chu kỳ lệnh bằng 4
chu kỳ máy .
VD : delay_cycles ( 25 ) ; // với OSC = 20 Mhz , hàm này delay 5 us
• 2: delay_us ( time )
Time : là biến số thì = 0

255 , time là 1 hằng số thì = 0
-
65535 .
Time : là biến số thì = 0

255 , time là 1 hằng số thì = 0
-
65535 .

• 3: delay_ms (time )
Time = 0-255 nếu là biến số hay = 0-65535 nếu là hằng số .
• VD :
int a = 215;
delay_us ( a ) ; // delay 215 us
delay_us ( 4356 ) ; // delay 4356 us
delay_ms ( 2500 ) ; // delay 2 . 5 s
12
Ví dụ
VD 3: Viết chương trình chớp tắt các Led ở port C
#include <16F877.h>
#use delay (clock = 16000000)
void main(void)
{
set_tris_c(0x00);
set_tris_c(0x00);
while(1)
{
output_c(0x00);
delay_ms(500);
output_c(0xff);
delay_ms(500);
}
}
13
Lập trình với các vòng lặp
VD 5: Viết chương trình chớp tắt các Led ở port C 5 lần
#include <16F877.h>
#use delay (clock = 16000000)
void main(void)

{
char i;
set_tris_c(0x00);
for (i=0;i<5;++i)
for (i=0;i<5;++i)
{
output_c(0xff);
delay_ms(500);
output_c(0x00);
delay_ms(500);
}
while(1)
{
}
}
14
Lập trình với ñiều kiện
VD 6: Viết chương trình nếu Port D =0 => xuất Port C
=0xff ngược lại xuất Port C=0x0f
#include <16F877.h>
#use delay (clock = 16000000)
void main(void)
{
char data;
set_tris_c(0x00);
set_tris_d(0xff);
while(1)
{
data=input_d();
if (data==0)

output_c(0xff);
else
output_c(0x0f);
}
}
15
Phép toán logic và số học
VD: Viết chương trình dịch 1 led từ bit thấp ñến bit cao
#include<16f877.h>
#use delay(clock=16000000)
void main()
{
char a,i;
set_tris_c(0x00);
set_tris_c(0x00);
while(1)
{
a=0x01;
for(i=0;i<8;i++)
{
output_c(a);
delay_ms(500);
a<<=1;
}
}
}
16
Bài tập
#include <16F877.h>
#use delay (clock = 16000000)

void main(void)
{
char data,i;
set_tris_c(0x00);
set_tris_d(0xff);
while(1)
{
data=
input_d
();
data=
input_d
();
if (data==0)
{
output_c(0xff);
delay_ms(500);
output_c(0x00);
delay_ms(500);
}
else
output_c(0xff);
}
}
17
CHƯƠNG 2: CHUYỂN ðỔI
TƯƠNG TỰ SANG SỐ (ADC)
• Nguyên tắc hoạt ñộng của ADC
• Cấu hình bộ ADC
• Ví dụ

18
Nguyên tắc hoạt ñộng của ADC
• ADC bộ chuyển ñổi tương tự sang số
• Giá trị xuất ra dạng số phụ thuộc vào ñiện
thế analog, ñiện thế tham chiếu và số bit
của ADC(còn ñược gọi là ñộ phân giải)
của ADC(còn ñược gọi là ñộ phân giải)
• ADC 8 bit có giá trị( 0-255 ) và ADC 10 bit (0-
1023 )
Ví dụ: ADC có 10 bit
ADC = V/VREF * 1023
19
Nguyên tắc hoạt ñộng của ADC…
• Phải có khai báo #DEVICE cho biết dùng
ADC mấy bit (thường là 8 hay 10 bit hoặc
hơn) .

Có thể chuyển giá trị của bộ ADC 10 bit

Có thể chuyển giá trị của bộ ADC 10 bit
thành ADC 8 bit bằng cách chia cho 4
• Có thể lập trình bằng các cập nhật, hay
dùng ngắt ADC
20
Các hàm dùng cho ADC
21
Setup_ADC ( mode )
Dùng xác ñịnh cách thức hoạt ñộng bộ biến ñổi ADC . Xem
chi tiết từng loại PIC khác nhau. Các tham số thông
dụng:

• ADC_OFF : tắt hoạt ñộng ADC

ADC_CLOCK_INTERNAL :
thời
gian
lấy
mẫu
bằng

ADC_CLOCK_INTERNAL :
thời
gian
lấy
mẫu
bằng
xung clock IC ( mất 2-6 us )
• ADC_CLOCK_DIV_2 : thời gian lấy mẫu bằng
xung clock / 2 ( mất 0.4 us trên thạch anh 20MHz )
• ADC_CLOCK_DIV_8 : thời gian lấy mẫu bằng
xung clock / 8 ( 1.6 us )
• ADC_CLOCK_DIV_32 : thời gian lấy mẫu bằng
xung clock / 32 ( 6.4 us )
22
Setup_ADC_ports ( value )
Xác ñịnh chân lấy tín hiệu analog và ñiện thế chuẩn sử dụng .
Xem chi tiết từng loại PIC khác nhau. Vref : áp chuẩn , Vdd :
áp nguồn
Sau ñây là các giá trị thông dụng cho value:
• ALL_ANALOGS : dùng tất cả chân sau làm analog (Vref=Vdd)


NO_ANALOG :
không
dùng
analog,
các
chân
ñó
sẽ

chân
I /O

NO_ANALOG :
không
dùng
analog,
các
chân
ñó
sẽ

chân
I /O
• AN0 : A0
• AN0_AN1_AN3: A0 A1 A3, Vref = Vdd
• AN0_AN1_VSS_VREF: A0 A1 VRefh = A3
• AN0_AN1_AN4_VREF_VREF: A0 A1 A5 VRefh=A3 VRefl=A2
• AN0_AN1_VREF_VREF : A0 A1 VRefh=A3 VRefl=A2
• AN0_VREF_VREF : A0 VRefh=A3 VRefl=A2
• ………

23
Setup_ADC_ports ( value )….
VD :
setup_adc_ports (AN0_AN1_AN3) ;
// A0 , A1 , A3 nhận analog , áp nguồn +5V cấp cho IC sẽ là
ñiện áp chuẩn .
ñiện áp chuẩn .
24
Set_ADC_channel ( channel )
• Chọn chân ñể ñọc vào giá trị analog bằng
lệnh Read_ADC ( ).
• Nên delay 10 us sau hàm này rồi mới
dùng hàm read_ADC ( )
dùng hàm read_ADC ( )
• Giá trị channel tuỳ số chân chức năng
ADC mỗi chip. Thường có giá trị :
• 0-chân A0 , 1-chân A1, 2-chân A2, 3-chân
A3…
25

×