c语言写的计算机串口通信软件Word格式文档下载.docx

上传人:b****1 文档编号:4428145 上传时间:2023-05-03 格式:DOCX 页数:28 大小:19.97KB
下载 相关 举报
c语言写的计算机串口通信软件Word格式文档下载.docx_第1页
第1页 / 共28页
c语言写的计算机串口通信软件Word格式文档下载.docx_第2页
第2页 / 共28页
c语言写的计算机串口通信软件Word格式文档下载.docx_第3页
第3页 / 共28页
c语言写的计算机串口通信软件Word格式文档下载.docx_第4页
第4页 / 共28页
c语言写的计算机串口通信软件Word格式文档下载.docx_第5页
第5页 / 共28页
c语言写的计算机串口通信软件Word格式文档下载.docx_第6页
第6页 / 共28页
c语言写的计算机串口通信软件Word格式文档下载.docx_第7页
第7页 / 共28页
c语言写的计算机串口通信软件Word格式文档下载.docx_第8页
第8页 / 共28页
c语言写的计算机串口通信软件Word格式文档下载.docx_第9页
第9页 / 共28页
c语言写的计算机串口通信软件Word格式文档下载.docx_第10页
第10页 / 共28页
c语言写的计算机串口通信软件Word格式文档下载.docx_第11页
第11页 / 共28页
c语言写的计算机串口通信软件Word格式文档下载.docx_第12页
第12页 / 共28页
c语言写的计算机串口通信软件Word格式文档下载.docx_第13页
第13页 / 共28页
c语言写的计算机串口通信软件Word格式文档下载.docx_第14页
第14页 / 共28页
c语言写的计算机串口通信软件Word格式文档下载.docx_第15页
第15页 / 共28页
c语言写的计算机串口通信软件Word格式文档下载.docx_第16页
第16页 / 共28页
c语言写的计算机串口通信软件Word格式文档下载.docx_第17页
第17页 / 共28页
c语言写的计算机串口通信软件Word格式文档下载.docx_第18页
第18页 / 共28页
c语言写的计算机串口通信软件Word格式文档下载.docx_第19页
第19页 / 共28页
c语言写的计算机串口通信软件Word格式文档下载.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

c语言写的计算机串口通信软件Word格式文档下载.docx

《c语言写的计算机串口通信软件Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《c语言写的计算机串口通信软件Word格式文档下载.docx(28页珍藏版)》请在冰点文库上搜索。

c语言写的计算机串口通信软件Word格式文档下载.docx

voidmain_menu(void);

voidinterruptcom_handler(void);

voidtrans(intc);

intreadchr(char*c);

voidtest_TX(void);

voidtest_RX(void);

unsignedshortCRC16(unsignedchar*message,unsignedshortdata_length);

intwait_chr(char*wc);

voidmanual_RTU(void);

voidrand_NOISE(void);

voidmanual(void);

voidbaud_rate(void);

voidINPUT(unsignedshortint*temp);

voidLoopBack_Test(void);

intlooptest1(void);

intlooptest2(void);

intloootest3(void);

voidabout(void);

voidmain(void)

{

intline,mask;

/*Commparameters*/

voidinterrupt(*old_handler)();

old_handler=getvect(IRQ+8);

/*OldISRadress*/

i_put=i_get=buffer;

/*Pointerinitialisation*/

memset(buffer,0,SIZE);

/*Bufferintialisation*/

baud=0x0c;

/*0x01=115200bps

0x02=57600bps

0x03=38400bps

0x06=19200bps

0x0c=9600bps*/

line=0x03;

/*8bits,nonparity,1stop*/

/*initialisation*/

outportb(COM+IER,0);

inportb(COM+LSR);

inportb(COM+MSR);

inportb(COM+IIR);

inportb(COM+RBR);

/*setspeed*/

outportb(COM+LCR,inportb(COM+LCR)|0x80);

outportb(COM+DLM,baud>

>

8);

outportb(COM+DLL,baud&

0xff);

outportb(COM+LCR,inportb(COM+LCR)&

0x7f);

/*setdataformat*/

outportb(COM+LCR,line);

outportb(COM+MCR,0x0b);

outportb(COM+IER,0x01);

/*setISRaddress*/

disable();

setvect(IRQ+8,com_handler);

enable();

mask=inportb(I8259M);

mask&

=~(1<

<

IRQ);

outportb(I8259M,mask);

/*clearthescreen*/

clrscr();

/*DisplayMainMenu*/

main_menu();

/*CloseSerialPort(COM1|COM2)*/

setvect(IRQ+8,old_handler);

mask|=(1<

/***********ENDOFFUNCTIONMAIN()**********/

}

voidmain_menu(void)

while

(1)

{

clrscr();

printf("

\n\nPC-BasedOscilloscopeTestProgram"

);

\n----------------------------------\n"

\nRXTerminal--hit1"

\nTXTerminal--hit2"

\nManualRTUframewithCRC--hit3"

\nManualRTUframenoCRC--hit4"

\nSimulateRandomNoise--hit5"

\nLoopbacktest--hit6"

\nChangeBaudRate--hit7"

\nAbout--hit8"

\nQuit--hitQ"

_loop1:

switch(getch())

{

case'

1'

:

test_RX();

break;

2'

test_TX();

3'

manual_RTU();

4'

manual();

5'

rand_NOISE();

6'

LoopBack_Test();

7'

baud_rate();

8'

about();

Q'

q'

return;

default:

goto_loop1;

}

}

voidinterruptcom_handler()

*i_put++=inportb(COM+RBR);

if(i_put==&

buffer[SIZE])i_put=buffer;

outportb(I8259,EOI);

voidtrans(intc)

while(!

(inportb(COM+LSR)&

0x20));

outportb(COM+THR,c);

intreadchr(char*c)

if(i_get==i_put)return(-1);

*c=*i_get++;

if(i_get==&

buffer[SIZE])i_get=buffer;

return(0);

voidtest_TX(void)

unsignedcharmessage[250];

intcount=0;

printf("

\n\nTXTerminal"

\n-----------"

\nTypeyourmessage,hit[ENTER]totransmit:

-\n\n"

/*FillMessageWith0xFF*/

memset(message,0xff,250);

gets(message);

//GetMessage

/*Print&

TransmitRS232COM1*/

\n\nSendingMessaging:

-\n"

while(count<

249&

&

message[count]!

=0xFF)

%c"

message[count]);

trans(message[count++]);

\n\nMessagesentsuccessfully."

test_RX();

//WaitforResponce

voidtest_RX(void)

unsignedcharch;

/*Displayinformationonscreen*/

\n\nRXTerminal"

\nWaitingformessage(pressakeytostop)\n"

/*LoopUntilKeyboardkeyishit*/

if(kbhit())

{

printf("

\nOperationAbortedbyUser!

!

\n"

return;

if((readchr(&

ch))==0)

ch);

/*FinishedRXTest-ReturnBacktoMainMenu*/

unsignedshortCRC16(unsignedchar*message,unsignedshortmessage_length)

unsignedshortCRC=0xFFFF,//CRCinitialisedwithall'

s

i,//LoopControl

temp;

//Tempforswap

while(message_length--)//Loopuntilallbytescalulated

CRC=CRC^(*message++);

for(i=0;

i++<

8;

)//Shiftall8-bits

if(CRC&

0x0001)CRC=(CRC>

1)^0xA001;

elseCRC>

=1;

temp=CRC&

0xFF;

//Tempstorageforswap

CRC=((CRC>

8)&

0xFF)+(temp<

//Swaphighamdlowbyte

return(CRC);

//Returncalulated16-bitCRC

intwait_chr(char*wc)

Delay:

Baud=9600,8-bits&

Start&

stop=10-bits

Theentiremessageframemustbetransmitted

asacontinuousstream.IFsilentformore

than1.5charactertime,therecevingdevice

flushesincompetemessage.

1.5X0.96=1.44msabout1.5ms

1.5ms(MaxGapbetweenCharacters)*/

chartimeout;

delay

(2);

//Delay1.5ms-MAXtimebetweencharacter'

if(readchr(wc)!

=0)

sound(70);

//Beepon

delay(100);

//Delay100ms

nosound();

//Beepoff

\n\n!

ErrorTimeout!

"

timeout=TRUE;

elsetimeout=FALSE;

returntimeout;

voidmanual_RTU(void)

unsignedcharRTU_frame[SIZE],//RTUFrame

CRC_HI,//HighbyteofCRC

CRC_LO;

//LowbyteofCRC

unsignedshortintcount=0,//Usedforloopcontrol

frame_length=0,//ThetotallengthofRTUframe

temp,//16-bittemp

CRC;

//16-bitCRC

\n\nManualRTUframewithaddedCRC"

\n---------------------------------"

\nEnterRTU_frameinbyte'

senter'

DF'

whenfinished"

count=0;

\nRTU_frame[%d](e.g01)="

count);

while(temp!

=0xDF)

Size_Temp=2;

INPUT(&

temp);

RTU_frame[count]=temp;

count++;

RTU_frame[%d](e.g01)="

count--;

/*CalulateCRCfortestmessage*/

CRC=CRC16(RTU_frame,count);

\nCalulatedCRC(Hex):

%X"

CRC);

/*Split16-bitCRCintohighandlowbytes*/

CRC_LO=CRC;

CRC_HI=CRC>

8;

/*AddCRCtoendofRTU*/

RTU_frame[count++]=CRC_HI;

RTU_frame[count]=CRC_LO;

frame_length=count;

\nTotalFrameLength(Dec):

%d"

frame_length+1);

/*ConstrunctingofRTUframeisnowcomplete*/

sendRTUframethroughRS232COM1*/

\n\nSendingRTUFrame(HEX):

=frame_length)

%X"

RTU_frame[count]);

trans(RTU_frame[count++]);

\n\nFinishedSendingRTUFrame"

i_get=i_put;

voidrand_NOISE(void)

unsignedshortinttemp;

//16-bittemp

\n\nSimulateRandomNoise"

\n-----------------------"

\nNodelaybetweenbytes--Hit1"

\nRandomdelay(0to100ms)betweembytes--hit2"

\nUsersetsdelayinmilliseconds--hit3"

\nCancel-ReturntoMainMenu--hit4"

switch(getch())

case'

\nSendingRandomnoise-delay=0(anykeytostop)"

while(!

kbhit())trans(rand()%0xff);

break;

\nSendingRandomnoise-delay=RAND(anykeytostop)"

kbhit())

{

delay(rand()%100);

trans(rand()%0xff);

}

\nDelay(ms)?

"

scanf("

%d"

&

printf("

SendingRandomnoise-delay=%dms(anykeytostop)"

temp);

delay(temp);

i_get=i_put;

/*ClearBuffer*/

voidmanual(void)

CRC_HI,//HighbyteofCRC

CRC_LO;

unsignedshortintcount=0,//Usedforloopcontrol

frame_length=0,//ThetotallengthofRTUframe

temp;

\n\nManualRTUframenoCRC"

\n-------------------------"

count=count-2;

voidbaud_rate(void)

intrate;

/*

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2