📄 master.c
字号:
/***********************************
filename: master_901.c
fuction: 主机单总线简单模拟
作者: 辣花旮
时间: 2004。9.23
基本功能描述: 我要利用单总线一次性完成32bit的传输,SAL32就是那个32位的数据,
SAL32_0为最低位,SAL32_21为最高位,至于为什么最低为是SAL32^7,最高位是SAL32^24,大家不放软件模拟一下看看。。。这一点当时还真浪费了我不少时间
**********************************/
#include"aduc834.h"
#include"外部变量.h"
#include<intrins.h>
extern control();
unsigned long data dk;
unsigned long data AL32
sbit AL32_0 =SAL32^7;
sbit AL32_31 =SAL32^24;//
bit sub_error;
void m_us100() //delay 100.09us
{}
void m_us50() //delay 10
{}
void m_us15() //delay 15.26
{}
void al_sent()
{static unsigned int backt,tim;
unsigned int i;
AL2=1;
dk=AL32;
AL1=1;
AL1=0;//拉低总线,开始联络
m_us100();
m_us100();
m_us100();
m_us100();
m_us100();
AL1=1;AL1=1;//5秒后拉高总线,等待恢复
backt=0;
sent_tt++;
if(sent_tt>=8){sent_tt=0;sent_cont=0;} //判断下位机工况,如果在8次试联络中,下位机超过3次,认为下位机非正常工作
while(AL1==1)
{backt++;
if(backt>600){sent_cont++;backt=0;break;}//如果一定的时间内上位机无答复,认为本次联络失败
}
if(sent_cont>=3){sub_error=1;}
else{sub_error=0;}
tim=0;
backt=0;
while(AL1==0)
{
tim++;backt++;
if(backt>=600){break;} //如果低电平持续时间太长,认为本次失败。
}
m_us15();
AL2=1;
if(tim>=5) //握手成功,开始通讯
{for(i=0;i<32;i++)
{EA=0;
AL1=0;AL1=0;
m_us15();
AL1=AL_0;
EA=1; //这部分禁止中断,其余时间,可以中断
AL32=_lrol_(AL32,1);//此处绝对不能用"<<"来移位,因为这是32位数据。
m_us50();
AL1=1;
m_us15();
}
}
AL32=dk;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -