v Nhóm Hàm Phục Vụ Delay
1.
DELAY_CYCLES():
Hàm này được dùng để thực hiện delay một số xung lệnh (instruction clock)
định trước. Một xung lệnh bằng 4 xung dao động
+ Cú pháp:: delay_cycles(count)
+ Tham số: count – hằng số 0~255
+ Trị trả về: không
+ Yêu cầu: không
Ví dụ: delay_cycles(25); //Với xung
clock dao động 20MHz, chương trình sẽ delay 5us
//25 x (4/20000000) = 5us
2.
DELAY_MS()
Hàm này được dùng để thực hiện delay một thời gian định trước. Thới gian
tính bằng milisecond.
Hàm này sẽ thực hiện một số lệnh nhằm delay 1 thời gian yêu cầu. Hàm này
không sử dụng bất kỳ timer nào. Nếu sử dụng ngắt (interupt), thời gian thực hiện
các lệnh trong khi ngắt không được tính vào thới gian delay.
+ Cú pháp: delay_ms(time)
+ Tham số: time - 0~255 nếu time là một biến số, 0~65535 nếu time là hằng
số
+ Trị trả về: không
+ Yêu cầu: #uses delay
3.
.
DELAY_US()
Hàm này được dùng để thực hiện delay một thời gian định trước. Thới gian
tính bằng microsecond. Shorter delays will be INLINE code and longer delays and
variable delays are calls to a function. Hàm này sẽ thực hiện một số lệnh nhằm
delay 1 thời gian yêu cầu. Hàm này không sử dụng bất kỳ timer nào. Nếu sử dụng
ngắt (interupt), thời gian thực hiện các lệnh trong khi ngắt
không được tính vào thới gian delay.
+ Cú pháp: delay_us(time)
+ Tham số: time - 0~255 nếu time là một biến số, 0~65535 nếu time là hằng
số
+ Trị trả về: không
+ Yêu cầu: #uses delay
v Nhóm Hàm Timer và Counter:
4.
RESTART_WDT():
Hàm này được dùng để Khởi động lại watchdog timer.
+ Cú pháp:: restart_wdt()
+ Tham số: không
+ Trị trả về: không
+ Yêu cầu: #fuses
5.
SETUP_WDT():
Hàm này được dùng để định chế độ hoạt động cho watchdog timer.
+ Cú pháp: setup_wdt(mode)
+ Tham số: Mode có thể là một trong các hằng số sau
WDT_18MS
WDT_36MS
WDT_72MS
WDT_144MS
WDT_288MS
WDT_576MS
WDT_1152MS
WDT_2304MS
+ Trị trả về: không
+ Yêu cầu: #fuses
các hằng số phải được định nghĩa trong device file PIC16F876.h
6.
. SETUP_COUNTRES()
Hàm này được dùng để Set up RTCC hay WDT
+ Cú pháp:
setup_counters(rtcc_state, ps_state)
+ Tham số: rtcc_state – hằng số, được định nghĩa như sau
RTCC_INTERNAL
RTCC_EXT_L_TO_H 32
RTCC_EXT_H_TO_L 48
ps_state– hằng số, được định nghĩa như sau
RTCC_DIV_2 0
RTCC_DIV_4 1
RTCC_DIV_8 2
RTCC_DIV_16 3
RTCC_DIV_32 4
RTCC_DIV_64 5
RTCC_DIV_1286
RTCC_DIV_2567
RTCC_8_BIT 0
WDT_18MS 8
WDT_36MS 9
WDT_72MS 10
WDT_144MS 11
WDT_288MS 12
WDT_576MS 13
WDT_1152MS 14
WDT_2304MS 15
+ Trị trả về: không trả về
+ Yêu cầu: các hằng số phải được định nghĩa trong device file .h
7.
GET_RTCC(),
GET_TIMER0()
Hàm này được dùng để trả về giá trị biến đếm của real time clock/counter.
Khi giá trị timer vượt
quá 255, value được đặt trở lại 0 và đếm tiếp tục (…, 254, 255, 0, 1, 2,
…)
+ Cú pháp:: value = get_rtcc()
value = get_timer0()
+ Tham số: không
+ Trị trả về: 8 bit int 0~255
+ Yêu cầu: không
8.
SET_RTCC(),
SET_TIMER0()
Hàm này được dùng để đặt giá trị ban đầu cho real time clock/counter. Tất
cả các biến đều đếm
tăng. Khi giá trị timer vượt quá 255, value được đặt trở lại 0 và đếm tiếp
tục (…, 254, 255, 0, 1, 2,
…)
+ Cú pháp: set_rtcc()
set_timer0()
+ Tham số: 8 bit, value =
0~255
+ Trị trả về: không
+ Yêu cầu: không
9.
SETUP_TIMER1()
Hàm này được dùng để khởi động timer 1. Sau đó timer 1 có thể được ghi hay
đọc dùng lệnh set_timer1() hay get_timer1(). Timer 1 là 16 bit timer. Với xung
clock là 20MHz, timer 1 tăng 1 đơn vị sau mỗi 1,6us (khi ta dùng chế độ
T1_DIV_BY_8) và tràn sau 104,8576ms.
+ Cú pháp: setup_timer_1(mode)
+ Tham số: mode - tham số như sau
T1_DISABLED : tắt timer1
T1_INTERNAL : xung clock của
timer1 bằng ¼ xung clock nội của IC (OSC/4)
T1_EXTERNAL : lấy xung ngoài qua
chân C0 (không ở chế độ đồng bộ)
T1_EXTERNAL_SYNC : lấy xung ngoài qua chân C0 ở chế độ động bo (khi ở chế
độ này nếu CPU ở chế độ SLEEP
T1_CLK_OUT : enable xung clock ra
T1_DIV_BY_1
:65536-(samplingtime(s)/(4/20000000)) timemax=13.1ms
T1_DIV_BY_2
:65536-(samplingtime(s)/(8/20000000)) timemax=26.2ms
T1_DIV_BY_4 : 65536-(samplingtime
(s)/(16/20000000))timemax=52.4ms
T1_DIV_BY_8
:65536-(samplingtime(s)/(32/20000000))timemax=104.8ms
+ Trị trả về: không
+ Yêu cầu: các hằng số phải được định nghĩa trong device file .h
10.
GET_TIMER1()
Hàm này được dùng để trả về giá trị biến đếm của real time clock/counter.
Khi giá trị timer vượt quá 65535, value được đặt trở lại 0 và đếm tiếp tục (…,
65534, 65535, 0, 1, 2, …)
+ Cú pháp:: value =
get_timer1()
+ Tham số: không
+ Trị trả về: 16 bit int 0~65535
+ Yêu cầu: không
11.
SET_TIMER1()
Hàm này được dùng để đặt giá trị ban đầu cho real time clock/counter. Tất
cả các biến đều đếm tăng. Khi giá trị timer vượt quá 65535, value được đặt trở
lại 0 và đếm tiếp tục (…, 65534, 65535, 0, 1, 2, …)
+ Cú pháp:: set_timer1()
+ Tham số: 16 bit, value =
0~65535
+ Trị trả về: không
+ Yêu cầu: không
12.
SETUP_TIMER2()
Hàm này được dùng để khởi động timer 2. mode qui định số chia xung clock.
Sau đó timer 2 có thể được ghi hay đọc dùng lệnh set_timer2() hay get_timer2().
Timer 1 là 8 bit counter/timer.
+ Cú pháp: setup_timer_2(mode,period,postscale)
+ Tham số: mode - tham số như sau
T2_DISABLED : tắt timer2
T2_DIV_BY_1 :
T2_DIV_BY_4 :
T2_DIV_BY_16 :
Period – 0~255 qui định khi giá trị clock được reset
Postscale – 1~16 qui định số lần reset timer trước khi ngắt (interupt)
+ Trị trả về: không
+ Yêu cầu: các hằng số phải được định nghĩa trong device file PIC16F876.h
13.
GET_TIMER2()
Hàm này được dùng để trả về giá trị biến đếm của real time clock/counter.
Khi giá trị timer vượt quá 255, value được đặt trở lại 0 và đếm tiếp tục (…,
254, 255, 0, 1, 2, …)
Cú pháp: value = get_timer2()
Tham số: không
Trị trả về: 8 bit int 0~255
Yêu cầu: không
14.
SET_TIMER2()
Hàm này được dùng để đặt giá trị ban đầu cho real time clock/counter. Tất
cả các biến đều đếm tăng. Khi giá trị timer vượt quá 255, value được đặt trở lại
0 và đếm tiếp tục (…, 254, 255, 0, 1, 2, …)
+ Cú pháp: set_timer2(value)
+ Tham số: 8 bit, value = 0~255
+ Trị trả về: không
+ Yêu cầu: không
v Nhóm Hàm Quản Lý ADC
15.
SETUP_ADC():
Hàm này được dùng để định cấu hình cho bộ biến
đổi A/D
+ Cú pháp: setup_adc(mode)
+ Tham số: mode – mode chuyển đổi Analog ra Digital bao gồm
ADC_OFF: tắt chức năng sử dụng A/D
ADC_CLOCK_INTERNAL: thời gian lấy mẫu bằng clock, clock là thời gian clock
trong IC
ADC_CLOCK_DIV_2: thời gian lấy mẫu bằng clock/2
ADC_CLOCK_DIV_8: thời gian lấy mẫu bằng clock/8
ADC_CLOCK_DIV_32: thời gian lấy mẫu bằng clock/32
+ Trị trả về: không
+ Yêu cầu: các hằng số phải được định nghĩa trong device file .h
16.
SETUP_ADC_PORT():
Hàm này được dùng để xác định cổng dùng để nhận tín hiệu analog
+ Cú pháp: setup_adc_ports(value)
+ Tham số: value – hằng số được định nghĩa như sau
NO_ANALOGS : không sử
dụng cổng analog
ALL_ANALOG : RA0 RA1
RA2 RA3 RA5 RE0 RE1 RE2 Ref=Vdd
ANALOG_RA3_REF : RA0 RA1 RA2 RA5 RE0 RE1 RE2 Ref=RA3
A_ANALOG : RA0
RA1 RA2 RA3 RA5 Ref=Vdd
A_ANALOG_RA3_REF : RA0 RA1
RA2 RA5 Ref=RA3
RA0_RA1_RA3_ANALOG : RA0 RA1
RA3 Ref=Vdd
RA0_RA1_ANALOG_RA3_REF : RA0 RA1
Ref=RA3
ANALOG_RA3_RA2_REF : RA0 RA1
RA5 RE0 RE1 RE2 Ref=RA2,RA3
ANALOG_NOT_RE1_RE2 : RA0 RA1
RA2 RA3 RA5 RE0 Ref=Vdd
ANALOG_NOT_RE1_RE2_REF_RA3 : RA0 RA1 RA2 RA5 RE0 Ref=RA3
ANALOG_NOT_RE1_RE2_REF_RA3_RA2 : RA0 RA1 RA5 RE0 Ref=RA2,RA3
A_ANALOG_RA3_RA2_REF : RA0 RA1
RA5 Ref=RA2,RA3
RA0_RA1_ANALOG_RA3_RA2_REF : RA0 RA1 Ref=RA2,RA3
RA0_ANALOG : RA0
RA0_ANALOG_RA3_RA2_REF : RA0
Ref=RA2,RA3
+ Trị trả về: không
+ Yêu cầu: các hằng số phải được định nghĩa trong device file PIC16F876.h
Ví dụ:
setup_adc_ports(ALL_ANALOG) : dùng tất cả
các pins để nhận tín hiệu analog.
setup_adc_ports(RA0_RA1_RA3_ANALOG) : dùng pin A0, A1 và A3 để nhận tín hiệu
analog. Điện áp nguồn cấp cho IC được dùng làm điện áp chuẩn.
setup_adc_ports(A0_RA1_ANALOGRA3_REF) : dùng pin A0 và A1 để nhận tín hiệu
analog. Điện áp cấp vào pin A3 được dùng làm điện áp chuẩn.
17.
SETUP_ADC_CHANNEL()
Hàm này được dùng để xác định pin để đọc giá trị Analog bằng lệnh
READ_ADC()
+ Cú pháp::
setup_adc_channel(chan)
+ Tham số: chân : 0~7 – chọn
pin để lấy tín hiệu Analog bao gồm
1 : pin A0
2 : pin A1
3 : pin A2
4 : pin A5
5 : pin E0
6 : pin E1
7 : pin E2
+ Trị trả về: không
+ Yêu cầu: không
18.
READ_ADC()
Hàm này được dùng để đọc giá trị Digital từ bộ biến đổi A/D. Các hàm setup_adc(),
setup_adc_ports() và set_adc_channel() phải được dùng trước khi dùng hàm
read_adc(). Đối với PIC16F877, bộ A/D mặc định là 8 bit. Để sử dụng A/D 10 bit
ta phải dung thêm lệnh #device
PIC16F877 *=16 ADC=10 ngay từ đầu chương trình.
+ Cú pháp: value = read_adc()
+ Tham số: không
+ Trị trả về: 8 hoặc 10 bit
value = 0~255 nếu dùng A/D 8 bit
(int)
value = 0~1023 nếu dùng A/D 10
bit (long int)
+ Yêu cầu: không
19.
SETUP_VREF()
Hàm này được dùng để thiết lập điện áp chuẩn bên trong MCU cho bộ analog compare
hoặc cho ngõ ra ở chân A2
+ Cú pháp: setup_vref(mode/value)
+ Tham số: mode gồm một trong các hằng số sau
FALSE (off)
VREF_LOW for VDD*VALUE/24
VREF_HIGH for VDD*VALUE/32 + VDD/4
any may be or'ed with VREF_A2.
value is an int 0-15.
+ Trị trả về: không
+ Yêu cầu: các hằng số phải được định nghĩa trong device file PIC16F87x .h
v Nhóm Hàm Quản Lý Truyền Thông RS-232:
20.
GETC(), GETCH(),
GETCHAR()
Hàm này được dùng để đợi nhận 1 ký tự từ pin RS232 RCV. Nếu không muốn đợi
ký tự gởi về,
dùng lệnh kbhit().
+ Cú pháp:: ch = getc()
ch = getch()
ch = getchar()
+ Tham số: không
+ Trị trả về: ký tự 8 bit
+ Yêu cầu: #use rs232
Ví dụ: #include <16f877.h>
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)
char answer;
void main()
{
printf("Continue (Y,N)?");
do
{
answer=getch();
} while(answer!='Y' && answer!='N');
}
21.
GETS()
Hàm này được dùng để đọc các ký tự (dùng GETC()) trong chuỗi cho đến khi gặp
lệnh RETURN (giá trị 13).
+ Cú pháp:: gets(char *string)
+ Tham số: string là con trỏ
(pointer) chỉ đến dãy kí tự
+ Trị trả về: không
+ Yêu cầu: #use rs232
Ví dụ: #include <16f877.h>
#include <string.h>
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)
char string[30];
void main()
{
printf("Input string: ");
gets(string);
printf("\n\r");
printf(string);
}
22.
PUTC(),
PUTCHAR()
Hàm này được dùng để gởi một ký tự thông qua pin RS232 XMIT. Phải dùng
#USE RS232 trước khi thực hiện lệnh này để xác định tốc độ (baud rate) và pin
truyền.
+ Cú pháp: putc(cdata)
putchar(cdata)
+ Tham số: cdata là ký tự 8 bit
+ Trị trả về: không
+ Yêu cầu: #use rs232
Ví dụ: #include <16f877.h>
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)
int i;
char string[10];
void main()
{
strcpy(string,"Hello !");
for(i=0; i<10; i++) putc(string[i]);
//copy “Hello !” to string
//put each charater of string onto screen
}
23.
PUTS()
Hàm này được dùng để gởi mỗi ký tự trong chuỗi đến pin RS232 dùng PUTC().
Sau khi chuỗi được gởi đi thì RETURN (13) và LINE-FEED (10) đuợc gởi đi. Lệnh
printf() thường dùng hơn lệnh puts().
+ Cú pháp: puts(string)
+ Tham số: string là chuỗi hằng (constant string) hay dãy ký tự (character
array)
+ Trị trả về: không
+ Yêu cầu: #use rs232
Ví dụ: Dùng PUTS()
#include <16f877.h>
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)
void main()
{
puts(" ------------- ");
puts(" | Hello | ");
puts(" ------------- ");
}
Dùng PRINTF()
#include <16f877.h>
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)
void main()
{
printf(" ------------- \n\r");
printf(" | Hello | \n\r");
printf(" ---------------");
}
. . .
~> Còn nữa bạn nhé ! 9h tối nay t up tiếp. ^^
0 nhận xét:
Đăng nhận xét