---------------------------------
从程序看,发送汉字是可以的,估计是你的单片机系统不能显示汉字。
能说一下你是怎么显示的吗?ASCII码在单片机中也是用16进制来表示的,只是解码后显示的是字符,你要是随便发一个字符,串口调试助手选择字符显示接收就可以显示一个字符出来(可能我们不认识这个字符)。发送一个字符串就是不停的发送直到发送完毕,51单片机有自己的串行发送端口P30和P31端口,但是它是一个字节一个字节发送的,发送完一个字节会产生一个中断(也可以用判断TI的方式判断是否发送完),中断响应后再次启动发送SBUF=0Xxx,就会自动连续的发送,再加上判断就可以控制发送的字节数。
串口初始化:
void uart_init()
{
TMOD=0x20;//定时器1,模式2
SCON=0x50;//串口通讯方式1
TH1=0xfd;//波特率9600
TL1=0xfd;
button=0;
delay(1);
TI=0;//发送中断标志位清零
RI=0;//接收中断标志位清零
TR1=1;//启动定时器1
EA=1; //使能全局中断
ES=1; //启动串口中断
}
}
void main()
{ P1=0xff;
uart_init() ;
while(1)
{
}
// 串行中断程序
void commIntProc() interrupt 4
{
if(TI)
{
TI = 0;
if(sendPosi < sendCount) //判断是否发送完成
{
sendPosi++; //发送一次计数器加一
SBUF = sendBuf[sendPosi];//启动发送
}1)数据发送与接收使用方式0实现数据的移位输入输出时,实际上是把串行口变成并行口使用。串行口作为并行输出口使用时,要和CD4049或74LS164配合使用,其电路连接如图10。图(b)为74LS164的引脚图,芯片各引脚功能如下:Q0~Q7为并行输出引脚。DSA、DSB为 串行输入引脚。
清零引脚,低电平时,使74LS164输出清零。CP为时钟脉冲输入引脚,在CP脉冲的上升沿作用下实现移位。在CP=0,
=1时,74LS164保持原来数据状态不变。
利用串行口与74LS164实现八位串入并行输出的连接如图(a)所示,当8位数据全部移出后,SCON寄存器的TI位被自动置1。用P10输出低电平可将164输出清零。
如果把能实现“并入串出”功能的CD4014或74LS165与串行口配合使用,就可以把串行口变为并行输入口使用。如图所示。
图(b)为74LS165引脚图,当
=1时,允许串行移位,
=0时允许并行输入。当CPINH=1时,从CP引脚输入的每一个正脉冲使QH输出移位一次。REN=0,
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)