⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dspic与rs232通信.txt

📁 此源码可以实现上位机与DSPIC之间的数据通信功能。
💻 TXT
字号:
PIC RS232收到'S'or's',返回"S:StartADC",?始?量CH0??,并且??据通?RS232送出;
         收到'Q'or'q',返回"Q:EndADC",停止量?CH0??.
============================================================================*/
///////////////////////////////////////////////////////////////////////////////
// MPLAB IDE V7.11 + CCS C3.18
// Use 16F877A ADC and Rs232 for MCD2-demo
///////////////////////////////////////////////////////////////////////////////
#include <16F877A.h>                                    // PIC16F877 header file
#pragma device ADC=10                                   // 10 bits ADC
#pragma use delay(clock=4000000)                        // for 4Mhz crystal
#pragma fuses XT, NOWDT, NOPROTECT, NOLVP               // for debug mode
   
   #pragma use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, stream=MYPC)   
                                                        // rs232 setting
   
#define DO_NOTHING           0
#define DO_START_ADC            1                       
#define DO_END_ADC              2
   
   
/*===========================================================================*/
void main(void)
{
        int16 int_volt;
        int8  str_volt[21];
        float flt_volt;
        int8  do_what = DO_NOTHING;
        int8  tmp;
   
           while(1){
                // if rs232 get char
                if(0 != kbhit())
                        {
                        tmp = fgetc(MYPC);
                        switch(tmp)
                                {
                                case 'S':
                                case 's':
                                        printf( "S:StartADC\n" );
                                        do_what = DO_START_ADC;
        
                                        // init pic16f877a adc
                                        setup_adc_ports(RA0_RA1_RA3_ANALOG);
                                        setup_adc(ADC_CLOCK_INTERNAL);
                                        set_adc_channel(0);
                                        break;  
                                case 'Q':
                                case 'q':
                                        printf( "Q:EndADC\n" );
                                        do_what = DO_END_ADC;
                                        
                                        // adc off
                                        setup_adc(ADC_OFF);
                                        break;
                                default :       // rs232 get other char
                                        putc(tmp);
                                        break;
                                }//end switch(tmp)
                        }//end if(kbhit())
   
                   switch(do_what)
                        {
                        case DO_START_ADC:
                                // start adc and send result to PC
                                int_volt = read_adc();
                                flt_volt = 5.0 * int_volt / 0x3ff;
                                sprintf(str_volt, "ADC_CH0:%1.3fV\n", flt_volt);
                                printf(str_volt);
                                printf( "delay_ms(300)\n" );
                                delay_ms(300);
                                break;  
                        case DO_END_ADC:
                                // you want to do
                                break;
                        case DO_NOTHING:
                                // you want to do
                                break;  
                        default:
                                break;
                        }//end switch(do_what)
   
                   }//end while(1)
}//end main()

 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -