',才退出循环{Sent_ZF(*strin"og:type" content="webpage">',才退出循环{Sent_ZF(*strin" /> ',才退出循环{Sent_ZF(*strin"> *string是什么意思?51单片机程序求解读_软件运维_内存溢出

阅读51

*string是什么意思?51单片机程序求解读,第1张

void AT_Send_String(u8 *string) //string为指向u8类型的指针

{while(*string)//知道string指针指向字符

结束符'\0',才退出循环

{Sent_ZF(*string++)//发送string指针指向的

字符

,并将string指针后移一位

Delay_ms(5)

}

}ASCII码在单片机中也是用16进制来表示的,只是解码后显示的是字符,你要是随便发一个字符,串口

调试助手选择字符显示接收就可以显示一个字符出来(可能我们不认识这个字符)。发送一个字符串就是不停的发送直到发送完毕,51单片机有自己的串行发送端口P3.0和P3.1端口,但是它是一个字节一个字节发送的,发送完一个字节会产生一个中断(也可以用判断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]//启动发送

}

像这种发送字符串的,需要有一个字符串结束标志,不能用0作为字符串结束标志了!这里以回车作0xd为结束标志!

#include <reg51.h>

typedef unsigned char uint8

bit flag = 0

uint8 idata buf[30]

uint8 ct

void InitUART(void) //串口初始化 9600bps

{

  TMOD = 0x20

  SCON = 0x50

  TH1 = 0xFD

  TL1 = TH1

  PCON = 0x00

  EA = 1

  ES = 1

  TR1 = 1

}

void Send(uint8 c)

{

  SBUF = c

  while(!TI)

  TI = 0

}

void main(void)

{

char j

InitUART()

  while(1)

{

if(flag)   //是否接收到回车  字符串发送完

{

flag = 0

for(j = ct j >0 j--)

{

  Send(buf[j-1])     

}

    }

  }

}

void UARTInterrupt(void) interrupt 4

{

static uint8 i = 0

if(RI)

  {

      RI = 0     

  buf[i++] = SBUF

  if(SBUF == 0x0d) //接受到回车

{

ct = i-1

flag = 1

i = 0

      }

  }

  else

      TI = 0

}

仿真结果

程序作为参考 希望  你自己能理解程序!只有自己掌握了才能很好地用!

欢迎分享,转载请注明来源:

内存溢出

原文地址:

https://www.54852.com/yw/7762041.html
字节
(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
第二信使第二信使一级用户组
C语言程序设计24点游戏,能算出24的运算法则的代码,很急
上一篇
2023-04-09
如何在12864(带子库)编写显示变化数字的子程序?中文显示程序已会。
2023-04-09

发表评论
请登录后评论...
登录
提交

    评论列表(0条)
保存
{label}{label}