简述串口接收和发送数据的过程。

简述串口接收和发送数据的过程。,第1张

串行接口的接收和发送是对同一个地址(99H)两个物理控制的特殊寄存器SBUF进行读与写得,当向SBUF发写命令时,即向缓冲期SBUF装载并开始TXD引脚向外发送一帧数据,发送完便发送中断标志T1=1,在满足串行口接收中断标志位R1=0的条件下,置允许接收位REN=1就会接收一帧数据进行移位寄存器,并装载和接收到SBUF中,同时使R1=1当发读SBUF命令时(执行 MOVA SBUF)便由接收缓冲期SBUF的信息通过内部总线送到CPU

这个我们之前也做过,不过没有demo,我们都做成公司的产品了。首先你要去了解android的蓝牙api,以及手机与手机之间的,通信,然后你要做硬件和android通信,需要做一些小的变动,主要变动就是在数据流处理的地方,就不要用android的API了,就自己从最简单的数据流进行处理吧。我们就是这么做出来的。

您好,android蓝牙这方面还是很好搞的,因为大家的方式都是差不多的。先说说如何开启蓝牙设备和设置可见时间:
private void search() {
BluetoothAdapter adapter = BluetoothAdaptergetDefaultAdapter();
if (!adapterisEnabled()) {
adapterenable();
}
Intent enable = new Intent(BluetoothAdapterACTION_REQUEST_DISCOVERABLE);
enableputExtra(BluetoothAdapterEXTRA_DISCOVERABLE_DURATION, 3600); //3600为蓝牙设备可见时间
startActivity(enable);
Intent searchIntent = new Intent(this, ComminuteActivityclass);
startActivity(searchIntent);
}
首先,需要获得一个BluetoothAdapter,可以通过getDefaultAdapter()获得系统默认的蓝牙适配器,当然我们也可以自己指定,但这个真心没有必要,至少我是不需要的。然后我们检查手机的蓝牙是否打开,如果没有,通过enable()方法打开。接着我们再设置手机蓝牙设备的可见,可见时间可以自定义。

完成这些必要的设置后,我们就可以正式开始与蓝牙模块进行通信了:
public class ComminuteActivity extends Activity {
private BluetoothReceiver receiver;
private BluetoothAdapter bluetoothAdapter;
private List<String> devices;
private List<BluetoothDevice> deviceList;
private Bluetooth client;
private final String lockName = "BOLUTEK";
private String message = "000001";
private ListView listView;
@Override
public void onCreate(Bundle savedInstanceState) {
superonCreate(savedInstanceState);
setContentView(Rlayoutsearch_layout);
listView = (ListView) thisfindViewById(Ridlist);
deviceList = new ArrayList<BluetoothDevice>();
devices = new ArrayList<String>();
bluetoothAdapter = BluetoothAdaptergetDefaultAdapter();
bluetoothAdapterstartDiscovery();
IntentFilter filter = new IntentFilter(BluetoothDeviceACTION_FOUND);
receiver = new BluetoothReceiver();
registerReceiver(receiver, filter);
listViewsetOnItemClickListener(new AdapterViewOnItemClickListener() {
@Override
public void onItemClick(AdapterView<> parent, View view, int position, long id) {
setContentView(Rlayoutconnect_layout);
BluetoothDevice device = deviceListget(position);
client = new Bluetooth(device, handler);
try {
clientconnect(message);
} catch (Exception e) {
Loge("TAG", etoString());
}
}
});
}
@Override
protected void onDestroy() {
unregisterReceiver(receiver);
superonDestroy();
}
private final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msgwhat) {
case BluetoothCONNECT_FAILED:
ToastmakeText(ComminuteActivitythis, "连接失败", ToastLENGTH_LONG)show();
try {
clientconnect(message);
} catch (Exception e) {
Loge("TAG", etoString());
}
break;
case BluetoothCONNECT_SUCCESS:
ToastmakeText(ComminuteActivitythis, "连接成功", ToastLENGTH_LONG)show();
break;
case BluetoothREAD_FAILED:
ToastmakeText(ComminuteActivitythis, "读取失败", ToastLENGTH_LONG)show();
break;
case BluetoothWRITE_FAILED:
ToastmakeText(ComminuteActivitythis, "写入失败", ToastLENGTH_LONG)show();
break;
case BluetoothDATA:
ToastmakeText(ComminuteActivitythis, msgarg1 + "", ToastLENGTH_LONG)show();
break;
}
}
};
private class BluetoothReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intentgetAction();
if (BluetoothDeviceACTION_FOUNDequals(action)) {
BluetoothDevice device = intentgetParcelableExtra(BluetoothDeviceEXTRA_DEVICE);
if (isLock(device)) {
devicesadd(devicegetName());
}
deviceListadd(device);
}
showDevices();
}
}
private boolean isLock(BluetoothDevice device) {
boolean isLockName = (devicegetName())equals(lockName);
boolean isSingleDevice = devicesindexOf(devicegetName()) == -1;
return isLockName && isSingleDevice;
}
private void showDevices() {
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, androidRlayoutsimple_list_item_1,
devices);
listViewsetAdapter(adapter);
}
}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13359701.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-21
下一篇 2023-07-21

发表评论

登录后才能评论

评论列表(0条)

保存