标题:
51单片机串口把接收到的值再发回电脑端的源码
[打印本页]
作者:
毓枫
时间:
2018-3-10 23:55
标题:
51单片机串口把接收到的值再发回电脑端的源码
单片机源程序如下:
/**********************************************
波特率设置为9600,无奇偶校验
晶振11.0592MHz
---------------------------------------------*/
#include<reg52.h>
#include<intrins.h>
sfr P1M0 = 0x91;
sfr P1M1 = 0x92;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
#define FOSC 11059200
unsigned char temp[2];
//ms延时
void delayms(int t)
{
int i ;
for(;t>0;t--)
for(i=FOSC/13186;i>0;i--);
}
//串口初始化
void InitUART(int baud,char es)
{
char v ;
TMOD&=0x0f ;
TMOD|=0X20 ;
//T1方式2
v=256-((FOSC*10/12/32/baud+5)/10);
//四舍五入
TH1=v ;
TL1=v ;
TR1=1 ;
SCON=0X50 ;
ES=es ;
EA = 1; //全局中断允许
}
//发送单个字符
void sendbyte(char d)
{
SBUF=d;
while(TI==0);
//等待
TI=0 ;
//清除发送标志
}
void main(void)
{
P1M0 = 0xFF;
P1M1 = 0x00;
P2M0 = 0xFF;
P2M1 = 0x00;
InitUART(9600,1);
while(1)
{
delayms(100);
}
}
/******************************************************************/
/* 串口中断程序 */
/******************************************************************/
//串行中断服务程序
void UART_SER(void)interrupt 4
{
unsigned char i;
unsigned char a;
//定义临时变量
//判断是接收中断产生
if(RI)
{
RI = 0 ; //标志位清零
i = SBUF ; //读入缓冲区的值
if(i==0xAA)
{
temp[1] = P1;
temp[0] = P2;
a = temp[1] >> 4;
temp[1] = a;
sendbyte(temp[1]); //发送高4位数据
delayms(10);
sendbyte(temp[0]); //发送低4位数据
delayms(10);
}
//SBUF=Temp ; //把接收到的值再发回电脑端
}
if(TI) //如果是发送标志位,清零
TI=0 ;
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1