接收的巧衫道理一此伍样, 只是检测的标志位不同和SBUF赋值方向不同而已
#include <reg51.h>
#define UINT8 unsigned char
void UARTSendByte(UINT8 Byte)
{//串口发送1个字节
while(TI==1)
SBUF=Byte//向串口发送数据
while(TI==0)//等待发送完成
TI=0//清楚标志位
}
void UARTSendStr(UINT8 *String)
{//串口发送一个字符串
int i
UINT8 len = strlen(String)
for (i = 0i <leni++)
UARTSendByte(String[i])
}
#define SENDLEN 14unsigned char sendbuf[SENDLEN ]
//初始化串口
SCON = 0x50//串口旁肆轿方式1,允许接收
TMOD = 0x20//定时器1定时方式2
TCON = 0x40//设定时器1开始计数
TH1 = 250//波特率9600
TL1 = 250
PCON = 0x80//波特率加倍控制,SMOD位
RI = 0//清收发标志
TI = 0
TR1 1 = 1//启动定时器
//运肆在这里要给sendbuf装雹哗入要发送的数据
for(i=0 i <S ENDLEN i++)
{
while(!TI)
SBUF = sendbuf[i]
}
通过穗好RS232总线与PC进行通信的测试程序(c语言)
/*这是一个使用单片机串行通信口通过RS232总线与PC进行通信的测试程序,无需扩展.可将DB9的第2和第3脚短路,进行自收自发猜迹铅测试.采州卜用串行中断接收,速率:9600,通信方式2,晶振使用:osc=11.0592MHz。使用SW1-SW6键盘发送文本数字1-6,数码管显示接收的ASCII数据*/
void main(void)
{
SCON=0x50
TMOD=0x21
TH1=0xfd
TL1=0xfd
TH0=0xf4
TL0=0x48
ES=1ET0=1EA=1
TR1=1
TR0=1
while(1)
{
if(!key){ Delay(30000)
a=Key_down()
SBUF=table[a]
while(TI==0)
TI=0
}
}
}
uchar Key_down(void)
{ uchar x
if(!sw1)x=1
else if(!sw2)x=2
else if(!sw3)x=3
else if(!sw4)x=4
else if(!sw5)x=5
else if(!sw6)x=6
return(x)
}
void Int_T0(void) interrupt 1
{
TH0=0xf4
TL0=0x48
if(count==5)count=0
else count++
switch(count)
{
case 0:DIG_NUM=0x7f
LED_DISPLAY=buff_led1
break
case 1:DIG_NUM=0xbf
LED_DISPLAY=buff_led2
break
case 2:DIG_NUM=0xdf
LED_DISPLAY=buff_led3
break
case 3:DIG_NUM=0xef
LED_DISPLAY=buff_led4
break
case 4:DIG_NUM=0xf7
LED_DISPLAY=buff_led5
break
case 5:DIG_NUM=0xfb
LED_DISPLAY=buff_led6
break
default:break
}
}
void Int_Serial(void) interrupt 4
{
while(RI==0)
a=SBUFRI=0
buff_led1=buff_led2
buff_led2=buff_led3
buff_led3=buff_led4
buff_led4=buff_led5
buff_led5=buff_led6
buff_led6=a
}
void Delay(int t)
{while(--t)}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)