单片机IO口模拟串口程序(发送+接收)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
WByte(i nfo[i]);
}
}
void main()
{
UartI nit();
while (1)
{
Se ndatFra Baidu bibliotek();
}
}
II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II
a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
送到TL1);T0工作在方式1,十六位定时
PCON|=0x80;//SMOD=1;
#ifdef F11_0592
TH1=0xE8 ; // Baud:2400fosc=11.0592MHz 2400bps为从串口接收数据的速率
TL1=0xE8;//计数器初始值,fosc=11.0592MHz因为TH1一直往TL1送,所以这个初值的意义不大
*在单片机上模拟了一个串口,使用P2.1作为发送端
*把单片机中存放的数据通过P2.1作为串口TXD发送出去
***************************************************************/
#in elude<reg51.h>
#i nclude<stdio.h>
THO=OxFF;//定时器0初始值,延时208us,目的是令模拟串口的波特率为9600bps
fosc=11.0592MHz
//发送8位数据位
while (j--)
{
newTXD=(bit)(i nput&0x01);
WaitTF0();
in put= in put>>1;
}
//发送校验位(无)
//发送结束位
n ewTXD=(bit)1;
WaitTF0();
TR0=0;
}
void Sendata()
{
for (i=0;i<sizeof(info);i++)
}tmpbuf2_poi nt={0,0};
sbit newRXD=P3A2 ; //模拟串口的接收端设为P3.2
void Uartl nit()
{
SCON=0x50 ; // SCON: serail mode 1, 8-bit UART
TMOD|=0x21 ; // TMOD: timer 1, mode 2, 8-bit reload,自动装载预置数(自动将TH1
//#defi ne F18_432
#defi neF11_0592
uchar tmpbuf2[64]={0};
//用来作为模拟串口接收数据的缓存
struct
{
uchar recv :6 ;//tmpbuf2数组下标,用来将模拟串口接收到的数据存放到tmpbuf2中
uchar send:6;//tmpbuf2数组下标,用来将tmpbuf2中的数据发送到串口
/***************************************************************
*模拟接收程序,这个程序的作用从模拟串口接收数据,然后将这些数据发送到实际 串口
*在单片机上模拟了一个串口,使用P3.2作为发送和接收端
*以P3.2模拟串口接收端,从模拟串口接收数据发至串口
***************************************************************/
#in elude<reg51.h>
#i nclude<stdio.h>
#in clude<stri ng.h>
typedefunsigned char uchar ;
//这里用来切换晶振频率,支持11.0592MHz和18.432MHz
IITH0=0xFD;II定时器0初始值,延时417us,目的是令模拟串口的波特率
为2400bps fosc=18.432MHz
IITL0=0x7F;II定时器0初始值,延时417us,目的是令模拟串口的波特率为
2400bps fosc=18.432MHz
}
void WaitTF0( void )
{
前一阵一直在做单片机的程序,由于串口不够,需要用10口来模拟出一个串口。 经过若干曲
折并参考了一些现有的资料,基本上完成了。现在将完整的测试程序,以及其中一些需要总 结的部分贴出来。
程序硬件平台:11.0592M晶振,STC单片机(兼容51)
/***************************************************************
while (!TFO);
TFO=O;
THO=OxFE;//定时器重装初值fosc=11.0592MHz
TL0=0x7F;//定时器重装初值fosc=11.0592MHz
void WByte(uchar in put)
{
//发送启始位
uchar j=8;
TR0=1;
newTXD=(bit)O;
WaitTF0();
// SCON: serail mode 1,8-bit UART
// T0工作在方式1,十六位定时
//SMOD=1;
0xFE;II定时器0初始值,延时417us,目的是令模拟串口的波特率为
2400bps fosc=11.0592MHz
TL0=0x7F;II
2400bps fosc=11.0592MHz
#in clude<stri ng.h>
typedef unsigned char uchar;
int i;
uchar code in fo[]=
{
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x5
5
};
WByte(i nfo[i]);
}
}
void main()
{
UartI nit();
while (1)
{
Se ndatFra Baidu bibliotek();
}
}
II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II
a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
送到TL1);T0工作在方式1,十六位定时
PCON|=0x80;//SMOD=1;
#ifdef F11_0592
TH1=0xE8 ; // Baud:2400fosc=11.0592MHz 2400bps为从串口接收数据的速率
TL1=0xE8;//计数器初始值,fosc=11.0592MHz因为TH1一直往TL1送,所以这个初值的意义不大
*在单片机上模拟了一个串口,使用P2.1作为发送端
*把单片机中存放的数据通过P2.1作为串口TXD发送出去
***************************************************************/
#in elude<reg51.h>
#i nclude<stdio.h>
THO=OxFF;//定时器0初始值,延时208us,目的是令模拟串口的波特率为9600bps
fosc=11.0592MHz
//发送8位数据位
while (j--)
{
newTXD=(bit)(i nput&0x01);
WaitTF0();
in put= in put>>1;
}
//发送校验位(无)
//发送结束位
n ewTXD=(bit)1;
WaitTF0();
TR0=0;
}
void Sendata()
{
for (i=0;i<sizeof(info);i++)
}tmpbuf2_poi nt={0,0};
sbit newRXD=P3A2 ; //模拟串口的接收端设为P3.2
void Uartl nit()
{
SCON=0x50 ; // SCON: serail mode 1, 8-bit UART
TMOD|=0x21 ; // TMOD: timer 1, mode 2, 8-bit reload,自动装载预置数(自动将TH1
//#defi ne F18_432
#defi neF11_0592
uchar tmpbuf2[64]={0};
//用来作为模拟串口接收数据的缓存
struct
{
uchar recv :6 ;//tmpbuf2数组下标,用来将模拟串口接收到的数据存放到tmpbuf2中
uchar send:6;//tmpbuf2数组下标,用来将tmpbuf2中的数据发送到串口
/***************************************************************
*模拟接收程序,这个程序的作用从模拟串口接收数据,然后将这些数据发送到实际 串口
*在单片机上模拟了一个串口,使用P3.2作为发送和接收端
*以P3.2模拟串口接收端,从模拟串口接收数据发至串口
***************************************************************/
#in elude<reg51.h>
#i nclude<stdio.h>
#in clude<stri ng.h>
typedefunsigned char uchar ;
//这里用来切换晶振频率,支持11.0592MHz和18.432MHz
IITH0=0xFD;II定时器0初始值,延时417us,目的是令模拟串口的波特率
为2400bps fosc=18.432MHz
IITL0=0x7F;II定时器0初始值,延时417us,目的是令模拟串口的波特率为
2400bps fosc=18.432MHz
}
void WaitTF0( void )
{
前一阵一直在做单片机的程序,由于串口不够,需要用10口来模拟出一个串口。 经过若干曲
折并参考了一些现有的资料,基本上完成了。现在将完整的测试程序,以及其中一些需要总 结的部分贴出来。
程序硬件平台:11.0592M晶振,STC单片机(兼容51)
/***************************************************************
while (!TFO);
TFO=O;
THO=OxFE;//定时器重装初值fosc=11.0592MHz
TL0=0x7F;//定时器重装初值fosc=11.0592MHz
void WByte(uchar in put)
{
//发送启始位
uchar j=8;
TR0=1;
newTXD=(bit)O;
WaitTF0();
// SCON: serail mode 1,8-bit UART
// T0工作在方式1,十六位定时
//SMOD=1;
0xFE;II定时器0初始值,延时417us,目的是令模拟串口的波特率为
2400bps fosc=11.0592MHz
TL0=0x7F;II
2400bps fosc=11.0592MHz
#in clude<stri ng.h>
typedef unsigned char uchar;
int i;
uchar code in fo[]=
{
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x5
5
};