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 (2.55 MB, 79 trang )
}
Main ( )
{...}
2. Các hàm cơ bản trong CCS C
a. Khai báo các thư viện,phần cứng
- #include <16f877a.h > : khai báo về thư viện pic sử dụng dùng cho việc cấu hình
cho PIC , ví dụ pic16f877a
-
#include def_877a.h: Files do người lập trình tạo ra, chứa khai báo về các thanh
ghi . trong PIC giúp cho viêc lập trình được dễ dang hơn ví dụ ta co thể gán
PORTB = 0xff; sử dụng tên các thanh ghi trong pic
-
#device *=16 ADC = 10: Khai báo dùng con trỏ 8 hay 16 bit, bộ ADC là 8 hay 10
bit
-
#FUSES NOWDT, HS,NOPROTECT ,…: Khai báo về cấu hình cho PIC
HS: sử dụng thạch anh tần số cao >4MHz
NOWDT: không sử dụng watch dog timer
NOPROTECT: không bảo vệ code
-
#use delay(clock=20000000): Tần số thạch anh sử dụng
-
#use rs232 (baud=9600,…): Khai báo cho giao tiếp nối tiếp RS232
-
#use i2c(master, SDA=PIN_C4,…): Khai báo dùng I2C, chế độ hoạt động
-
#include
ví dụ LCD_lib_4bit.c
b. Các hàm xuất nhập I/O input/output
- set_tris_x (value) : hàm thiết lập port x là input hay output. Value có thể là số
hexa hoặc bit. Mỗi bit tương ứng với mỗi pin của port là bit 1 là pin input và là 0
tương ứng với pin output
-
output_high (pinx) : thiết lập pin x ở múc cao 1 vd: output_high(PIN_A1);
-
output_low (pinx) : thiết lập pin x ở múc thấp 0 vd: output_low(PIN_A1);
-
output_a (value): xuất ra port a , value là hexa 0x23 or bit 0b00001111, tương
ứng mỗi bit là 0 hay 1thì
mỗi pin của port a là low hay high vd:
OUTPUT_B(0xf0);
c. các hàm ngắt
-
enable_interrupts (level) : cho phép ngắt level hoạt động
vd: enable_interrupts(GLOBAL);
enable_interrupts(INT_TIMER0);
// cho phép ngắt toàn cục
// cho phép ngắt timer0
enable_interrupts(INT_TIMER1);
-
ext_int_edge (source, edge) : chọn cạnh xung tín hiệu ngắt là từ thấp lên cao
(L_TO_H) hay từ cao xuống thấp (H_TO_L) vd: ext_int_edge( 2, L_TO_H); //
Set up PIC18 EXT2
-
disable_interrupts (level) : không cho phép ngắt hoạt dộng
vd: disable_interrupts(INT_RDA); // RS232 OFF
d. các hàm sử dụng bộ định thời timer
-
setup_timer_0 (mode) : thiết lập lựa chọn xung clock đưa vào bộ timer 0
mode: RTCC_INTERNAL, RTCC_EXT_L_TO_H or RTCC_EXT_H_TO_L ,
RTCC_DIV_2, RTCC_DIV_4, RTCC_DIV_8, RTCC_DIV_16, RTCC_DIV_32,
RTCC_DIV_64, RTCC_DIV_128, RTCC_DIV_256
vd: setup_timer_0 (RTCC_DIV_2|RTCC_EXT_L_TO_H);
-
set_timer0( ) : thiết lập giá trị cho bộ timer 0
vd: set_timer0(12);
-
get_timer0() : lấy giá trị hiện tại của bộ timer 0
vd: value=get_timer0() ;
tương tự khai báo các bộ timer khác: timer1, timer2 ,timer5
e. Các hàm sử dụng modul power pwm
- setup_power_pwm(modes,
postscale,
time_base,
period,
compare,
compare_postscale, dead_time); thiết lập các thông số cho bộ power pwm
modes: thiết lập giá trị về xung clock
PWM_CLOCK_DIV_4, PWM_CLOCK_DIV_16,PWM_CLOCK_DIV_64,
PWM_CLOCK_DIV_128
PWM_OFF, PWM_FREE_RUN, PWM_SINGLE_SHOT,
PWM_UP_DOWN, PWM_UP_DOWN_INT, PWM_OVERRIDE_SYNC
PWM_UP_TRIGGER, PWM_DOWN_TRIGGER
PWM_UPDATE_DISABLE, PWM_UPDATE_ENABLE
PWM_DEAD_CLOCK_DIV_2,
PWM_DEAD_CLOCK_DIV_4,PWM_DEAD_CLOCK_DIV_8,PWM_DEAD_C
LOCK_DIV_16
postscale : có giá trị từ 1 đến 16 , giá trị chia tần sau của bộ timer định cycle cho
pwm
time_base :giá trị từ 0 đến 65535. đây là giá trị ban đầu của PWM base
period : giá trị từ 0 đến 4095. nó sẽ tăng cho tới khi đạt tới giá trị này của PWM
time base
compare : giá trị từ 0 đến 255. giá trị của PWM time base sẽ so sánh với một số
xác định nếu bằng thì tạo ra sự kiện ngắt
compare_postscale :giá trị nằm từ 1 đến 16. Giá trị chia trước này sẽ được so sánh
và gây ra sự kiện ngắt.
dead_time :là số nguyên từ 0 đến 63. cái giá trị này sẽ qui định khoảng thời gian
tắt khi đó nó chèn vào giữa thời điển có xung của chân bỏ xung ở chế độ
complementary .
-
setup_power_pwm_pins(module0,module1,module2,module3) : thiết lập chế độ
pwm cho các chân
gồm:
PWM_OFF,
// off chế độ pwm
PWM_ODD_ON, // chỉ xuất xung pwm ở pwm1,pwm3,pwm5,pwm7
PWM_BOTH_ON,
PWM_COMPLEMENTARY
// xuất cặp xung nghịch đảo ở 2 chân
pwm của 1 modul vd pwm 0 và pwm1
Vd: setup_power_pwm_pins(PWM_OFF, PWM_OFF, PWM_OFF, PWM_OFF);
setup_power_pwm_pins(PWM_COMPLEMENTARY,
PWM_COMPLEMENTARY, PWM_OFF, PWM_OFF);
-
set_pwmx_duty(value ) : xuất xung có giá trị điều xung value của kênh pwm x
duty cycle = value / [ 4 * (PR2 +1 ) ]
vd : set_pwm1_duty(600);
f. Các hàm sử dụng modul chuyển đổi ADC
-
setup_adc (mode) : thiết lập xung clock cho chuyển đổi ADC
mode gồm:
• ADC_OFF // tắt off chế độ ADC
• ADC_CLOCK_INTERNAL // chọn xung clock nội lấy từ thach
anh
• ADC_CLOCK_DIV_32
// tỉ lệ chia clock đầu vào bộ
ADC
- setup_adc_ports (value) : chọn chân pin làm đầu vào bộ chuyển đổi ADC
vd :setup_adc_ports( ALL_ANALOG ); // tất cả các chân làm chân input ADC
setup_adc_ports( A0_RA1_ANALOGRA3_REF ); A0,A1 là input ADC,
RA3 là pin điện áp so sánh Vref
-
set_adc_channel(x); chọn kênh đầu vào ADC để đọc x= 0,1,2…..
vd: set_adc_channel(1);
-
read_adc ([mode]) : đọc giá trị ADC ở pin adc được chọn
mode gồm:
ADC_START_AND_READ (đọc liên tục , đây là chế độ mặc định)
ADC_START_ONLY (bắt đầu chuyển đổi và trả lại kết quả)
ADC_READ_ONLY (đọc sau khi chuyển đổi kết quả)
Vd: value=read_adc(ADC_READ_ONLY);
g. Hàm delay
Tạo trễ thời gian
-
delay_cycles (count ) : count từ 1-255 là số chu kỳ lệnh tạo trễ
-
delay_us (time) : time từ 0->65535 tời gian tinh theo us
vd : delay_us(100); trễ 100 us
-
delay_ms (time) : time từ 0->65535 ,trễ theo ms
vd: delay_ms (1000) ; trễ 1000ms =1s
Chương trình ví dụ điều xung mẫu
#include <18f4431.h>
#fuses NOWDT,HS,NOPROTECT,NOLVP,HPOL_LOW
#use delay( clock =20000000)
#byte TRISB = 0xF93
void main()
{
TRISB=0x00;
setup_power_pwm(PWM_CLOCK_DIV_4|PWM_FREE_RUN,1,0,250,0,1,0);
setup_power_pwm_pins(PWM_ODD_ON,PWM_ODD_ON,PWM_ODD_ON,PWM_O
DD_ON
);
set_power_pwm0_duty(500); // duty = 50%
set_power_pwm2_duty(100); // duty=10%
set_power_pwm4_duty(200); // duty =20%
set_power_pwm6_duty(800); // duty = 80%
WHILE(true)
{
}
}