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

📄 rs232.txt

📁 pic 单片机的应用子程序库
💻 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
//
// by LW7807@163.com
// 2005/06/23
///////////////////////////////////////////////////////////////////////////////
#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 + -