STC双串口发送例子

#include "reg51.h"

#define FOSC 12000000L   //晶振12M

#define BAUD 9600

#define NONE_PARITY     0   //无校验位

#define ODD_PARITY      1   //奇校验

#define EVEN_PARITY     2   //偶校验

#define MARK_PARITY     3   //标记校验

#define SPACE_PARITY    4   //空校验

#define PARITYBIT EVEN_PARITY

#define S2RI  0x01

#define S2TI  0x02

#define S2RB8 0x04

#define S2TB8 0x08

sfr AUXR  = 0x8e;

sfr S2CON = 0x9a;

sfr S2BUF = 0x9b;

sfr BRT   = 0x9c;

sfr IE2   = 0xaf;

bit busy;

void SendData(char dat);

void SendString(char *s);

unsigned char  string[]={"hello world!\r\n"};

void main()

{

#if (PARITYBIT == NONE_PARITY)

S2CON = 0x5a;               //8位可变波特率 (无校验位)

#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)

S2CON = 0xda;               //9位可变波特率,校验位初始为1

#elif (PARITYBIT == SPACE_PARITY)

S2CON = 0xd5;               //9位可变波特率,校验位初始为0

#endif

//----串口1初始化------------------------------

SCON=0x40;   //设置串口方式1,REN=0;

PCON=0x80;   //波特率加倍

TMOD=0x20;   //定时器工作于方式2

TH1=0xf3;    //波特率4800

TR1=1;       //开启定时器1

//---------------串口2初始化-------------

BRT = -(FOSC/32/BAUD);      //设置独立波特率发生器的重载初值

AUXR = 0x14;                //独立波特率发生器工作在1T模式

IE2 = 0x01;                 //使能串口2中断

EA = 1;                     //开总中断

SendString("STC12C5A60S2\r\nUart2 Test !\r\n");
  //串口2发送

while(1)

{

unsigned char i=0;

while(string[i])    //等待字符串发完 //串口1发送

{

SBUF= string[i++];  //数据装入缓冲区

while(TI==0);       //等待发送完

TI=0;               //清除发送标志位

}

}

while(1);

}

void Uart2() interrupt 8 using 1

{

if (S2CON & S2RI)

{

S2CON &= ~S2RI;         //清除接收完成标志

P0 = S2BUF;             //P0显示串口数据

P2 = (S2CON & S2RB8);   //P2.2显示校验位

}

if (S2CON & S2TI)

{

S2CON &= ~S2TI;         //清除发送完成标志

busy = 0;

}

}

void SendData(char dat)

{

while (busy);               //等待上个数据发送完成

ACC = dat;                  //取得偶校验位P

if (P) //根据P来设置串口数据的校验位

{

#if (PARITYBIT == ODD_PARITY)

S2CON &= ~S2TB8;        //置校验位为0

#elif (PARITYBIT == EVEN_PARITY)

S2CON |= S2TB8;         //置校验位为1

#endif

}

else

{

#if (PARITYBIT == ODD_PARITY)

S2CON |= S2TB8;         //置校验位为1

#elif (PARITYBIT == EVEN_PARITY)

S2CON &= ~S2TB8;        //置校验位为0

#endif

}

busy = 1;

S2BUF = ACC;                //发送数据

}

void SendString(char *s)

{

while (*s)                  //判断字符串结束标志

{

SendData(*s++);         //发送字符

}

}

时间: 2024-08-25 13:42:14

STC双串口发送例子的相关文章

[ZigBee] 7、ZigBee之UART剖析(ONLY串口发送)

综述:USART0和USART1是串行通信接口,它们能够分别运行于异步UART模式或者同步SPI 模式.两个USART具有同样的功能,可以设置在单独的I/O 引脚. 1.UART 模式 UART 模式提供异步串行接口.在UART 模式中,接口使用2 线或者含有引脚RXD.TXD.可选RTS 和CTS 的4 线. UART 模式的操作具有下列特点: ● 8 位或者9 位负载数据● 奇校验.偶校验或者无奇偶校验● 配置起始位和停止位电平● 配置LSB 或者MSB 首先传送● 独立收发中断● 独立收发

STM32组合设备实现USB转双串口

USB转双串口,核心技术就在于组合设备(USB Composite)的实现,组合设备的实现,其核心技术在于描述符的实现,下面我们先给出描述符:设备描述符 [C] 纯文本查看 复制代码 ? 00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 00021 00022 00023 00024 00025 00026

关于STM32 USART(串口)发送数据丢失第一帧的真实原因探索

自我介绍 为什么要写个自我介绍?俗话说,光说不练假把式,光练不说傻把式, 因为本人一直很自负,感觉什么东西都可以很快上手(当然非对口专业知识要求高的技能除外),如果我不把这自负表现出来,感觉会憋出内伤. 本人于2015年毕业于电子科技大学,开始的理想是进入一家国外的游戏公司,但理想很丰满,现实很骨感,给育碧.2k Game.Gameloft.EA都投了简历,但都被无情pass掉了(在此吐槽一下,这些公司真的是想在校园里招本科生吗?明明是研究生的计算机图形学却成了这些公司对本科生的要求).后来毕业

C#串口通信—向串口发送数据,同步接收返回数据

最近写C#串口通信程序,系统是B/S架构.SerialPort类有一个DataReceived事件,用来接收串口返回的数据,但这种方式在C/S架构下很好用,但B/S就不好处理了.所以写了一个同步模式接收返回数据的方法,不使用DataReceived事件.经过测试,可以正常使用(不支持多线程调用). 一.Machine类 1.Machine类有一个静态变量,定义如下: private static SerialPort serialPort = null; 2.向串口发送数据,同步接收返回数据的方

串口发送数据——字符串发送与十六进制发送的区别

转自:http://blog.csdn.net/wityy/article/details/8234739 串口发送数据——字符串发送与十六进制发送的区别 在使用串口发送数据时可以选择字符串发送或者十六进制发送,通常情况下我们习惯选用字符串发送数据.关于两者的区别,需要从计算机存储数据的格式说起. 在计算机中,数据是以二进制的形式存储的,例如十进制 1(10)在计算机中用 0000 0001(2)来表示.我们在用串口发送数据的时候首先将待数据转换为对应的ASCII码,然后再将这些ASCII码按照

C语言通过串口发送AT指令

以下代码是通过串口发送AT指令: atcmd.c: #include <stdio.h> #include <string.h> #include "atcmd.h" static HANDLE hCom; static char com_name[32] = {0}; static int BaudRate; FILE *fp; int AT_ComOpen() { fp = fopen("debug.txt", "w"

C# ---串口发送接收数据实例

硬件设备: pH/ORP 电导率/TDS/盐度 溶解氧 2000/3000/5000/5500 变送器/控制器 设定: P-08:RS-485输出设定 P-11:485传输设定 设定这俩种的ID号 根据ID,对串口发送请求:接收串口返回的数据. C# ---串口发送接收数据实例

串口发送模块——1字节数据发送

此次试验旨在通过串口试验,讲述FPGA的硬件设计思想和通用设计流程.串口是电子设计中非常常见,可以说掌握了串口数据收发,就明白了最基本的时序操作.串口的数据收发过程有其固定的数据格式.下面是本次实验使用的数据格式,在满足串口格式规范前提下是可变的: 空闲状态下为高电平,当发送数据时,先发送低电平起始位,后从低位开始逐位发送有效数据比特,数据位位数由双方约定,此处设定为8位.可在数据位后添加数据校验位,但这不是必须的.发送完后发送高电平停止位并持续空闲状态直至下一次发送.虽然本次实验没有用到,但这

RX232串口发送

在进行工程调试的时候有时候需要对变量进行观察,SingnaTap II Logic Analyzer 只能对管脚进行观察,所以要观察内部的变量必须把内部的变量进行输出.一种方法是直接把变量定义成管脚通过signaltap II观察,一种是用显示器显示,另外一种是通过串口进行观察.本文主要写了串口发送的一些代码. 时序图: 起始位0 数据8bit 结束位1 一共10bit 输入50MHz通过megawizard 生成9600Hz比例系数为3/15625; 代码如下: module RX232_IN