1. Trang chủ >
  2. Kỹ thuật >
  3. Điện - Điện tử - Viễn thông >

Hình 77: Xem chương trình dạng asembly

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 :Khai báo các files thư viện được sử dụng

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)

{

}

}



Xem Thêm
Tải bản đầy đủ (.docx) (79 trang)

×