Include guards, as mentioned by @downhillFromHere, are one answer. All header files should have include guards, unless you have a very good reason otherwise.
However, your description doesn't make it clear why you need file1.h to include file2.h and vice versa. Header files describe an interface. If the interfaces are dependent, then you should think about combining them into a single header: file.h. If the interfaces described in file1.h and file2.h are independent, then they shouldn't include each other. The proper way to expose independent interfaces is to have file1.c and file2.c include both headers.
In both file1.c and file2.c:
#include "file1.h"
#include "file2.h"
This keeps the interfaces decoupled, which allows you to reason about the independent interfaces separately, reduces mistakes, and can greatly reduce compile time.
#includeit in in bothfile1.candfile2.c