1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

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

36 512 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 36
Dung lượng 277,8 KB

Nội dung

• ext_int_edge Enables the edge on which • ext_int_edge Enables the edge on which the edge interrupt should trigger.. • clear_interrupt This function will clear the specified interrupt f

Trang 1

TR ƯỜ NG ðẠ I H Ọ C KHOA H Ọ C T Ự NHIÊN

TR ƯỜ NG ðẠ I H Ọ C KHOA H Ọ C T Ự NHIÊN

Trang 5

Ng ắ t 1 c ấ p…

xác ñịnh cờ ngắt cần phục vụ, nó sẽ thực thi

xoá cờ ngắt ñó

5

Trang 6

Ng ắ t 2 c ấ p

cao ( high priority )

Trang 9

• #INT_RB : b ấ t k ỳ thay ñổ i nào trên chân B4 ñế n B7

• #INT_RC : b ấ t k ỳ thay ñổ i nào trên chân C4 ñế n C7

Trang 10

• ext_int_edge() Enables the edge on which

• ext_int_edge() Enables the edge on which the edge interrupt should trigger This can be either rising or falling edge

• clear_interrupt() This function will clear the specified interrupt flag This can be used if a

global isr is used, or to prevent an interrupt from

being serviced

Trang 11

• ðể cho phép ngắt ñó hoạt ñộng phải dùng lệnh enable_interrupts ( int_xxxx) và enable_interrupts ( global )

18 và dsPIC

11

Trang 12

enable_interrupts ( level )

• level là tên các ng ắ t ñ ã cho ở trên hay là GLOBAL ñể

cho phép ng ắ t ở c ấ p toàn c ụ c

• M ọ i ng ắ t c ủ a VDK ñề u có 1 bit c ờ ng ắ t, 1 bit cho phép

ng ắ t Khi có ng ắ t thì bit c ờ ng ắ t b ị set =1, nh ư ng ng ắ t có

h ọ at ñộ ng ñượ c hay không tu ỳ thu ộ c bit cho phép ng ắ t enable_interrupts (int_xxx ) s ẽ b ậ t bit cho phép ng ắ t

enable_interrupts (int_xxx ) s ẽ b ậ t bit cho phép ng ắ t

Nh ư ng t ấ t c ả các ng ắ t ñề u không th ể th ự c thi n ế u bit cho phép ng ắ t toàn c ụ c = 0

VD : ñể cho phép ng ắ t timer0 và timer1 ho ạ t ñộ ng:

enable_interrupts (int_timer0);

enable_interrupts (int_timer1 ) ;

enable_interrupts ( global ); // ch ỉ c ầ n dùng 1 l ầ n tr ừ

//phi mu ố n có thay ñổ i ñặ c bi ệ t

Trang 14

clear_interupt ( level )

• level không có GLOBAL

• Hàm này xoá c ờ ng ắ t c ủ a ng ắ t ñượ c ch ỉ

ñị nh b ở i level

Trang 15

ext_int_edge ( source , edge )

EXT nên source = 0

15

Trang 16

Relevant Interrupts:

function should be called if an interrupt is triggered but no routine is associated with that interrupt

• #int_global This directive specifies that the following function should be called whenever an interrupt is triggered This function will replace the compiler generated interrupt dispatcher

• #int_xxx This directive specifies that the following

function should be called whenever the xxx interrupt is

triggered If the compiler generated interrupt dispatcher is used, the compiler will take care of clearing the interrupt flag bits

Trang 17

VD: Chương trình đọc dữ liệu từ port b xuất ra port D khi có sự thay đổi từ RB4 – RB7

Trang 18

VD: Vi ế t ch ươ ng trình ñế m nh ị phân và khi có s ự thay ñổ i t ừ RB4 ñế n RB7 thì m ạ ch ñế m

Trang 19

VD: Vi ế t ch ươ ng trình ñế m nh ị phân và khi RB0 chuy ể n t ừ cao xu ố ng th ấ p thì m ạ ch ñế m s ẽ reset

Trang 20

VD: Chương trình thực hiện công việc sau:

- Đọc dữ liệu từ port B xuất ra port D khi có sự thay đổi từ bit RB4-RB7

- Nếu bit RB0 = 0 xuất ra port C=0x0f ngược lại thực hiện mạch đếm

set_tris_d(0x00);

set_tris_c(0x00);

enable_interrupts(INT_RB); enable_interrupts(GLOBAL); portc=0;

if(id ==0) portc=0x0f;

else { portc +=1;

delay_ms(2000);

} } }

Trang 21

VD: Ch ươ ng trình nh ậ n d ữ li ệ u t ừ c ổ ng COM hi ể n th ị lên port B và d ị ch Led ở port D

Trang 22

set_tris_d(0x00);

set_tris_c(0x00);

enable_interrupts(INT_AD); enable_interrupts(GLOBAL);

portd=0;

while(true) {

portd=read_adc();

delay_ms(2000);

} }

Trang 24

• It is very easy to make a digital counter using flip-flops Counters can be made which count

up, count down, which can be cleared back to zero, pre-loaded to a certain value, and which

by the provision of an overflow output can be cascaded with other counters.

Trang 25

A digital counter made of eight

flip-flops

25

Trang 26

The counter as timer

Trang 27

Timer 0 module

27

Trang 28

• The internal clock is approximately 800 kHz and the instruction cycle rate (Fosc/4) is therefore200 kHz, or

a period of 5 µs Now with this clock frequency,

Timer 0 would count up to its maximum value (255)

in 255 × 5 µs, or 1275 µs, and would overflow on the next cycle, i.e after 1280 µs

• We can, however, make use of the prescaler here If the incoming signal is divided by 4 (i.e PS2, PS1, PS0 set to 001), then Timer 0 will overflow after 256 × 4 ×

5 µs, or 5.120ms

Trang 29

• setup_timer_0(mode)

– Sets the source, prescale etc for timer0

• set_timer0(value) or set_rtcc(value)

- Initializes the timer0 clock/counter Value may be a 8 bit or 16 bit

depending on the device.

• value=get_timer0

– Returns the value of the timer0 clo c k/counter

29

Trang 30

Relevant Interrupts :

- Interrupt fires when timer0 overflows

Trang 33

V ớ i TOV là th ờ i gian tràn

B4: Giá tr ị n ạ p Timer=256-n

33

Trang 35

set_tris_d(0x00);

setup_timer_0 (RTCC_INTERNAL|RTCC_DIV_4|RTCC_8_BIT); set_timer0(131);

} }

Ngày đăng: 23/03/2014, 09:20

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w