修改程序,将单片机程序的串口发送波特率修改为9600。并通过上位机串口调试助手窗口正确接收数据并显示。

作者&投稿:赖俩 (若有异议请与网页底部的电邮联系)
求个单片机通过串口发送字符串数组的程序,上位机通过串口调试助手接受,谢谢,波特率9600~

#include
#include
#define uchar unsigned char
#define uint unsigned int
unsigned char flag;
unsigned char s1[]="ABCDEFG HIJKLMN OPQRST UVWXYZ",i;
unsigned char slen=sizeof(s1);
void delay(uint x)
{
while(x--);
}
void main()
{
TMOD=0x20;//设置T1为工作方式2
TH1=0xfd;//装入初值,比特率为9600bps
TL1=0xfd;
TR1=1;//开启T1
REN=1;//接收允许
SM0=0;//方式1
SM1=1;
EA=1;//开全局中断
ES=1;//开串口中断
flag=0;
while(1)
{
if(flag==1)
{
ES=0;
flag=0;
for(i=0;i<slen;i++)//若接收到,则发送相关字符串
{
SBUF=s1[i];
while(!TI);
TI=0;
}
ES=1;//串口中断允许
}
}
}
void ser() interrupt 4
{
RI=0;//清除标志
P2=~P2;//LED闪烁
//P0=SBUF;
flag=1;//发送标志
}
这只是一个简单的串口发送字符串程序,通过串口助手发送任意数据,单片机接收到数据后即返回事先定义的字符串内容

将波特率定为9600后,直接将数组以字符发出:
void send_char(unsigned char ch)
{ while(!TI); TI=0; SBUF=ch; }


void send(float *d, int n) //n为浮点数个数
{
unsigned char *temp=(unsigned char *)d;

for (n*=sizeof(float);n;--n) send_char(*temp++);

}

设上位机接收到的内容放在unsigned char *buf中,则
float *d; d=(float *)buf; 以后就可以操作接收到的浮点数了。
但是用串口调试助手看到的不直观。亦可以将浮点数专为可读的字符串再发送:

#include
#include
void send_float(float d)
{
char buf[32], *temp;

temp=buf;

sprintf(temp, "%f", d);

for (; *temp; ++temp) send_char(*temp);
send_char(' '); //加一个空格或回车隔开两个数。

}


void send_floats(float *d, int n) //n为浮点数个数
{
for (; n; --n) send_float(*d++);
}

这个不可能的把,波特率不对接收不了数据,甚至数据出错的,

11.0592M晶振的前提下,将初始值改为FD就可以。如果是12M晶振,一般初始值设为F3,用4800波特率,12M晶振的9600波特率误差太大。

这个是修改波特率的?不是在初始化的时候修改吗


电子信息工程专业有必要学习单片机吗?请给理由
学习单片机是需要成本的。必须有一台电脑、一块单片机开发板(如果开发板不能直接下载程序代码的话还得需要一个编程器)、一套视频教程、一本单片机教材和一本C语言教材。电脑是用来编写和编译程序,并将程序代码下载到单片机上;开发板用来运行单片机程序,验证实际效果;视频教程就是手把手教你单片机开发环境的使用、单片机...

单片机原理的学习方法
同时,还要懂得通过查阅芯片数据手册(DATASHEET)里有关芯片命令和数据的读写时序来核对别人例程的可靠性,如果你觉得例程不可靠就把它修改过来,成为是你自己的程序。不仅如此,自己应该经常找些项目来做,以巩固所学的知识和积累更多的经验。 当编写自己的程序信手拈来、阅读别人的程序能够发现问题的时候,说明你的单片机...

单片机编程为什么我怎么改程序在仿真里运行的结果都和以前一样_百度知...
我遇到过这种情况,在我初学单片机时按照网上的视频HEX机器码调入PROTEUS仿真软件建立的工程内 ,但是把不同的HEX文件分别调入单片机,显示效果都一样。最后找了个老师在远程协助看我操作,老师发现文件调入操作不对,老师给我演示了一下正确的操作 ,就解决了 ...

怎么通过pc将程序输入单片机,不想用编程器
编程器也不贵呀,有种专门为Atmel公司软件的单片机编程的,就16块左右。另外你也可以使用宏晶公司的单片机,它不需要编程器,只要一跟串口线就可以了,你搜一下在线编程,或者ISP具体了解下。

三极管驱动电路
接三极管的目的是将358来的信号去驱动单片机输入,但没有达到驱动要求,基极输入是最高2V,但单片机的输入高电平最好是4.5v以上。如果采用这种接法,在P1.0脚还必须接下拉电阻。因为358输出达不到要求,建议改三极管接法,VCC到P1.0接3K电阻,三极管集电极接P1.0,发射极接地,基极不变。改程序,...

修改我下面的单片机程序,能产生1000hz的方波信号
按12MHz来算,如果要产生1000Hz的方波信号,也就是周期为1ms的方波,则要计数1000次就好,所以我认为,最好固定X,然后改变NUM实现.比如固定X为1000,当NUM=1时,表示为1000Hz,当NUM=10就为100Hz了,而当NUM=100就为10Hz,当NUM=5就为200Hz.按照这个思路,以振荡频率为12MHz来算,程序可更改为:include ...

如何学好单片机?
那么,51单片机怎样快速入门呢?我有一个顺口溜:单片机,要学好,有决窍,先模仿,再提高。实践加理论,理论加实践,用心领悟最重要。具体来说:第一课安装软件1.1 安装KEIL C511.2 安装PROTEUS第二课调试与仿真小程序2.1 在KEIL上能调试二、三个简单的小程序2.2 在PROTEUS上实现简单的仿真第三课修改程序3.1 修改一个最...

关于单片机程序怎么解释的问题。
R0 \/\/R0=R0-1 RET \/\/返回,意思是子程序执行完啦,现在要回到调用子程序前的那段代码那去 这段代码的大概意思就是将A的高位和地位分别放到两个挨着的地址中去,低位放高地址,高位放低地址,地址由R0指出。其实我不是很懂汇编,以上均百度出来的,楼主要多使用度娘啊,实在不行上GOOGLE。

如何将单片机中的程序读出来并且备份啊?最近买了一小车,新手学习,想...
用下载线连到你的板子,如果没有接口,就直接把片子焊下来,放入编程器读,读出来保存就行了,每种单片机的下载线和编程器不一样,看你的芯片是什么样的。一般都有加密,读不到。

单片机好学不
2.仿真机 仿真机的用途是替代电路板上的单片机芯片,仿真机通过串行口、USB接口等方式与与PC机联机通信,接收PC端控制软件发出的指令,以单步、过程单步、全速运行等各种方式来执行程序,以单步或过程单步方式执行程时,每次执行完程序后可以将执行的结果反馈到PC端的控制软件中显示出来。由于单片机编程时...

浦城县13816086488: 修改程序,将单片机程序的串口发送波特率修改为9600.并通过上位机串口调试助手窗口正确接收数据并显示. -
弘秋阿加: 这个不可能的把,波特率不对接收不了数据,甚至数据出错的,

浦城县13816086488: 电脑如何通过串口将程序里的数据发送给单片机? -
弘秋阿加: 你好! 1、添加串口空间 2、编程完成串口初始化 3、发送有效数据 4、单片机接收并分析数据

浦城县13816086488: 大家好我是新手,想做个简单的C51程序:将单片机采集的数据通过串口发送至VB??哪位朋友能帮帮忙?谢谢! -
弘秋阿加: 如果你单片机的AD采集和串口发送程序都写好的话,只要采集完数据之后,就直接发送到串口,不用将数据保存在某地址再发送,51也存不了多少数据,内存小.整个过程就是采一组数就发一组数.

浦城县13816086488: 如何编写串口程序:单片机串口采用方式1,波特率9600,晶振11.0592M,只发送,不收,发送采用查询方式 -
弘秋阿加: void init1(void) { TMOD=0x20; TH1=0xfd; TL1=0xfd; SCON=0x40; TR1=1; } void init2(void) { TMOD=0x20; TH1=0xfd; TL1=0xfd; SCON=0x50; TR1=1; ES=1; EA=1; }

浦城县13816086488: 单片机串行口通信程序C语言 -
弘秋阿加: 发送: #include <reg52.h>#include<intrins.h>#include<string.h>#define uchar unsigned char uchar data i,j,p,TEST; sbit INTT0=P3^2; uchar code V_35[10]={'V','o','l','t',' ','3','.','5',13,10}; void Init(); void Delay(); void Volt_35(); void main() { Init(); while(1...

浦城县13816086488: 谁能给我发一个51单片机向串口调试助手发送信息的简答程序? -
弘秋阿加: #include/* 学习内容:应用串口发送接收数据 程序效果:程序实现把接收到的数据发送回去,波速率为2400.用串口调试器可观察到数据.注意:串口调试软件要设置为十六进制.单片机晶振12M 晶振不一样修改波特率*/ unsigned char b; void ...

浦城县13816086488: 单片机串口发送数据 -
弘秋阿加: 串行在发送前,先是有一低电平起始位,然后跟着是8位数据,再是1位校检位,最后发送高电平结束位,起始结束信号供接收机判断数据发送起始和结束,是单片机在发送数据是自动加上的. 至于校检位,如果你用的话,就会自动放到8位数据后面,用时用软件提取出来

浦城县13816086488: 求个单片机通过串口发送浮点数组的程序,上位机通过串口调试助手接受,谢谢,波特率9600 -
弘秋阿加: 将波特率定为9600后,直接将数组以字符发出:void send_char(unsigned char ch) { while(!TI); TI=0; SBUF=ch; } void send(float *d, int n) //n为浮点数个数 { unsigned char *temp=(unsigned char *)d; for (n*=sizeof(float);n;--n) send_char(*temp++); } ...

浦城县13816086488: 求一个使用STC12C5A60S2单片机的串口1向STC - ISP串口助手发送abcd字符串的程序 -
弘秋阿加: //串口通信 头文件 void Usart_Init() ; //串口初始化(11.0592MHZ晶振.9600波特率) void Usar_sent(unsigned char dat) ; // 串口发送数据 //unsigned char Usar_read() ; // 串口接受数据 void Usart_Init() {SCON=0X50; PCON=0X80; ...

浦城县13816086488: 求大神帮忙写个ATmega8的UART模块程序,串口调试助手发送信号,并且单片机再发送回来.
弘秋阿加: ICC的 电脑串口发送给单片机,中断返回数据. #include<iom8v.h> #include<macros.h> #define uchar unsigned char #define uint unsigned int #define BAND 9600 void init_uarst() { UCSRB=0x00; UCSRA=0X00; UCSRC= BIT(URSEL)|0X06; ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网