糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > 通讯rs232c语言编程 基于C51的RS232基本通信程序

通讯rs232c语言编程 基于C51的RS232基本通信程序

时间:2022-11-17 19:47:09

相关推荐

通讯rs232c语言编程 基于C51的RS232基本通信程序

由于即将用到C#与单片机的通信程序,我回头使用了STC12系列的单片机,暂时停止AVR。因为AVR的编程器不属于RS232接口通信,弄起来麻烦。为了兼容性,我把程序的名称定义为和AVR里的名称一样,而且使用回调方式,让应用程序能够知道单片机现在发生了什么。编译器:Keil程序如下:

/**************************************** 函数说明*******************************************************

本程序由discovery编写,基于8位UART通信

本程序占用TIMER1,并且占用using2寄存器组 使用本函数建议其它程序不要使用TIMER1 需要在系统里指定UART中断回调处理函数

void initUSART( // 初始化UART

char ie,// 中断使能

unsigned long baud, 波特率

void (*function)(char style) 指向中断回调处理程序的指针

)

void sendToUsart(char add,

char *pStr,

unsigned int lenth,

void (*function)(char style)) 向UARTadd子机发送pStr里的lenth个字节数据,并回调函数设置为function

void proc_uart(char style)

{

switch(style)

{

case ON_TXD_OVER://UART发送完毕

break;

case ON_RXD_OVER://UART接收完毕

break;

}

}

**************************************************************************************************************/

#ifndef _C51_RS232_H_

#define _C41_RS232_H_

#include "c:\inc\messagedef.h"

#include "c:\inc\status.h"

#define ReadUSART() (SBUF)

#define SendUSART(x) (SBUF=(x))

#define ReadRXB8() (RB8)

#define seTXD() (P3_1=1)

#define clTXD() (P3_1=0)

#define seTXB8() (TB8=1)

#define clTXB8() (TB8=0)

#define seMPCM() (SM2=1)

#define clMPCM() (SM2=0)

struct

{

char add;

unsigned char *pSend;

unsigned char *pRead;

unsigned char sendLenth;

unsigned char readLenth;

void (*function)(char style);

}USART;

void initUSART(

char ie,

unsigned long baud,

void (*function)(char style)

)

{

float x;

PCON&=0x7F;

x=FREQ_CPU/(baud*12*32);

if(x<2);

{

PCON=0x80;

x=FREQ_CPU/(baud*12*16);

}

TMOD=(TMOD&0x0F)+0x20;

TL1=TH1=0x100-x;

TR1=1;

SCON=0x50;//SM1=1;REN=1;

USART.function=function;

ES=ie;

}

void sendToUsart(char *pStr,unsigned int lenth,void (*function)(char style))

{

USART.pSend=pStr+1;

USART.sendLenth=lenth?lenth-1:0;

USART.function=function;

SendUSART(*pStr++);

}

void USART_HANDLER() interrupt IRQ_UARTusing 2

{

if(TI)

{

TI=0;

if(USART.sendLenth)

{

SBUF=*USART.pSend++;

USART.sendLenth--;

}

else

USART.function(ON_TXD_OVER);

}

else

{

RI=0;

if(USART.readLenth)

{

USART.readLenth--;

*USART.pRead++=SBUF;

if(USART.readLenth==0)

{

USART.function(ON_RXD_OVER);

}

}

else

{

USART.function(ON_RXD_EMPTY);

}

}

}

#endif

这里以上就是我的RS232.h

在main()里添加这样两行代码:

char sbuf[]="Hello Visual C# ";

initUSART(ENABLE,9600,NULLFUNCTION1);

sendToUsart(sizeof(sbuf),sbuf,NULLFUNCTION1);

在串口助手里就可以看到Hello Visual C# 了。很简单吧。

如果Keil支持C++的话,那会更简单。

如果觉得《通讯rs232c语言编程 基于C51的RS232基本通信程序》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。