star 发表于 2012-8-21 17:55:31

16F887 基于CCS的通信程序

用CCS 写了简单的通讯程序

#include <16F887.h>
#device ADC = 10
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=16000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7,stream=MYPC)
#define RD0 PIN_D0
#define RD2 PIN_D2
#define RD3 PIN_D3

#include <string.h>

void LED_Running()
{
output_low(RD0);
delay_ms(100);
output_high(RD0);
delay_ms(100);
}
void RAD_VOLT(TD)
{
   //define the value for variable;
   
   int8   M_Volt;
   floatValue;
   
   setup_port_a( ALL_ANALOG | VSS_VDD );
   setup_adc( ADC_CLOCK_INTERNAL );
   set_adc_channel(TD);
   delay_us(50);
   value = Read_ADC();
   delay_us(50);
   setup_adc(ADC_OFF);
   delay_us(50);
   value = 5.0*value/1023;   // Measurement volatge
   sprintf(M_Volt, "%1.3fV \n\r",value);
   printf(M_Volt);
   
//return(M_Volt);
}
void init_io()
{
SET_TRIS_A(0x0F);
output_B(0x00);
output_C(0x00);
output_D(0x00);
}
void main()
{
int8 RC_flag;
unsigned int8 RC_CMD;
char ptRCi;
char DATA;
int8 value;
char tmpch;
long tttlong;
char bKb;
int TD;
char PD;
//int8 string;
ptRCi=0;
tttlong=0;
init_io();
Loop:
while(1)
{//LED Running
   tttlong ++;
   if (tttlong > 20000)
   {output_low(RD0);}
   if (tttlong > 50000)
   {output_high(RD0);
      tttlong =0;
   }
   
   bKb = kbhit();
   if (bKb)
   {
      tmpch = getc();
       if (tmpch == '#')
      {
         ptRCi=0;
      }
      
      RC_CMD=tmpch;
   
      ptRCi ++;
      ptRCi %= 8;
   
      if (tmpch == '$')
      {
      // reading adc
         if ( (RC_CMD=='#') && (RC_CMD=='R') && (RC_CMD=='A') && (RC_CMD=='D') && (RC_CMD<='7') && (RC_CMD=='$') && (ptRCi==6))
         {
          switch(RC_CMD)
         
            { case '0': TD=0; break;
            case '1': TD=1; break;
            case '2': TD=2; break;
            case '3': TD=3; break;
            case '4': TD=4; break;
            case '5': TD=5; break;
            case '6': TD=6; break;
            case '7': TD=7; break;
            
          }
         RAD_VOLT(TD);
         goto Loop;
         }
         
         //== i/o control for port D by line
         if((RC_CMD=='#') && (RC_CMD=='S') && (RC_CMD=='P') &&(RC_CMD<='D') && (RC_CMD<='7') && (RC_CMD=='$') && (ptRCi==6))
         {
          switch(RC_CMD)
            { case '0':PD=PIN_D0;break;
            case '1':PD=PIN_D1;break;
            case '2':PD=PIN_D2;break;
            case '3':PD=PIN_D3;break;
            case '4':PD=PIN_D4;break;
            case '5':PD=PIN_D5;break;
            case '6':PD=PIN_D6;break;
            case '7':PD=PIN_D7;break;
          }
         
         output_high(PD);
         goto Loop;
         }
         
          //== i/o control for port D release by line
         if((RC_CMD=='#') && (RC_CMD=='R') && (RC_CMD=='P') &&(RC_CMD<='D') && (RC_CMD<='7') && (RC_CMD=='$') && (ptRCi==6))
         {
          switch(RC_CMD)
            { case '0':PD=PIN_D0;break;
            case '1':PD=PIN_D1;break;
            case '2':PD=PIN_D2;break;
            case '3':PD=PIN_D3;break;
            case '4':PD=PIN_D4;break;
            case '5':PD=PIN_D5;break;
            case '6':PD=PIN_D6;break;
            case '7':PD=PIN_D7;break;
          }
         
         output_low(PD);
         goto Loop;
         }
         
         else
         {printf("%S \n\r","unknowen Command, Please check");}
      }
      
   
   }
   
   
}
}
页: [1]
查看完整版本: 16F887 基于CCS的通信程序