unsigned char dat//用于存储单片机接收发送缓冲寄存器SBUF里面的内容
sbit gewei=P2^2//个位选通定义
sbit shiwei=P2^3//十位选通定义
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x77,0x7c,0x39,0x5e,0x79,0x71}
//{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,}// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
void Delay(unsigned int tc) //延时程序
{
while( tc != 0 )
{unsigned int i
for(i=0i<100i++)
tc--}
}
void LED() //LED显示接收到的数据
{
shiwei=0
P0=~table[dat/16]
Delay(8)
shiwei=1
gewei=0
P0=~table[dat%16]
Delay(5)
gewei=1
}
void Init_Com(void)//功能:串口初始化,波特率9600,方式1
{
TMOD = 0x20
PCON = 0x00
SCON = 0x50
TH1 = 0xFd
TL1 = 0xFd
TR1 = 1
}
void main()//主程序功能:实现接收数据并把接收到的数据原样发送回去///////
{
Init_Com()//串口初始化
// P1=0xf0
while(1)
{
if ( RI ) //扫描判断是否接收到数据,
{
dat = SBUF //接收数据SBUF赋与dat
RI=0 //RI清零。
SBUF = dat //在原样把数据发送回去
}
LED()//显示接收到的数据
}
}
#include <reg52.h>#define uchar unsigned char
#define uint unsigned int
unsigned char a,i
uchar code table[]="I get "
void init()
{
TMOD=0x20
TH1=0xfd
TL1=0xfd
TR1=1
REN=1
SM0=0
SM1=1
EA=1
ES=1
}
void main()
{
init()
while(1)
}
void ser() interrupt 4
{
while(RI==0)//收去一个字符
a=SBUF
RI=0
if(a=='x')
for(i=0i<6i++) //发送部分,中断要做的事情尽量放在中断里
{
TI=0
SBUF=table[i]
while(TI==0)
TI=0
}
}
SBUF是可以直接寻址的专用寄存器。物理上,它对应着两个寄存器,即一个发送寄存器一个接收寄存器,CPU写SBUF就是修改发送寄存器;读SBUF就是读接收寄存器。接收器是双缓冲的,以避免在接收下一帧数据之前,CPU未能及时的响应接收器的中断,没有把上一帧的数据读走而产生两帧数据重叠的问题。对于发送器,为了保持最大的传输速率,一般不需要双缓冲,因为发送时CPU是主动的,不会产生重叠问题。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)