📄 r.c
字号:
#include <io2313v.h>
#include <macros.h>
#define TX_EN PD6
#define CS PB1
#define PWR PB0
#define uchar unsigned char
#define uint unsigned int
uchar buf[2];
uchar r_buf[5];
uchar Flag_StartRec = 0 ; //开始接受数据标志位
uchar i = 0 ;
uchar rCount=0;
void main(void)
{
DDRB=0Xc3; //端口设置:PB0,PB1,PB7,PB6为推挽1输出,PB7监测接收,PB6监测数据接收
PORTB=0xc3;
DDRD=0X40; //端口设置:PD6口设置为推挽1输出
PORTD=0x40;
ClearR_buf();
PORTD&=~(1<<TX_EN); //初始为接收状态
PORTB|=(1<<PWR); //正常工作模式
PORTB&=~(1<<CS); //选择频道1
UCR=UCR|0x18;
UBRR=25; //设置串行口9600波特率
DelayMs(5);
while (1)
{
i=0 ;
rCount=0;
Flag_StartRec=0;
while(i<2) //接收任意两个连续字节
{
buf[i]=rece_byte();
i++;
}
/* 判断是否为0xaa,0xaa置开始接收标志位*/
if ((!Flag_StartRec) && (buf[0] == 0xaa)&& (buf[1] == 0xaa))
{
Flag_StartRec = 1;
}
if (Flag_StartRec) //判断标志为是否为1,开始接收数据
{
while(rCount<5) //接收五个连续数据字节
{
PORTB|=(1<<PB6);
r_buf[rCount] = rece_byte();
rCount ++;
PORTB&=~(1<<PB6);
}
}
else
{
Clearbuf();
ClearR_buf();
}
}
}
/*****接收数据函数********/
uchar rece_byte(void)
{
PORTB|=(1<<PB7);
while(!(USR&0x80))
return UDR;
PORTB&=~(1<<PB7); //用示波器在PB7腿查看是否有接收数据
}
void Clearbuf(void)
{
uchar k ;
for (k=0;k<2;k--)
{
buf[k] = 0;
}
}
void ClearR_buf(void)
{
uchar k ;
for (k=0;k<5;k--)
{
r_buf[k] = 0;
}
}
void DelayMs(uint t) //毫秒级延时,参数t为延时时间
{
uchar j;
for(;t!=0;t--)
{
for(j=8000;j!=0;j--) {;}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -