📄 can.c
字号:
#include <reg51.h> // SFR declarations
#include <stdio.h>
#include <ABSACC.H>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit MODE1LED = P1^0; // LED: '1' = ON; '0' = OFF
sbit MODE2LED = P1^1; // LED: '1' = ON; '0' = OFF
sbit MODE3LED = P1^2; // LED: '1' = ON; '0' = OFF
sbit clk = P0^1;
sbit date = P0^0;
sbit outclk = P0^3;
sbit outdate = P0^2;
//sbit kai = P3^7;
bdata uchar tt,qq;
sbit flag=tt^7;
sbit flag1=tt^0;
sbit flag2=qq^0;
void PORT_Init (void);
void UART0_Init (void);
void delay40us(void) ;
void sent_date(uchar s_data);
uchar code ID[32]="adfaeasdfa";//{0,1,2,3,4,5,6,7,8,9};
//------------------------------------------------------------------------------------
// MAIN Routine
//------------------------------------------------------------------------------------
void main (void)
{
uchar s,m1,m2=0,m3=0x11,m4,m5,m6,m7;
//uint c;
//WDTCN = 0xde; //closed watchdog
//WDTCN = 0xad; //closed watchdog
//PORT_Init (); //初始化端口
UART0_Init (); //初始化UART
P1=0xFF;
MODE1LED=0;
P2=0x11;
while(1)
{
if(RI==1) //接受串口数据;
{
m6=SBUF;
if(m6==0x11||m6==0xff||m6==0x0)
m3=m6;
RI=0;
}
if(m3==0x11) //正常模式;
{
P2=0x11;
P1=0x06;
}
if(m3==0) //放脚本模式;
{
P2=0x0f;
P1=0x03;
while(m6==0)
{
if(RI==1)
{
m7=SBUF;
if(m7==0x11||m7==0xff||m7==0x0||m7==0xfe)
{
if(m7==0x11||m7==0xff||m7==0x0)
{
m6=m7;
m3=m6;
}
else
{
for(s=0;s<32;s++)
{
SBUF=ID[s];
while(TI==0);
TI=0;
}
}
}
else
sent_date(m7);
RI=0;
}
}
}
if(m3==0xff) //录脚本模式
{
P2=0;
P1=0x05;
if(clk==0)
{
if(date==0)
{ m1=1;
while(m1==1)
{
if(clk==1)
m1=0;
}
for(s=0;s<8;s++)
{
while(m1==0)
{
if(clk==0)
{
m1=1;
flag=date;
if(flag==1)
m2=m2+1;
}
}
while(m1==1)
{
if(clk==1)
m1=0;
}
if(s!=7)
tt=tt>>1;
}
while(m1==0)
{
if(clk==0)
{
m1=1;
if(date==1)
m2=m2+1;
}
}
while(m1==1)
{
if(clk==1)
m1=0;
}
while(m1==0)
{
if(clk==0)
{
m1=1;
m2=m2%2;
}
}
while(m1==1)
{
if(clk==1)
m1=0;
}
m4=tt;
m5=tt;
sent_date(m5);
SBUF=m4;
}
}
}
}
}
void sent_date(uchar s_data)
{
uchar num,num1=0,num2,num3=1,num4;
qq=s_data;
while(num3==1)
{
while(outclk==0);
for(num2=0;num2<20;num2++);
if(outclk==1&&outdate==1)
num3=0;
}
for(num2=0;num2<7;num2++);
outdate=0;
for(num2=0;num2<3;num2++);
delay40us();
outclk=1;
for(num2=0;num2<7;num2++);
for(num=0;num<8;num++)
{
outdate=flag2;
if(flag2==1)
num1=num1+1;
for(num2=0;num2<3;num2++);
delay40us();
outclk=1;
for(num2=0;num2<7;num2++);
qq=qq>>1;
}
num4=num1%2;
if(num4==1)
outdate=0;
else
outdate=1;
for(num2=0;num2<3;num2++);
delay40us();
outclk=1;
for(num2=0;num2<7;num2++);
outdate=1;
for(num2=0;num2<3;num2++);
delay40us();
outclk=1;
for(num2=0;num2<7;num2++);
//for(num2=0;num2<10000;num2++);
}
void delay40us(void)
{
uchar i;
outclk=0;
for(i=0;i<9;i++);
}
/*void PORT_Init (void)
{
uchar old_SFRPAGE;
old_SFRPAGE = SFRPAGE; // Save old SFRPAGE
SFRPAGE = CONFIG_PAGE; // Switch to configuration page
XBR0 = 0x04; // enable spi
XBR2 = 0x40; // Enable crossbar and weak pull-ups
P0MDOUT |= 0xff;
P1MDOUT |= 0xff; // enable P1.6 (LED) as push-pull output
P2MDOUT |= 0xff;
OSCXCN = 0X67;
for(tt=0;tt<200;tt++);
tt=OSCXCN;
while(flag==0)
tt=OSCXCN;
CLKSEL = 0X01;
OSCICN = 0x40;
SFRPAGE = old_SFRPAGE; // restore SFRPAGE
}*/
void UART0_Init (void)
{
TMOD=0x20;
TL1=0xfd;
TH1=0xfd;
EA=1;
ES=0;
TR1=1;
SCON=0x50;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -