Java实现与51单片机串口通信 Serie Library

本文介绍了如何使用Java通过SerieLibrary库与51单片机进行串口通信,包括项目结构、测试代码示例以及51单片机的C语言实现。展示了初始化、发送和接收数据的关键步骤,并提供了完整的测试程序和单片机代码片段。
摘要由CSDN通过智能技术生成

Java实现与51单片机串口通信 Serie Library

项目结构

Program Struct

 

测试代码

package com.lius.testS;

import com.lius.series.seriesTool;

/**
 * @author 19862
 * 51单片机串口通信 Serie Library测试程序
 * 
 * seriesTool.INIT(串口号, 比特率);	//初始化
 * seriesTool.SEND(发送数据);		//向串口发送数据
 * String receiveData = seriesTool.GET(); //接收串口数据
 */
public class testSeries {
public static void main(String[] args) {
	seriesTool.INIT("COM3", 9600);
	for(int i =0;i<5;i++) {
		seriesTool.SEND("$51 BEEP#");//串口通信发送蜂鸣器蜂鸣指令
		System.out.println(seriesTool.GET());//获取串口返回结果
	}
}
}

51单片机串口通信代码

#include "reg51.h"
#include <stdio.h>
#include <intrins.h>
#include "string.h"

sbit beep = P2 ^ 3 ;
sbit led1 = P1 ^ 0 ; 
bit startBit = 0;
bit newLineReceive = 0;
unsigned char inputString[50];

	void initSeries(void)
{
	SCON= 0x50;
	TMOD= 0x20;
	TH1 = 0xfd;
	TL1 = 0xfd;
	TR1 = 1;
	ES  = 1;
	EA  = 1;
}


	void delay(unsigned int ms)
{
	unsigned int begin = 0;
	unsigned int loop = 112;
	for(;begin<ms;begin++)
		for(loop=112;loop>0;loop--);
}

	void sendData(unsigned char* dataStr)//串口发送数据
{
	ES = 0;//关闭串口中断
	while(*dataStr!=0)
	{
		SBUF = *dataStr;
		while(TI==0);
		TI = 0;
		dataStr++;
	}
	ES = 1;
}


	void main()
{
	initSeries();
	
	while(1){
		if(newLineReceive)
		{
			if(inputString[1]=='5' && inputString[2]=='1')
			{
				led1 = 0;
				if( inputString[4]=='B' && inputString[5]=='E' && inputString[6]=='E' && inputString[7]=='P')
				{
					beep = 0;
					delay(200);
					beep = 1;
				}
			}
			memset(inputString,0x00,sizeof(inputString));
			newLineReceive = 0;			
			led1 = 1;
			sendData("ok");
		}
	}
}



	void receiveData() interrupt 4
{
	unsigned char n;
	static int num = 0;
	if(RI){
		RI = 0;
		n = SBUF;
		if(n == '$')
		{
			led1 = 0;
			startBit = 1;
			num = 0;
		}
		if(startBit == 1)
		{
			inputString[num] = n;
			num++;
		}
		if(startBit == 1 && n == '#')
		{
			newLineReceive = 1;
			num = 0;
			startBit = 0;
		}
		if(num>=50){
			startBit = 0;
			num = 0;
			newLineReceive = 0;
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值