Đệ tử 4 túi
Tham gia ngày: Apr 2008
Bài gửi: 66
:
|
xem giúp em đoạn code với !!!!!!!!
em có đoạn code thế này
.............................................
#include <16F877A.h>
#include <DEFS_16F877A.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#device 16F877*=16 ADC=10
#use delay(clock=4000000)
#include <glcd.c>
#define rd RB6
#define Inf RB7
char sp[]="SPO2:";
char hr[]="HR:";
int8 data,anhsang,hongngoai,hongngoai1,hongngoai2,min_h ongngoai,max_hongngoai,red,red1,red2,min_red,max_r ed;
float chuky, nhiptim, spo2;
unsigned int16 count,point,point1,point2;
int8 check1, check2, flag, a,b,c,d,x,y,y1;
//Chuong trinh ngat TMR0
#int_timer0
void interrupt_timer0()
{
set_timer0(6);
++count;
if(count == 100) // 100*500us = 500000us = 5ms
{
count=0;
flag=1;
}
}
#INT_AD
void ngat_bien_doi_ad()
{
if (check2 == 1)
{
y1 = y;
y = data/5;
glcd_line(x,63-y1,x,63-y,on);
glcd_line(x+1,63,x+1,15,off);
x++;
if ( x==63) x=-53;
}
}
/*CHUONG TRINH CHINH*/
void main (void)
{
check1 = 0; /// kiem tra coi co led nao sang hay ko, 1 la co led sang, 0 la ko co led nao sang
check2 = 1; /// kiem tra coi led do or hong ngoai sang, 1 la hong ngoai, 0 la led do
Red = 0;
Inf = 1;
setup_adc_ports(ALL_ANALOG);
setup_adc(adc_clock_internal);
set_adc_channel(0);
enable_interrupts(INT_AD);
enable_interrupts(int_timer0);
enable_interrupts(global);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
set_timer0(6);// T_dinhthi = 2*(256 - 6)*1us = 500us
set_tris_B(0);
set_tris_D(0);
delay_ms(100); // Tao tre 100ms cho LCD khoi dong
glcd_init(on);
glcd_text57(64,0,sp,1,on);
glcd_text57(64,8,hr,1,on);
while (true)
{
if(flag == 1) /// sau khi ngat 5ms
{
if (check1 == 1) /// kiem tra co led sang
{
if (a == b == c == d == 1) /// tinh spo2, chu ky
{
chuky = (point1 - point2) * 0.005 * 2;
nhiptim = 60 / chuky;
point = 0;
}
if (check2 == 1) /// led hong ngoai sang
{
++point;
hongngoai2 = hongngoai1;
hongngoai1 = hongngoai;
data = read_adc();
hongngoai = data - anhsang;
/// da nhan gia tri hong ngoai, sau do kiem tra gia tri max, min
if (hongngoai1 < hongngoai2)
{
if (hongngoai1 <hongngoai)
{
min_hongngoai = hongngoai1;
a = 1;
point1 = point;
}
}
if (hongngoai1 >hongngoai2)
{
if (hongngoai1 >hongngoai)
{
max_hongngoai = hongngoai1;
b = 1;
point2 = point;
}
}
check2 = 0;
rd = 1;
Inf = 0;
}
else ///led do sang
{
red2 = red1;
red1 = red;
data = read_adc();
red = data - anhsang;
if (red1 < red2)
{
if (red1 <red)
{
min_red = red1;
c = 1;
}
}
if (red1 > red2)
{
if (red1 > red)
{
max_red = red1;
d = 1;
}
}
check2 = 1;
rd = 0;
Inf = 1;
}
flag = 0;
check1 = 0;
}
else /// ko co led nao sang
{
anhsang = read_adc();
check1 = 1;
flag = 0;
}
}
}
}
.................................................. ...................................
và sau khi compile thi có nhữnng warning thế này
.................................
interrupts disabled during call to prevent re-entracy: [glcd_writeByte]
interrupts disabled during call to prevent re-entracy: [@MUL88]
interrupts disabled during call to prevent re-entracy: [glcd_pixel]
.....................................
vậy là thế nào và em phải giải quyết thế nào ???
mong mọi người giúp đỡ
|