PIC单片机论坛论坛展示区(非讨论区)(这个版块不能发新贴)『 单片机类精华贴子展示区 』 → CCSC rs232.c程序操作MCD2demo ADC CH0测量电压通过rs232到PC


  共有19750人关注过本帖树形打印

主题:CCSC rs232.c程序操作MCD2demo ADC CH0测量电压通过rs232到PC

帅哥哟,离线,有人找我吗?
lw7807
  1楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:初中二年级 帖子:54 积分:1892 威望:0 精华:11 注册:2005-6-17 19:44:00
CCSC rs232.c程序操作MCD2demo ADC CH0测量电压通过rs232到PC  发帖心情 Post By:2005-6-26 20:40:00

*=============================================================================
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()


支持(1中立(0反对(1回到顶部
帅哥哟,离线,有人找我吗?
lw7807
  2楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:初中二年级 帖子:54 积分:1892 威望:0 精华:11 注册:2005-6-17 19:44:00
附上RS232.c程序lst文件  发帖心情 Post By:2005-6-26 20:43:00

CCS PCM C Compiler, Version 3.187, 16465

Filename: D:\myPIC\ccsc_rs232.LST

ROM used: 1091 (13%)
Largest free fragment is 2048
RAM used: 39 (22%) at main() level
55 (31%) worst case
Stack: 2 locations

*
0000: MOVLW 00
0001: MOVWF 0A
0002: GOTO 34B
0003: NOP
.................... /*=============================================================================
.................... 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
.................... //////// Standard Header file for the PIC16F877A device ////////////////
.................... #device PIC16F877A
.................... #list
....................
.................... #pragma device ADC=10 // 10 bits ADC
.................... #pragma use delay(clock=4000000) // for 4Mhz crystal
0334: MOVLW 3F
0335: MOVWF 04
0336: MOVF 00,W
0337: BTFSC 03.2
0338: GOTO 348
0339: MOVLW 01
033A: MOVWF 78
033B: CLRF 77
033C: DECFSZ 77,F
033D: GOTO 33C
033E: DECFSZ 78,F
033F: GOTO 33B
0340: MOVLW 4A
0341: MOVWF 77
0342: DECFSZ 77,F
0343: GOTO 342
0344: NOP
0345: NOP
0346: DECFSZ 00,F
0347: GOTO 339
0348: BCF 0A.3
0349: BCF 0A.4
034A: GOTO 43B (RETURN)
.................... #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)
.................... {
034B: CLRF 04
034C: MOVLW 1F
034D: ANDWF 03,F
034E: MOVLW 06
034F: BSF 03.5
0350: MOVWF 1F
0351: MOVLW 07
0352: BCF 03.5
0353: MOVWF 1F
0354: MOVLW 19
0355: BSF 03.5
0356: MOVWF 19
0357: MOVLW 26
0358: MOVWF 18
0359: MOVLW 90
035A: BCF 03.5
035B: MOVWF 18
.................... int16 int_volt;
.................... int8 str_volt[21];
.................... float flt_volt;
.................... int8 do_what = DO_NOTHING;
*
035D: CLRF 3C
.................... int8 tmp;
....................
.................... while(1){
.................... // if rs232 get char
.................... if(0 != kbhit())
.................... {
035E: MOVLW 00
035F: BTFSC 0C.5
0360: MOVLW 01
0361: XORLW 00
0362: BTFSC 03.2
0363: GOTO 3B1
.................... tmp = fgetc(MYPC);
0364: BTFSS 0C.5
0365: GOTO 364
0366: MOVF 1A,W
0367: MOVWF 3D
.................... switch(tmp)
.................... {
0368: MOVF 3D,W
0369: MOVWF 77
036A: MOVLW 53
036B: SUBWF 77,W
036C: BTFSC 03.2
036D: GOTO 37B
036E: MOVLW 73
036F: SUBWF 77,W
0370: BTFSC 03.2
0371: GOTO 37B
0372: MOVLW 51
0373: SUBWF 77,W
0374: BTFSC 03.2
0375: GOTO 399
0376: MOVLW 71
0377: SUBWF 77,W
0378: BTFSC 03.2
0379: GOTO 399
037A: GOTO 3AC
.................... case 'S':
.................... case 's':
.................... printf( "S:StartADC\n" );
037B: CLRF 3E
037C: MOVF 3E,W
037D: CALL 004
037E: INCF 3E,F
037F: MOVWF 77
0380: MOVF 77,W
0381: BTFSS 0C.4
0382: GOTO 381
0383: MOVWF 19
0384: MOVLW 0B
0385: SUBWF 3E,W
0386: BTFSS 03.2
0387: GOTO 37C
.................... do_what = DO_START_ADC;
0388: MOVLW 01
0389: MOVWF 3C
....................
.................... // init pic16f877a adc
.................... setup_adc_ports(RA0_RA1_RA3_ANALOG);
038A: MOVLW 84
038B: BSF 03.5
038C: MOVWF 1F
.................... setup_adc(ADC_CLOCK_INTERNAL);
038D: BCF 03.5
038E: MOVF 1F,W
038F: ANDLW 38
0390: IORLW C1
0391: MOVWF 1F
.................... set_adc_channel(0);
0392: MOVLW 00
0393: MOVWF 78
0394: MOVF 1F,W
0395: ANDLW C7
0396: IORWF 78,W
0397: MOVWF 1F
.................... break;
0398: GOTO 3B1
.................... case 'Q':
.................... case 'q':
.................... printf( "Q:EndADC\n" );
0399: CLRF 3E
039A: MOVF 3E,W
039B: CALL 014
039C: INCF 3E,F
039D: MOVWF 77
039E: MOVF 77,W
039F: BTFSS 0C.4
03A0: GOTO 39F
03A1: MOVWF 19
03A2: MOVLW 09
03A3: SUBWF 3E,W
03A4: BTFSS 03.2
03A5: GOTO 39A
.................... do_what = DO_END_ADC;
03A6: MOVLW 02
03A7: MOVWF 3C
....................
.................... // adc off
.................... setup_adc(ADC_OFF);
03A8: MOVF 1F,W
03A9: ANDLW 38
03AA: MOVWF 1F
.................... break;
03AB: GOTO 3B1
.................... default : // rs232 get other char
.................... putc(tmp);
03AC: MOVF 3D,W
03AD: BTFSS 0C.4
03AE: GOTO 3AD
03AF: MOVWF 19
.................... break;
03B0: GOTO 3B1
.................... }//end switch(tmp)
.................... }//end if(kbhit())
....................
.................... switch(do_what)
.................... {
03B1: MOVF 3C,W
03B2: MOVWF 77
03B3: MOVLW 01
03B4: SUBWF 77,W
03B5: BTFSC 03.2
03B6: GOTO 3BF
03B7: MOVLW 02
03B8: SUBWF 77,W
03B9: BTFSC 03.2
03BA: GOTO 43E
03BB: MOVF 77,F
03BC: BTFSC 03.2
03BD: GOTO 43F
03BE: GOTO 440
.................... case DO_START_ADC:
.................... // start adc and send result to PC
.................... int_volt = read_adc();
03BF: BSF 1F.2
03C0: BTFSC 1F.2
03C1: GOTO 3C0
03C2: BSF 03.5
03C3: MOVF 1E,W
03C4: BCF 03.5
03C5: MOVWF 21
03C6: MOVF 1E,W
03C7: MOVWF 22
.................... flt_volt = 5.0 * int_volt / 0x3ff;
03C8: MOVF 22,W
03C9: MOVWF 3F
03CA: MOVF 21,W
03CB: MOVWF 3E
03CC: GOTO 049
03CD: CLRF 41
03CE: CLRF 40
03CF: MOVLW 20
03D0: MOVWF 3F
03D1: MOVLW 81
03D2: MOVWF 3E
03D3: MOVF 7A,W
03D4: MOVWF 45
03D5: MOVF 79,W
03D6: MOVWF 44
03D7: MOVF 78,W
03D8: MOVWF 43
03D9: MOVF 77,W
03DA: MOVWF 42
03DB: GOTO 069
03DC: MOVF 77,W
03DD: MOVWF 3E
03DE: MOVF 78,W
03DF: MOVWF 3F
03E0: MOVF 79,W
03E1: MOVWF 40
03E2: MOVF 7A,W
03E3: MOVWF 41
03E4: MOVWF 45
03E5: MOVF 79,W
03E6: MOVWF 44
03E7: MOVF 78,W
03E8: MOVWF 43
03E9: MOVF 77,W
03EA: MOVWF 42
03EB: CLRF 49
03EC: MOVLW C0
03ED: MOVWF 48
03EE: MOVLW 7F
03EF: MOVWF 47
03F0: MOVLW 88
03F1: MOVWF 46
03F2: GOTO 0E2
03F3: MOVF 7A,W
03F4: MOVWF 3B
03F5: MOVF 79,W
03F6: MOVWF 3A
03F7: MOVF 78,W
03F8: MOVWF 39
03F9: MOVF 77,W
03FA: MOVWF 38
.................... sprintf(str_volt, "ADC_CH0:%1.3fV\n", flt_volt);
*
035C: CLRF 20
*
03FB: MOVLW 23
03FC: MOVWF 20
03FD: CLRF 3E
03FE: MOVF 3E,W
03FF: CALL 022
0400: INCF 3E,F
0401: MOVWF 77
0402: MOVWF 51
0403: CALL 1B0
0404: MOVLW 08
0405: SUBWF 3E,W
0406: BTFSS 03.2
0407: GOTO 3FE
0408: MOVF 3B,W
0409: MOVWF 42
040A: MOVF 3A,W
040B: MOVWF 41
040C: MOVF 39,W
040D: MOVWF 40
040E: MOVF 38,W
040F: MOVWF 3F
0410: CLRF 46
0411: CLRF 45
0412: MOVLW 01
0413: MOVWF 44
0414: MOVLW 03
0415: MOVWF 43
0416: GOTO 1B8
0417: MOVLW 56
0418: MOVWF 51
0419: CALL 1B0
041A: MOVLW 0A
041B: MOVWF 51
041C: CALL 1B0
.................... printf(str_volt);
041D: MOVLW 23
041E: MOVWF 04
041F: MOVLW 00
0420: IORWF 00,W
0421: BTFSC 03.2
0422: GOTO 429
0423: BTFSS 0C.4
0424: GOTO 423
0425: MOVF 00,W
0426: MOVWF 19
0427: INCF 04,F
0428: GOTO 41F
.................... printf( "delay_ms(300)\n" );
0429: CLRF 3E
042A: MOVF 3E,W
042B: CALL 036
042C: INCF 3E,F
042D: MOVWF 77
042E: MOVF 77,W
042F: BTFSS 0C.4
0430: GOTO 42F
0431: MOVWF 19
0432: MOVLW 0E
0433: SUBWF 3E,W
0434: BTFSS 03.2
0435: GOTO 42A
.................... delay_ms(300);
0436: MOVLW 02
0437: MOVWF 3E
0438: MOVLW 96
0439: MOVWF 3F
043A: GOTO 334
043B: DECFSZ 3E,F
043C: GOTO 438
.................... break;
043D: GOTO 441
.................... case DO_END_ADC:
.................... // you want to do
.................... break;
043E: GOTO 441
.................... case DO_NOTHING:
.................... // you want to do
.................... break;
043F: GOTO 441
.................... default:
.................... break;
0440: GOTO 441
.................... }//end switch(do_what)
....................
.................... }//end while(1)
0441: GOTO 35E
.................... }//end main()
....................
0442: SLEEP

Configuration Fuses:
Word 1: 3F79 XT NOWDT NOPUT NODEBUG NOPROTECT BROWNOUT NOLVP NOCPD NOWRT


支持(0中立(0反对(0回到顶部
帅哥哟,离线,有人找我吗?
argui
  3楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:大学一年级 帖子:176 积分:3684 威望:0 精华:5 注册:2005-1-29 8:42:00
  发帖心情 Post By:2005-6-26 22:50:00

很好,顶一下。

如果把第二贴的C整理一下,看上去会更舒服些。

图片点击可在新窗口打开查看图片点击可在新窗口打开查看

支持(0中立(0反对(0回到顶部
美女呀,离线,留言给我吧!
zhaoxiong
  4楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小学一年级 帖子:2 积分:240 威望:0 精华:0 注册:2006-10-13 21:12:00
  发帖心情 Post By:2006-10-13 21:19:00

图片点击可在新窗口打开查看图片点击可在新窗口打开查看

支持(0中立(1反对(0回到顶部
帅哥哟,离线,有人找我吗?
glenhua
  5楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小学四年级 帖子:17 积分:604 威望:0 精华:0 注册:2006-11-8 19:02:00
  发帖心情 Post By:2006-12-16 6:43:00

请教下:为什么用 flt_volt = 5.0 * int_volt / 0x3ff; 这个是什么意思


支持(0中立(0反对(0回到顶部
帅哥哟,离线,有人找我吗?
master_baron
  6楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:初中二年级 帖子:52 积分:1475 威望:0 精华:0 注册:2006-7-10 15:59:00
  发帖心情 Post By:2007-1-5 22:00:00

最好再编一个上位机程序,通过图形显示电压值,象示波器一样


支持(0中立(0反对(0回到顶部
帅哥哟,离线,有人找我吗?
master_baron
  7楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:初中二年级 帖子:52 积分:1475 威望:0 精华:0 注册:2006-7-10 15:59:00
  发帖心情 Post By:2007-1-5 22:02:00

最好再编一个上位机程序,通过图形显示电压值,象示波器一样


支持(0中立(1反对(0回到顶部
帅哥哟,离线,有人找我吗?
fangjikun1981
  8楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:大学二年级 帖子:272 积分:6559 威望:0 精华:0 注册:2008-12-4 15:56:00
  发帖心情 Post By:2010-9-20 14:03:00

一部分程序,不完整

 


支持(0中立(0反对(0回到顶部
帅哥哟,离线,有人找我吗?
蒲晓波
  9楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小学三年级 帖子:11 积分:426 威望:0 精华:0 注册:2011-10-8 0:29:00
  发帖心情 Post By:2011-10-14 13:56:00

还ok啦

支持(0中立(0反对(0回到顶部
Google 全部 本站