CCS-ben sokkal jobban elkülönülnek a megszakítások. Minden megszakításnak külön procedúrája van, ami meghívódik.
#include <16F877.h>
#FUSES NOWDT, XT, NOPUT, NOPROTECT, BROWNOUT, NOLVP, NOCPD
#use delay(clock=4000000)
#byte PORTD = 0x08 //PORTD regiszterre mutató pointer
//================================================================
#int_EXT
void EXT_isr() {
//================================================================
PORTD = 0; //Nullázzuk a LED-eket
}
//================================================================
#int_TIMER0
void TIMER0_isr() {
//================================================================
PORTD++; //Növeljük egyel a PORTD-t
}
//================================================================
void main(){
//================================================================
set_tris_d(0b00000000); //PORTD kimenet
output_d(0b00000000); //LED-ek kikapcs
set_tris_b(0b00000001); //PORTB.0 bemenet
set_tris_a(0b00011111); //PORTA0:5 bemenet
ext_int_edge(H_TO_L); //Magasról alacsonyra - Lefutó él
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);//Timer előosztó 1:256
enable_interrupts(INT_EXT);//EXT1 vagyis az RB0 megszakítás be
enable_interrupts(INT_TIMER0);//Timer0 bekapcs
enable_interrupts(GLOBAL); //GIE bekapcsol
for(;;) {
//Semmit nem csinálunk
}//for
}//main
Program forráskód és a lefordított hex: multi_ccs.zip
Lapozz...
A cikk még nem ért véget, lapozz!
Értékeléshez bejelentkezés szükséges!