PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   Làm sao nó cứ báo lối (http://www.picvietnam.com/forum/showthread.php?t=9845)

thanhtuanuct2 17-06-2011 07:55 PM

Làm sao nó cứ báo lối
 
em viết cái CODE để xử lý ngắt mà sao nó cứ báo lỗi chỗ enable_interrups (INT_LED)
Mong các sư phụ giúp đỡ
#include "D:\pic-c\a\bai2.h"
#use delay (clock=2000000)
//#device PIC16F877A *=16
int8 mode,i;
byte temp;
#INT_EXT
EXT_LED()
{
mode++;
if (mode==3) mode=0;
}
void program1();
void program2();
void main()
{

setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);

enable_interrups(INT_LED) ;
ext_int_edge(H_TO_L);
enable_interrups(GLOBAL) ;
mode=0;
while(1)
{
// TODO: USER CODE!!
output_b(0x00);
delay_ms(500);
switch (mode)
{
case 0:program1();break;
case 1:program2();break;
}

}
}
void program1()
{
set_tris_b (0x00);
output_b(0xf0);delay_ms(300);
output_b(0xff);delay_ms(100);
}
void program2()
{
temp=0xff;
for (i=0;i<=8;i++)
{ output_b(temp);
delay_ms(150);
temp <<=1;
}
}

shakespeare_a18 17-06-2011 11:28 PM

bác phải để là

#int_ext
void ext_led
{...}
...
...
enable_interrupt(int_ext);

thanhtuanuct2 18-06-2011 11:13 AM

Vẫn không được các bac ơi
 
Trích:

Nguyên văn bởi shakespeare_a18 (Post 46266)
bác phải để là

#int_ext
void ext_led
{...}
...
...
enable_interrupt(int_ext);

mình đã sửa như vậy nhưng không được vẫn báo lỗi như cũ

hein_ts 18-06-2011 03:29 PM

Quái lạ, mình đọc phần Help của CCS mãi mà không thấy cái ngắt có tên là (INT_LED)?
Chắc là bạn nhầm rồi, sử dụng ngắt nào phải khai báo enable ngắt đó:
enable_interrups(INT_LED) ;
đáng nhẽ phải là INT_EXT chứ nhỉ;
Có báo lỗi tiếng anh cố đọc mà hiểu thôi?
Có hàm ( chương trình con) là nên khai báo chứ nhỉ. Cái chương trình trong ngắt cũng phải khai báo (void....;) còn viết sau khai báo ngắt thì không dùng void thấy chạy bình thường?

shakespeare_a18 18-06-2011 09:46 PM

Code:

#include <16f887.h>
#fuses HS, MCLR
#use delay (clock=2000000)

int8 mode,i;
byte temp;
#INT_EXT
void isr_ext()
{
mode++;
if (mode==3) mode=0;
}
void program1();
void program2();
void main()
{
enable_interrupts(INT_ext) ;
ext_int_edge(H_TO_L);
enable_interrupts(GLOBAL) ;
mode=0;
while(1)
{
// TODO: USER CODE!!
output_b(0x00);
delay_ms(500);
switch (mode)
{
case 0: program1();break;
case 1: program2();break;
}

}
}
void program1()
{
set_tris_b (0x00);
output_b(0xf0);delay_ms(300);
output_b(0xff);delay_ms(100);
}
void program2()
{
temp=0xff;
for (i=0;i<=8;i++)
{ output_b(temp);
delay_ms(150);
temp <<=1;
}
}

Bác viết sai chính tả hơi nhiều nên nó báo lỗi đó.

thanhtuanuct2 19-06-2011 09:06 AM

cam on
 
Trích:

Nguyên văn bởi shakespeare_a18 (Post 46296)
Code:

#include <16f887.h>
#fuses HS, MCLR
#use delay (clock=2000000)

int8 mode,i;
byte temp;
#INT_EXT
void isr_ext()
{
mode++;
if (mode==3) mode=0;
}
void program1();
void program2();
void main()
{
enable_interrupts(INT_ext) ;
ext_int_edge(H_TO_L);
enable_interrupts(GLOBAL) ;
mode=0;
while(1)
{
// TODO: USER CODE!!
output_b(0x00);
delay_ms(500);
switch (mode)
{
case 0: program1();break;
case 1: program2();break;
}

}
}
void program1()
{
set_tris_b (0x00);
output_b(0xf0);delay_ms(300);
output_b(0xff);delay_ms(100);
}
void program2()
{
temp=0xff;
for (i=0;i<=8;i++)
{ output_b(temp);
delay_ms(150);
temp <<=1;
}
}

Bác viết sai chính tả hơi nhiều nên nó báo lỗi đó.

cam on bac !! minh thuc hien dc roi!!


Múi giờ GMT. Hiện tại là 12:43 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam