广告联系 设为首页 收藏本站 联系站长

网站首页 电子技术 单片机 PLC技术 微机接口 测试技术 控制理论 资源下载 嵌入式系统 工控论坛


现在位置:首页>>文档中心
文档搜索
下载资源搜索

互联网 www.jinhill.com
智能型电话远程遥控器
MCS-51系列单片机应用及接…
世界传感器市场分析(29)——…
应用VB4.0实现工业控制的实…
设计了一个3线IO传输
51单片机串口调试程序一列(不…
硬件工程师面试试题
Java串口通讯
80C51 IO口模拟串口通?…
程序员面试试题
    为提高锦山网在同类型网中的知名度,本站从即日起正式开放免费刊登电子产品广告业务!
    请你做好与本站内容相关的广告媒体,注意与本站版面的搭配,在不影响本站的美观的前提下本站从提交的广告中抽取精彩广告免费刊登在本站相关页面上。
    发布广告相关信息请阅读这里
        ——站长于2005-08-16发布

80C51 IO口模拟串口通?C源程序
来自:陈波,时间:2006-08-18 15:01:01

     #include <reg51.h>
sbit BT_SND =P1^0;
sbit BT_REC =P1^1;
/**********************************************

IO 口模拟232通讯程序

使用两种方式的C程序 占用定时器0 

**********************************************/

#define MODE_QUICK

#define F_TM F0

#define TIMER0_ENABLE  TL0=TH0; TR0=1;
#define TIMER0_DISABLE TR0=0;

sbit ACC0=   ACC^0;
sbit ACC1=   ACC^1;
sbit ACC2=   ACC^2;
sbit ACC3=   ACC^3;
sbit ACC4=   ACC^4;
sbit ACC5=   ACC^5;
sbit ACC6=   ACC^6;
sbit ACC7=   ACC^7;

void IntTimer0() interrupt 1
{
F_TM=1;
}
//发送一个字符
void PSendChar(unsigned char inch)
{
#ifdef MODE_QUICK 
ACC=inch;

F_TM=0;
BT_SND=0; //start bit 
TIMER0_ENABLE; //启动
while(!F_TM);

BT_SND=ACC0; //先送出低位
F_TM=0;
while(!F_TM);

BT_SND=ACC1; 
F_TM=0;
while(!F_TM);

BT_SND=ACC2; 
F_TM=0;
while(!F_TM);

BT_SND=ACC3; 
F_TM=0;
while(!F_TM);

BT_SND=ACC4; 
F_TM=0;
while(!F_TM);

BT_SND=ACC5; 
F_TM=0;
while(!F_TM);

BT_SND=ACC6; 
F_TM=0;
while(!F_TM);

BT_SND=ACC7; 
F_TM=0;
while(!F_TM);

BT_SND=1; 
F_TM=0;
while(!F_TM);


TIMER0_DISABLE; //停止timer
#else
unsigned char ii;

ii=0;

F_TM=0;
BT_SND=0; //start bit 
TIMER0_ENABLE; //启动
while(!F_TM);

while(ii<8)
{
if(inch&1)
{
BT_SND=1;
}
else
{
BT_SND=0;
}
F_TM=0;
while(!F_TM);
ii++;
inch>>=1;
}
BT_SND=1; 
F_TM=0;
while(!F_TM);

#endif 
TIMER0_DISABLE; //停止timer
}
//接收一个字符
unsigned char PGetChar()
{
#ifdef MODE_QUICK 

TIMER0_ENABLE; 
F_TM=0;
while(!F_TM); //等过起始位
ACC0=BT_REC;

TL0=TH0;

F_TM=0;
while(!F_TM);
ACC1=BT_REC;

F_TM=0;
while(!F_TM);
ACC2=BT_REC;

F_TM=0;
while(!F_TM);
ACC3=BT_REC;

F_TM=0;
while(!F_TM);
ACC4=BT_REC;

F_TM=0;
while(!F_TM);
ACC5=BT_REC;

F_TM=0;
while(!F_TM);
ACC6=BT_REC;

F_TM=0;
while(!F_TM);
ACC7=BT_REC;

F_TM=0;

while(!F_TM)
{
if(BT_REC)
{
break;

}
TIMER0_DISABLE; //停止timer
return ACC;
#else
unsigned char rch,ii;
TIMER0_ENABLE; 
F_TM=0;
ii=0;
rch=0;
while(!F_TM); //等过起始位

while(ii<8)
{
rch>>=1;
if(BT_REC)
{
rch|=0x80;
}
ii++;
F_TM=0;
while(!F_TM);

}
F_TM=0;
while(!F_TM)
{
if(BT_REC)
{
break;
}

}
TIMER0_DISABLE; //停止timer
return rch;

#endif 

}
//检查是不是有起始位
bit StartBitOn()
{
return  (BT_REC==0);

}
void main()
{
unsigned char gch;

TMOD=0x22; /*定时器1为工作模式2(8位自动重装),0为模式2(8位
自动重装) */
PCON=00;

TR0=0; //在发送或接收才开始使用
TF0=0; 
TH0=(256-96); //9600bps 就是 1000000/9600=104.167微秒 执行的
timer是
//             
104.167*11.0592/12= 96 
TL0=TH0;
ET0=1;
EA=1;

PSendChar(0x55);
PSendChar(0xaa);
PSendChar(0x00);
PSendChar(0xff);

while(1)
{
if(StartBitOn())
{
gch=PGetChar();
PSendChar(gch);
}
}

}
 

Google
 
--------------------------------------------------------------------------------------------
发布者信息:陈波 邮件 主页 IP:61.149.61...
-------------------------------------------------------------------------------------------- 本站所载文章力求原创,部分资料转载自网上,转载文章均要求发布者注明出处。
若您认为某些文章侵犯了您的权益,请通知我们,我们将在最短的时间内删除有关文章。
如果您对文章内容有任何心得或异议,请到锦山工控论坛发表高见!
 

Copyright© 2004-2008 Jinhill.Com , All Rights Reserved
联系电话:010-67801059 :42873774、13156987
webmaster@jinhill.com
皖ICP备05005472号
地址:北京市经济技术开发区荣华中路11号,邮编:100176