单片机IO口模拟串口程序(发送+接收)Word文档下载推荐.doc

上传人:b****3 文档编号:15406840 上传时间:2022-10-30 格式:DOC 页数:9 大小:52.50KB
下载 相关 举报
单片机IO口模拟串口程序(发送+接收)Word文档下载推荐.doc_第1页
第1页 / 共9页
单片机IO口模拟串口程序(发送+接收)Word文档下载推荐.doc_第2页
第2页 / 共9页
单片机IO口模拟串口程序(发送+接收)Word文档下载推荐.doc_第3页
第3页 / 共9页
单片机IO口模拟串口程序(发送+接收)Word文档下载推荐.doc_第4页
第4页 / 共9页
单片机IO口模拟串口程序(发送+接收)Word文档下载推荐.doc_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

单片机IO口模拟串口程序(发送+接收)Word文档下载推荐.doc

《单片机IO口模拟串口程序(发送+接收)Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《单片机IO口模拟串口程序(发送+接收)Word文档下载推荐.doc(9页珍藏版)》请在冰豆网上搜索。

单片机IO口模拟串口程序(发送+接收)Word文档下载推荐.doc

0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55

};

sbitnewTXD=P2^1;

//模拟串口的发送端设为P2.1

voidUartInit()

SCON=0x50;

//SCON:

serailmode1,8-bitUART

TMOD|=0x21;

//T0工作在方式1,十六位定时

PCON|=0x80;

//SMOD=1;

TH0=0xFE;

//定时器0初始值,延时417us,目的是令模拟串口的波特率为2400bpsfosc=11.0592MHz

TL0=0x7F;

//TH0=0xFD;

//定时器0初始值,延时417us,目的是令模拟串口的波特率为2400bpsfosc=18.432MHz

//TL0=0x7F;

}

voidWaitTF0(void)

while(!

TF0);

TF0=0;

TH0=0xFE;

//定时器重装初值fosc=11.0592MHz

TL0=0x7F;

//TH0=0xFD;

//定时器重装初值fosc=18.432MHz

//TL0=0x7F;

voidWByte(ucharinput)

//发送启始位

ucharj=8;

TR0=1;

newTXD=(bit)0;

WaitTF0();

//发送8位数据位

while(j--)

{

newTXD=(bit)(input&

0x01);

//先传低位

WaitTF0();

input=input>

>

1;

}

//发送校验位(无)

//发送结束位

newTXD=(bit)1;

TR0=0;

}

voidSendata()

for(i=0;

i<

sizeof(info);

i++)//外层循环,遍历数组

WByte(info[i]);

voidmain()

UartInit();

while

(1)

Sendata();

##############################################################################

*模拟接收程序,这个程序的作用从模拟串口接收数据,然后将这些数据发送到实际串口

*在单片机上模拟了一个串口,使用P3.2作为发送和接收端

*以P3.2模拟串口接收端,从模拟串口接收数据发至串口

#include<

typedefunsignedcharuchar;

//这里用来切换晶振频率,支持11.0592MHz和18.432MHz

//#defineF18_432

#defineF11_0592

uchartmpbuf2[64]={0};

//用来作为模拟串口接收数据的缓存

struct

ucharrecv:

6;

//tmpbuf2数组下标,用来将模拟串口接收到的数据存放到tmpbuf2中

ucharsend:

//tmpbuf2数组下标,用来将tmpbuf2中的数据发送到串口

}tmpbuf2_point={0,0};

sbitnewRXD=P3^2;

//模拟串口的接收端设为P3.2

SCON=0x50;

//SCON:

TMOD|=0x21;

//TMOD:

timer1,mode2,8-bitreload,自动装载预置数(自动将TH1送到TL1);

T0工作在方式1,十六位定时

PCON|=0x80;

//SMOD=1;

#ifdefF11_0592

TH1=0xE8;

//Baud:

2400fosc=11.0592MHz2400bps为从串口接收数据的速率

TL1=0xE8;

//计数器初始值,fosc=11.0592MHz因为TH1一直往TL1送,所以这个初值的意义不大

TH0=0xFF;

//定时器0初始值,延时208us,目的是令模拟串口的波特率为9600bpsfosc=11.0592MHz

TL0=0xA0;

#endif

#ifdefF18_432

TH1=0xD8;

//Baud:

2400fosc=18.432MHz2400bps为从串口接收数据的速率

TL1=0xD8;

//计数器初始值,fosc=18.432MHz因为TH1一直往TL1送,所以这个初值的意义不大

TH0=0xFF;

//定时器0初始值,延时104us,目的是令模拟串口的波特率为9600bpsfosc=18.432MHz

TL0=0x60;

IE|=0x81;

//中断允许总控制位EA=1;

使能外部中断0

TF0=0;

IT0=1;

//设置外部中断0为边沿触发方式

TR1=1;

//启动TIMER1,用于产生波特率

//定时器重装初值模拟串口的波特率为9600bpsfosc=11.0592MHz

TL0=0xA0;

#endif

TL0=0x60;

//接收一个字符

ucharRByte()

ucharOutput=0;

uchari=8;

TR0=1;

//启动Timer0

//定时器重装初值fosc=18.432MHz

//等过起始位

//接收8位数据位

while(i--)

Output>

=1;

if(newRXD)Output|=0x80;

//先收低位

WaitTF0();

//位间延时

TR0=0;

//停止Timer0

returnOutput;

//向COM1发送一个字符

voidSendChar(ucharbyteToSend)

SBUF=byteToSend;

TI);

TI=0;

if(tmpbuf2_point.recv!

=tmpbuf2_point.send)//差值表示模拟串口接收数据缓存中还有多少个字节的数据未被处理(发送至串口)

{

SendChar(tmpbuf2[tmpbuf2_point.send++]);

}

//外部中断0,说明模拟串口的起始位到来了

voidSimulated_Serial_Start()interrupt0

EX0=0;

//屏蔽外部中断0

tmpbuf2[tmpbuf2_point.recv++]=RByte();

//从模拟串口读取数据,存放到tmpbuf2数组中

IE0=0;

//防止外部中断

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 广告传媒

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1