?? 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 ; //開始接受數(shù)據(jù)標志位
uchar i = 0 ;
uchar rCount=0;
void main(void)
{
DDRB=0Xc3; //端口設(shè)置:PB0,PB1,PB7,PB6為推挽1輸出,PB7監(jiān)測接收,PB6監(jiān)測數(shù)據(jù)接收
PORTB=0xc3;
DDRD=0X40; //端口設(shè)置:PD6口設(shè)置為推挽1輸出
PORTD=0x40;
ClearR_buf();
PORTD&=~(1<<TX_EN); //初始為接收狀態(tài)
PORTB|=(1<<PWR); //正常工作模式
PORTB&=~(1<<CS); //選擇頻道1
UCR=UCR|0x18;
UBRR=25; //設(shè)置串行口9600波特率
DelayMs(5);
while (1)
{
i=0 ;
rCount=0;
Flag_StartRec=0;
while(i<2) //接收任意兩個連續(xù)字節(jié)
{
buf[i]=rece_byte();
i++;
}
/* 判斷是否為0xaa,0xaa置開始接收標志位*/
if ((!Flag_StartRec) && (buf[0] == 0xaa)&& (buf[1] == 0xaa))
{
Flag_StartRec = 1;
}
if (Flag_StartRec) //判斷標志為是否為1,開始接收數(shù)據(jù)
{
while(rCount<5) //接收五個連續(xù)數(shù)據(jù)字節(jié)
{
PORTB|=(1<<PB6);
r_buf[rCount] = rece_byte();
rCount ++;
PORTB&=~(1<<PB6);
}
}
else
{
Clearbuf();
ClearR_buf();
}
}
}
/*****接收數(shù)據(jù)函數(shù)********/
uchar rece_byte(void)
{
PORTB|=(1<<PB7);
while(!(USR&0x80))
return UDR;
PORTB&=~(1<<PB7); //用示波器在PB7腿查看是否有接收數(shù)據(jù)
}
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) //毫秒級延時,參數(shù)t為延時時間
{
uchar j;
for(;t!=0;t--)
{
for(j=8000;j!=0;j--) {;}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -