📄 text1
字号:
//*****************************************
//slave1
//!@#$
//2006.5.15-
//*******************************************
#include <ADUC842.H>
#define localaddress 0x40 //slave 1
#define shakehand 0
#define keyframefeedback 7
sbit eTXD=P3^3;
struct data_to_host {
unsigned char k_ail;//keyframeflag/address instruction length
unsigned char dat[7];
}*globalp,globalbuf,global_send_buf;
unsigned char rbf_l,shf,trsf, gkeyframesendflag,shakehandflag,flag_send1_receive0,gbufready,flag_local;//receicvebeginflag_length,shake hand flag,transmit success flag
unsigned char code slaverespondcode[3]={9,8,7};
unsigned char transmitaddcheck,timesofshakehand,globalcheck,address,instruction,length,gcheck,slave,global_localaddress_flag;
void init();
void delay(unsigned long d);
void respondshakehand(void);
void info_send(struct data_to_host *p);
void uart_send(struct data_to_host *p);
void send(unsigned char d);
void setreceivetimer(unsigned char t);
void savekeyframe(void);
thenumof1(unsigned char d);
//******************************************************
main()
{
code struct data_to_host xx={0x8f,23,65,98,45,32,79,23 };
init();
globalp=&xx;
while(1);
//while(trsf==0);
// {
// info_send(&xx);
// }while(1);
}
//******************************************************
void savekeyframe(void)
{
}
//*****************************************
void init(void)
{
eTXD = 0; //disable the TXD
T3CON = 0x83; //set baud rate 9600
T3FD = 0x09;
SCON = 0x50; //mode 1,8bits
CFG842 = 0x01; //use p26and p27,use pll clock
PLLCON = 0x00; //16.777216MHz
EA=1;
ES=1;
gbufready=0;
global_localaddress_flag=0 ;//!@#$%^&@#^&
TI=0;
rbf_l=0xff;
trsf=0;
flag_send1_receive0=1;
}
//****************************************
void delay(unsigned long d)
{do{
d--;
}while(d>1);
}
//*************************************88
void send(unsigned char tosend)
{
SBUF=tosend;
while (!TI);
TI=0;
//delay(1000);
//P2=tosend;
}
//******************************************************
void respondshakehand(void)
{
eTXD=1;
send(0x02);
send('A');
send('B');
send('C');
eTXD=0;
ES=1;
//while(1);
/* global_send_buf.k_ail=0x02;
global_send_buf.dat[0]='A';
global_send_buf.dat[1]='B';
global_send_buf.dat[2]='C';
uart_send(&global_send_buf);
ES=0;
while(1);*/
}
//******************************************************
void uart_send(struct data_to_host *p)
{
unsigned char addcheck,quantityofdata,i;
eTXD=1;
ES=0;
send(p->k_ail);
//while(1);
addcheck=p->k_ail;
quantityofdata=(p->k_ail)&0x07;
//ES=0;
for(i=0;i<quantityofdata;i++)
{//delay(10000);
send(p->dat[i]);
addcheck+=p->dat[i];
}
send(addcheck);
flag_send1_receive0=1;
ES=1;
eTXD=0;
}
//******************************************************
void info_send(struct data_to_host *p)
{
uart_send(p);
rbf_l=0xff;
}
//******************************************************
//******************************************************
//******************************************************
//******************************************************
void rec() interrupt 4
{
unsigned char buf;
if(RI)
{
RI=0;
ES=0;
buf=SBUF;
if(0xff == rbf_l)
{
global_localaddress_flag=0;
rbf_l=(0x07&buf);
flag_local=0;
if(((0xc0)&buf)==localaddress)
{
flag_local=1;
gbufready=0;
instruction=0x38&buf;
// send(instruction);
global_localaddress_flag=1;
//send(0xbb);
globalcheck=buf;
trsf=0;
}
// send(global_localaddress_flag);//!@#$^&(#$%*(
// setreceivetimer(length);//set timer,divide buf
// send(rbf_l);
}
else
{
//send(0xdd);
if(global_localaddress_flag==0) //not local address,count the num. of the data
{
if(rbf_l==0)
{
// send(0x11);//cancel timer
}
rbf_l--;
//if(1 == rbf_l)
//send(0);
}
else
{
if(rbf_l!=0)
{
globalbuf.dat[rbf_l]=buf;//evalue the struct
globalcheck=globalcheck+buf;
//if(rbf_l==4)
//send(globalbuf.dat[rbf_l]);
rbf_l--;
}
else
{ //send(0xcc);
rbf_l--; //cancel timer
flag_send1_receive0=0;
//send(rbf_l);
//send(globalcheck);
if(globalcheck==buf)
{ //ES=0;
//send(globalbuf.dat[3]);
//send(0x33);
trsf=1;
if(instruction==shakehand)
{
respondshakehand();
gbufready=0;
}
else
{
gbufready=1;
info_send(globalp);
}
}
else
{ //send(0xaa);
if(gkeyframesendflag)
{
if(thenumof1(globalbuf.dat[0])>4) //number of '1'>4
savekeyframe();
}
else
{
trsf=0; //abort//
}
}
}
//rbf_l=0xff;
//global_localaddress_flag=0;
}
}
//if(rbf_l==0xff)
//send(0xee);
ES=1;
//RI=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -