Ðề tài: Delay = timer????
View Single Post
Old 30-06-2008, 11:48 PM   #1
KA52
Đệ tử 1 túi
 
Tham gia ngày: Oct 2007
Bài gửi: 22
:
Question Delay = timer????

Làm sao để e thay thế delay = timer vậy??
VD:
output_a(0xff);
delay_ms(1000);
output_a(0x00);
delay_ms(1000);
e muốn thay delay = timer để sau khi xuất porta = 0xff thì làm việc khác, sau khi timer đủ 1s thì quay lại tiếp tục xuất porta = 0x00. E định xài ngắt nhưng với hơn chục delay thì ngắt sao đủ đây!!!???

cho e hỏi thêm chương trình này. cứ sau vài phút là pic của e đơ lun, ko nhận đc & truyền đc dữ liệu. Ko bít sao nữa, phải reset lại mới chạy đc. Pác nào xem giúp e lỗi ở đâu với ?? E định để khoảng 5~10 phút reset pic 1 lần nhưng cái WDT e ko bít cấu hình thời gian dài như vậy?
Trong datasheet ghi Watchdog Timer Time-out Period = 33ms với 1:1, vậy e set 1:128 cũng đc có 5s, ko bít e có hiểu sai ko nữa. (e xài 20Mhz)

Code:
#include "D:\Document\Working Files\CAN\usart\main.h"
//#include <18F4580.h>
#fuses HS,NOPROTECT,NOLVP,NOWDT
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, parity=N, bits=8)

#include <can-18F4580.c>

#define data_id_a         0x201  
#define data_id_b         0x202
#define data_id_c         0x203
#define data_id_d         0x204
#define data_id_e         0x205

#define data_id_m         0x301
#define data_id_n         0x302
#define data_id_o         0x303
#define data_id_p         0x304
#define data_id_q         0x305
#define data_id_r         0x306
#define data_id_s         0x307
#define data_id_t         0x308
#define data_id_u         0x309
#define data_id_v         0x30a
///////////////////////////////////////////////////////////////////
char t;
int dem;
#byte porta  = 0xf80
#INT_RDA
void rda_isr()
{
   t=getc();   
   dem=3;
   putc(t);
}
///////////////////////////////////////////////////////////////////
void main()
{
   int mang[16]={0,1,2,3,4,5,6,7,8,9,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};
   int *pointer,led,i;
   int data1,data2,data3,data4,data5,data3a,data4a;
   int data6,data7,data8,data9;
   int data10,data11,data12,data13;
   set_tris_a(0x00);
   set_tris_d(0xff);
   pointer=&mang[0];
   can_init();
   ENABLE_INTERRUPTS(GLOBAL);
   ENABLE_INTERRUPTS(INT_RDA);
   i=16;
   while(1)
   {
      output_a(t);
      dem=0;
      
/*      if(t==0X01)
      {
         if ((can_tbe()) && (dem==1))
         {   
            led=*pointer;
            can_putd(SET_LED_ID_A,&led , 1, 1, 1, 0);       
            delay_ms(250);
            dem--;
         }
         pointer++;
         i--;      
         if(i==0)
         {
            i=16;
            pointer=&mang[0];
         }      
      }*/
///////////////////////////////////////////////////////////////////      
      if (t==0x01)               //quay thuan
      {
         if ((can_tbe()) && (dem>0))
         {
            data1=0x01;
            can_putd(data_id_a,&data1 , 1, 1, 1, 0);
            delay_ms(250);
            dem--;
         }         
      }   
      else if (t==0x02)          //quay nghich
      {
         if ((can_tbe()) && (dem>0))
         {
            data2=0x02;
            can_putd(data_id_b,&data2 , 1, 1, 1, 0);
            delay_ms(250);
            dem--;
         }
      }      
      else if (t==0x03)          //inc
      {
         if ((can_tbe()) && (dem>0)) 
         {
            data3=0x03;
            can_putd(data_id_c,&data3 , 1, 1, 1, 0);
            delay_ms(250);
            dem--;
         }
      }
      else if (t==0x04)          //dec
      {
         if ((can_tbe()) && (dem>0))
         {
            data4=0x04;
            can_putd(data_id_d,&data4 , 1, 1, 1, 0);
            delay_ms(250);
            dem--;
         }
      }
      else if (t==0x05)          //stop dong co buoc
      {
         if ((can_tbe()) && (dem>0))
         {
            data5=0x05;
            can_putd(data_id_e,&data5 , 1, 1, 1, 0);
            delay_ms(250);
            dem--;
         }
      }
///////////////////////////////////////////////////////////////////      
      else if (t==0x06)          //b1
      {
         if ((can_tbe()) && (dem>0))
         {
            data6=0x06;
            can_putd(data_id_m,&data6 , 1, 1, 1, 0);
            delay_ms(250);
            dem--;
         }
      }
      else if (t==0x07)          //b2
      {
         if ((can_tbe()) && (dem>0))
         {
            data7=0x07;
            can_putd(data_id_n,&data7 , 1, 1, 1, 0);
            delay_ms(250);
            dem--;
         }
      }
      else if (t==0x08)          //b3
      {
         if ((can_tbe()) && (dem>0))
         {
            data8=0x08;
            can_putd(data_id_o,&data8 , 1, 1, 1, 0);
            delay_ms(250);
            dem--;
         }
      }      
      else if (t==0x09)          //b4
      {
         if ((can_tbe()) && (dem>0))
         {
            data9=0x09;
            can_putd(data_id_p,&data9 , 1, 1, 1, 0);
            delay_ms(250);
            dem--;
         }
      }
      else if (t==0x0a)          //b5
      {
         if ((can_tbe()) && (dem>0))
         {
            data10=0x0a;
            can_putd(data_id_q,&data10 , 1, 1, 1, 0);
            delay_ms(250);
            dem--;
         }
      }
      else if (t==0x0b)          //b6
      {
         if ((can_tbe()) && (dem>0))
         {
            data11=0x0b;
            can_putd(data_id_r,&data11 , 1, 1, 1, 0);
            delay_ms(250);
            dem--;
         }
      }
      else if (t==0x0c)          //tu dong
      {
         if ((can_tbe()) && (dem>0))
         {
            data12=0x0c;
            can_putd(data_id_s,&data12 , 1, 1, 1, 0);
            delay_ms(250);
            dem--;
         }
      }
      else if (t==0x0d)          //stop dog nap chai
      {
         if ((can_tbe()) && (dem>0))
         {
            data13=0x0d;
            can_putd(data_id_t,&data13 , 1, 1, 1, 0);
            delay_ms(250);
            dem--;
         }
      }      
   }
}

thay đổi nội dung bởi: KA52, 01-07-2008 lúc 12:22 AM.
KA52 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn