#include <reg52.h>
#define uc unsigned char
#define ui unsigned int
uc snum,flag;
ui num;
void main()
{
TMOD=0x20;
TH1=0xf4;
TL1=0xf4;
TR1=1;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
while(1)
{
if(flag==1)
{
ES=0;
flag=0;
SBUF=num;
while(!TI);//这句话的作用
TI=0;
SBUF=snum;
while(!TI);
TI=0;
if(num <256)
{
num++;
}
else
{
num=0;
}
ES=1;
}
}
}
void serial() interrupt 4
{
snum=SBUF;
flag=1;
RI=0;
}
说明一下,变量num是每次发送的序列号,到255自动归0,有两个问题
1.已经注释,就是while(!TI)这句话的作用。。。
2.我用的串口调试助手v2.1,如果要发回上位机的话,如何以10进制而不是16进制显示呢?????
共4条
1/1 1 跳转至页
while(!TI);//这句话的作用
TI=0;
呵呵,这个是查询方式待等串口发送结束....
串口发送结束后会硬件自动置TI为1
等TI为1后,清除TI....
准备下一次通信...
2.我用的串口调试助手v2.1,如果要发回上位机的话,如何以10进制而不是16进制显示呢?????
串口以及串口通信助手仅仅是基本的通信功能
要实现显示10进制,那必须得进行转换工作
你可以在上位机实现,如重写一个串口工具,收到数据后转为十进制再显示
你也可以在单片机上进行,先把数据转成十进制的串,然后再通过串口把串发到串口助手,让它以文本方式来显示你的内容就可以了
后一种方法,你可以看一下sprintf()这个函数,呵呵,算是一个提示吧...
TI=0;
呵呵,这个是查询方式待等串口发送结束....
串口发送结束后会硬件自动置TI为1
等TI为1后,清除TI....
准备下一次通信...
2.我用的串口调试助手v2.1,如果要发回上位机的话,如何以10进制而不是16进制显示呢?????
串口以及串口通信助手仅仅是基本的通信功能
要实现显示10进制,那必须得进行转换工作
你可以在上位机实现,如重写一个串口工具,收到数据后转为十进制再显示
你也可以在单片机上进行,先把数据转成十进制的串,然后再通过串口把串发到串口助手,让它以文本方式来显示你的内容就可以了
后一种方法,你可以看一下sprintf()这个函数,呵呵,算是一个提示吧...
第一个问题:
while(!TI);//这句话的作用 --> TI是发送成功的标志位,当SBUF中的数据发送完毕时
由硬件自动将TI置1,但要手动清零(准备下一次发送),所以后面要跟TI=0;其作用是:等待SBUF中的数据发送完毕。
没发送完--> TI==0;//while(!0) == while(1) --> ;是空语句,条件为真(1)循环执行空语句进行等待。
发送完毕--> TI==1;//while(!1) == while(0) --> ;是空语句,条件为假(0)跳过空语句执行下一条指令。
第二个问题:
2.我用的串口调试助手v2.1,如果要发回上位机的话,如何以10进制而不是16进制显示呢?????
大哥, 串口调试助手v2.1 里面有设置 ASCII/十六进制 显示 --> 33(ASCII的3)% 10 =3(十进制的3)
如果你要发送16进制 那么 SBUF=0x0A; 发送16进制的10 。 SBUF=3;发送出来是33,即ASCII码。
第三个问题:
请注意 flag 的设置, 还有你的中断接收有问题。请看看书--> SBUF中的 TI/RI 在何时、为什么变0、变1。
while(!TI);//这句话的作用 --> TI是发送成功的标志位,当SBUF中的数据发送完毕时
由硬件自动将TI置1,但要手动清零(准备下一次发送),所以后面要跟TI=0;其作用是:等待SBUF中的数据发送完毕。
没发送完--> TI==0;//while(!0) == while(1) --> ;是空语句,条件为真(1)循环执行空语句进行等待。
发送完毕--> TI==1;//while(!1) == while(0) --> ;是空语句,条件为假(0)跳过空语句执行下一条指令。
第二个问题:
2.我用的串口调试助手v2.1,如果要发回上位机的话,如何以10进制而不是16进制显示呢?????
大哥, 串口调试助手v2.1 里面有设置 ASCII/十六进制 显示 --> 33(ASCII的3)% 10 =3(十进制的3)
如果你要发送16进制 那么 SBUF=0x0A; 发送16进制的10 。 SBUF=3;发送出来是33,即ASCII码。
第三个问题:
请注意 flag 的设置, 还有你的中断接收有问题。请看看书--> SBUF中的 TI/RI 在何时、为什么变0、变1。
共4条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
【有奖活动】震撼来袭!这场直播将直击工程师的心灵! | |
“我想要一部加热台”活动,不花钱赢取开发好工具!活动开始了哦 | |
【有奖活动】伙伴们:您的“需求”解决了吗? | |
抽奖了,抽奖了,金升阳医疗电源 |
打赏帖 | |
---|---|
【换取手持数字示波器】+与同事对定时器输出相位可调PWM移相全桥控制分享被打赏50分 | |
【换取手持数字示波器】+LP-MSPM0L1306开发板试用体验+串口被打赏40分 | |
CC-RL编译器相关问题求助被打赏10分 | |
【换取手持数字示波器】+与同事对ESP-12开发调试经验分享被打赏50分 | |
【换取手持数字示波器】+同事tek示波器调试spi解析被打赏50分 | |
【换取手持数字示波器】+2.6寸墨水屏调试经验被打赏50分 | |
换取手持数字示波器+个人开关电源的设计经验被打赏50分 | |
【换取手持数字示波器】+【APT32F173测评】+URAT被打赏20分 | |
【换取手持数字示波器】CH32X035的定时器以及外部中断体验被打赏50分 | |
【换取手持数字示波器】CH32X035搭建开发环境(RISC-V)被打赏50分 |