最新c语言串口通信范例范文模板 22页.docx
- 文档编号:3482776
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:17
- 大小:22.71KB
最新c语言串口通信范例范文模板 22页.docx
《最新c语言串口通信范例范文模板 22页.docx》由会员分享,可在线阅读,更多相关《最新c语言串口通信范例范文模板 22页.docx(17页珍藏版)》请在冰豆网上搜索。
最新c语言串口通信范例范文模板22页
本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!
==本文为word格式,下载后可方便编辑和修改!
==
c语言串口通信范例
篇一:
c语言串口通信范例
一个c语言的串口通信程序范例
标签:
分类:
技术笔记
c语言
串口通信
通信程序
it
最近接触一个项目,用HL-C1C激光位移传感器+易控组态软件完成生产线高度跳变检测,好久没有接触cc#,一些资料,找来做个记录,也许大家用的着#include
#include
#include
#include
#defineCOM2320x2f8
#defineCOMINT0x0b
#defineMaxBufLen500
#definePort82590x20
#defineEofInt0x20
staticintcomportaddr;
staticcharintvectnum;
staticunsignedcharmaskb;
staticunsignedcharBuffer[MaxBufLen];
staticintCharsInBuf,CircIn,CircOut;
staticvoid(interruptfar*OldAsyncInt)();
staticvoidinterruptfarAsyncInt(void);
voidInit_COM(intComPortAddr,unsignedcharIntVectNum,intBaud,unsignedcharData,unsignedcharStop,unsignedcharParity){
unsignedcharHigh,Low;
intf;
comportaddr=ComPortAddr;
intvectnum=IntVectNum;
CharsInBuf=0;CircIn=0;CircOut=0;
f=(Baud/100);
f=1152/f;High=f/256;
Low=f-High*256;
outp(ComPortAddr+3,0x80);
outp(ComPortAddr,Low);
outp(ComPortAddr+1,High);
Data=(Data-5)|((Stop-1)*4);
if(Parity==2)Data=Data|0x18;
elseif(Parity==1)Data=Data|0x8;
outp(ComPortAddr+3,Data);
outp(ComPortAddr+4,0x0a);
outp(ComPortAddr+1,0x01);
disable();
OldAsyncInt=getvect(IntVectNum);
setvect(IntVectNum,AsyncInt);
enable();
maskb=inp(Port8259+1);
if(IntVectNum==0x0c)outp(Port8259+1,maskb&0xef);elseoutp(Port8259+1,maskb&0xf7);}
staticvoidinterruptfarAsyncInt(void){
disable();
if(CharsInBuf Buffer[CircIn]=inp(comportaddr); if(CircIn elseCircIn=0; if(CircIn==CircOut)CircOut++; elseCharsInBuf++; enable(); outp(Port8259,EofInt); } voidRestore(void) { setvect(intvectnum,OldAsyncInt); outp(Port8259+1,maskb); } intGetCharInBuf(unsignedchar*Char){ intFlag; Flag=-1; if(CharsInBuf>0) { (*Char)=Buffer[CircOut]; if(CircOut CharsInBuf--; Flag=0; } returnFlag; } intSendChar(unsignedcharChar) { if((inp(comportaddr+5)&0x20)==0)return-1;outp(comportaddr,Char); return0; } main() { inti,c; unsignedcharInChar; Init_COM(COM232,COMINT,1200,8,1,0);while (1) { if(kbhit()) {if((InChar=getch())==27)break;elsewhile(SendChar(InChar));} if(GetCharInBuf(&InChar)==0) printf("%c",InChar); } Restore(); } 接收程序: #include #include #include #include #include #include #defineRXD0//接收 #defineTXD0//发送 #defineLSB0//波特率调节低8位 #defineMSB1//波特率调节高8位 #defineIER1//中断起用寄存器 #defineIIR2//中断标识寄存器 #defineLCR3//线路控制寄存器 #defineMCR4//调制解调器控制寄存器#defineLSR5//线路状态寄存器 #defineMSR6//调制解调器状态寄存器#defineIERV1 #defineOUT20x08 #defineERTS2 #defineEDTR1 #defineEMPTY0X20 #defineREADY0X30 #defineICREG0X20 #defineIMASKREG0X21 #defineEOI0X20 #defineWAITCOUNT5000 #defineBUFFLEN2048//用于存储字符的数组的界#defineALTE0X12 #defineALTQ0X10 #defineSER_BAUD_120096 #defineSER_BAUD_240048 #defineSER_BAUD_96000x0C #defineSER_BAUD_192006 #defineSER_STOP_10/*/1stopbitpercharacter*/#defineSER_STOP_24/*/2stopbitspercharacter*/#defineSER_BITS_50/*/send5bitcharacters*/ #defineSER_BITS_61/*/send6bitcharacters*/#defineSER_BITS_72/*/send7bitcharacters*/#defineSER_BITS_83/*/send8bitcharacters*/#defineSER_PARITY_NONE0/*/noparity*/#defineSER_PARITY_ODD8/*/oddparity*/#defineSER_PARITY_EVEN24/*/evenparity*/intport;intComNum;unsignedportaddr;unsignedportf;unsignedintbaudtable[]={0x180,0xc0,0x60,0x30,0x18,0x0c,0x06};unsignedcharparitytable[]={0x08,0x18,0x00,0x28,0x38};unsignedcharbuffer[BUFFLEN];//recvbufintbuffin=0;intbuffout=0;intincount=0;intoutcount=0;voidinterrupt(*vect_com)(...);voidputb(unsignedcharch)//writeachartotherecvbuf将中断得到的数据写到缓冲区{inttemp;temp=buffin;if(++buffin==BUFFLEN)buffin=0;if(buffin! =buffout){buffer[buffin]=ch;//printf("bufferin[%d]=%c",buffer[buffin]);//getch();}elsebuffin=temp;};unsignedchargetb()//readacharfromtherecvbuf{if(buffout! =buffin){if(++buffout==BUFFLEN)buffout=0;//printf("bufferout[%d]=%c",buffout,buffer[buffout]);return(buffer[buffout]);}elsereturn(0xff);}; 篇二: C51串口通讯C语言程序实例 C51串口通讯 #include #include //----------------------------------------------------------------------------- //16-bitSFRDefinitionsfor'F06x //----------------------------------------------------------------------------- sfr16RCAP2=0xCA;//Timer2capture/reload sfr16TMR2=0xCC;//Timer2 //----------------------------------------------------------------------------- //GlobalConstants //----------------------------------------------------------------------------- #defineBAUDRATE4800//BaudrateofUARTinbps #defineBAUDRATE19600 #defineSYSTEMCLOCK3062500 //----------------------------------------------------------------------------- //FunctionPrototypes //----------------------------------------------------------------------------- voidOSCILLATOR_Init(void); voidPORT_Init(void); voidUART0_Init(void); voidUART1_Init(void); //----------------------------------------------------------------------------- //GlobalVariables //----------------------------------------------------------------------------- #defineUART0_BUFFERSIZE8 unsignedcharUART0_Buffer[UART0_BUFFERSIZE]; unsignedcharUART0_Buffer_Size=0; unsignedcharUART0_Input_First=0; unsignedcharUART0_Output_First=0; unsignedcharisfirstdata,k,k1; unsignedcharUART0_R_Buf[UART0_BUFFERSIZE]; unsignedcharcheck1(void); unsignedcharcheck2(void); voidSendMesUart0(unsignedcharadr); voiddelay(unsignedlongtim) { while(tim! =0) tim--; } unsignedcharu1bufre[8]; unsignedcharu1REpnt; unsignedcharu1buftr[8]; unsignedcharu1TRpnt; unsignedcharresend; unsignedcharresend1; //----------------------------------------------------------------------------- //main()Routine //----------------------------------------------------------------------------- voidmain(void) { SFRPAGE=CONFIG_PAGE; WDTCN=0xDE;//Disablewatchdogtimer WDTCN=0xAD; OSCILLATOR_Init();//Initializeoscillator PORT_Init();//InitializecrossbarandGPIO UART0_Init();//InitializeUART0 UART1_Init(); EA=1; u1buftr[0]=0x31; u1buftr[1]=0x32; u1buftr[2]=0x33; u1buftr[3]=0x34; u1buftr[4]=0x35; u1buftr[5]=0x36; u1buftr[6]=0x37; u1buftr[7]=check1(); SFRPAGE=UART0_PAGE; //SendMesUart0(0x80); while (1) { //SFRPAGE=UART0_PAGE; //SendMesUart0(0x01); if(resend==1) { SFRPAGE=UART0_PAGE; //SendMesUart0(0x80); resend=0; } if(resend1==1) { resend1=0; SFRPAGE=UART1_PAGE; u1TRpnt=0; SBUF1=u1buftr[u1TRpnt]; u1TRpnt++; } } } //----------------------------------------------------------------------------- //InitializationSubroutines //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- //OSCILLATOR_Init //----------------------------------------------------------------------------- // //ReturnValue: None //Parameters: None // //Thisfunctioninitializesthesystemclocktouseanexternal22.1184MHz //crystal. // //----------------------------------------------------------------------------- voidOSCILLATOR_Init(void) { charSFRPAGE_SAVE=SFRPAGE;//SaveCurrentSFRpage SFRPAGE=CONFIG_PAGE;//SetSFRpage //OSCICN=0x80;//Setinternaloscillatortorun //atitsslowestfrequency SFRPAGE=SFRPAGE_SAVE;//RestoreSFRPAGE } //----------------------------------------------------------------------------- //PORT_Init //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- voidPORT_Init(void) { charSFRPAGE_SAVE=SFRPAGE;//SaveCurrentSFRpage SFRPAGE=CONFIG_PAGE;//SetSFRpage SFRPAGE=CONFIG_PAGE; XBR0=0x04; XBR2=0xC4; P0MDOUT=0x05; SFRPAGE=SFRPAGE_SAVE;//RestoreSFRpage } //----------------------------------------------------------------------------- //UART0_InitVariablebaudrate,Timer2,3 //----------------------------------------------------------------------------- voidUART0_Init(void) { charSFRPAGE_SAVE; SFRPAGE_SAVE=SFRPAGE;//PreserveSFRPAGE SFRPAGE=TMR2_PAGE; //TMR2CF=0x08;//19200 //RCAP2L=0xF6; //RCAP2H=0xFF; TMR2CN=0x00;//Timerin16-bitauto-reloaduptimermodeTMR2CF=0x08;//SYSCLKistimebase;nooutput; //upcountonly RCAP2=-((long)SYSTEMCLOCK/BAUDRATE/16); TMR2=RCAP2; TR2=1;//StartTimer2 SFRPAGE=UART0_PAGE; SCON0=0xD0; SCON0&=0xFC;//将TI0和RI0清零 SSTA0=0x5;//Clearallflags;DISablebaudratedoublerUseTimer2asRXandTXbaudratesource; ES0=1; SFRPAGE=SFRPAGE_SAVE;//RestoreSFRPAGE } //----------------------------------------------------------------------------- //InterruptServiceRoutines //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- //UART0_Interrupt //----------------------------------------------------------------------------- // //Thisroutineisinvokedwheneveracharacterisenteredordisplayedonthe //Hyperterminal. // //----------------------------------------------------------------------------- voidUART0_Interrupt(void)interrupt4 { SFRPAGE=0x00; if(SCON0&0x01){ UART0_R_Buf[k1]=SBUF0; k1++; SCON0&=0xfe; if(k1>=8){ k1=0; 篇三: C语言实现串口通信 摘要: 本文说明了异步串行通信(RS-232)的工作方式,探讨了查询和中断两种软件接口利弊,并给出两种方式的C语言源程序的I/O通道之一,以最简单方式组成的串行双工线路只需两条信号线和一条公共地线,因此串行通信既有线路简单的优点同时也有它的缺点,即通信速率无法同并行通信相比,实际上EIARS-232C在标准条件下的最大通信速率仅为20Kb/S。 尽管如此,大多数外设都提供了串行口接口,尤其在工业现场 RS-232C的应用更为常见。 IBMPC及兼
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新c语言串口通信范例范文模板 22页 最新 语言 串口 通信 范例 范文 模板 22