编写串口通讯程序步骤为:
1、设置波特率
2、设置串口工作方式
3、收发数据。
比如:
main(){
unsigned char dat
TMOD=0x20
TH1=0xfd
TL1=0xfd
TR1=1
SCON=0x50
while(1)
{
while(RI==0)
RI=0
dat=SBUF
SBUF=~dat
while(TI==0)
TI=0
}
}
从你出现的问题看,你应该是发的0,1,2,3……255的数,而不是它们对应的ASCII的值。比如你要发送在串口调试工具中显示0,应该发送0的ASCII值;假设你的串口发送一字节的函数为:sendbyte(unsignedchar
n)
则发送函数可以这样写:
void
send(void)
{
unsigned
char
i
for
(i=0i<256i++)
{
sendbyte(n/100+'0')
sendbyte(n%100/10+'0')
sendbyte(n%100%10+'0')
}
}
去掉16进制显示,就能看到0-255的显示了
修改如下:#include<reg52.h>
sbit shuru=P1^0
unsigned char PuZh[16] = "a"
unsigned char BuZh[16] = "b"
bit flaga=0,flagb=0
void UsartConfiguration()
void Delay10ms(unsigned int c) //误差 0us
void main()
{
unsigned char i
UsartConfiguration()
while(1)
{
if(shuru==0 && flaga==0)
{
for(i=0 i<16 i++)
{
SBUF = PuZh[i] //将要发送的数据放入到发送寄存器
while(!TI) //等待发送数据完成
TI=0 //清除发送完成标志位
TR1 = 0
ES = 0
EA = 0
}
flaga=1
flagb=0
Delay10ms(500) //延时一下再发
}
else if(shuru==1 && flagb==0)
{
for(i=0 i<16 i++)
{
SBUF = BuZh[i] //将要发送的数据放入到发送寄存器
while(!TI) //等待发送数据完成
TI=0 //清除发送完成标志位
TR1 = 0
ES = 0
EA = 0
}
flaga=0
flagb=1
Delay10ms(500) //延时一下再发
}
}
/*******************************************************************************
* 函 数 名 :UsartConfiguration()
* 函数功能 :设置串口
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void UsartConfiguration()
{
SCON=0X50 //设置为工作方式1
TMOD=0X20 //设置计数器工作方式2
PCON=0X80 //波特率加倍
TH1=0XFA //计数器初始值设置,注意波特率是4800的
TL1=0XFA
// ES=1 //打开接收中断
// EA=1 //打开总中断
TR1=1 //打开计数器
}
void Delay10ms(unsigned int c) //误差 0us
{
unsigned char a, b
for (c>0c--)
{
for (b=38b>0b--)
{
for (a=130a>0a--)
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)