pc机与单片机98c52 串口通信 用串口通信助手,发送一个数,单片机接收后返回串口通信助手显示出来。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pc机与单片机98c52 串口通信 用串口通信助手,发送一个数,单片机接收后返回串口通信助手显示出来。相关的知识,希望对你有一定的参考价值。
我的程序如下,请大侠帮忙看一下错在哪里。
#include<reg51.h>
#include<string.h>
unsingned char a;
void init_serialcomm(void)
SCON=0x50;//SCON:serail mode 1,8-bit uart,enable ucvr
TMOD=0x20;//TMOD:timer 1, mode 2,8-bit reload
PCON=0X00;//SMOD =1;
TL1=0xFD;
TH1=0xFD;//Baud:4800 fosc=11.0592MHz
IE=0x90;//enable serial interrupt
TR1=1;//timer 1 run
ET1=0;
a=0x45;
SBUF=a;
void serial()interrupt 4 using 3
if(TI)
TI=0;
if(RI)
RI=0;
a=SBUF;
P1=a;
SBUF=a;
main()
init_serialcomm();//初始化串口
while(1)
改成unsigned char a;
串口中断程序少括号:
修改如下
#include<reg51.h>
#include<string.h>
unsigned char a;
void init_serialcomm(void)
SCON=0x50;//SCON:serail mode 1,8-bit uart,enable ucvr
TMOD=0x20;//TMOD:timer 1, mode 2,8-bit reload
PCON=0X00;//SMOD =1;
TL1=0xFD;
TH1=0xFD;//Baud:4800 fosc=11.0592MHz
IE=0x90;//enable serial interrupt
TR1=1;//timer 1 run
ET1=0;
a=0x45;
SBUF=a;
void serial(void) interrupt 4 using 3
if(TI)
TI=0;
if(RI)
RI=0;
a=SBUF;
P1=a;
SBUF=a;
void main(void)
init_serialcomm();//初始化串口
while(1);
参考技术A main()
init_serialcomm();//初始化串口
while(1)
好像一直在空循环的追问
我去掉了while循环,也一样不行的,想求一个正确程序,并指出真正的错误。
追答//*****************************//
//用串口控制单片机实现 步进电机的
//开始,停止,反转,正转,减速,加速
//串口发1~6,单片机响应,并返回“OK”
//*****************************//
#include
#define uchar unsigned char
#define uint unsigned int
sbit opt=P1^0; //定义管脚
sbit sp =P1^1;
sbit dir=P1^2;
sbit ena=P1^3;
bit flag_serial;
uint speed_wide=1000;
unsigned char SBUF_temp;
void SendOneByte(unsigned char ch);
//---------------------------------------------
void InitUART(void) //串口初始化
TMOD |= 0x20;
SCON = 0x50;
TH1 = 0xF3; //波特率4800
TL1 = TH1; //对于12M 的晶振9600波特率误差较大,
//通信有时无效
PCON = 0x80; //波特率加倍
EA = 1;
ES = 1;
TR1 = 1;
PS = 1; //第一优先级
void InitTimer0(void) //定时T0
TMOD|= 0x01;
TH0 = (65535-speed_wide)/256;
TL0 = (65535-speed_wide)%256;
EA = 1;
ET0 = 1;
TR0 = 0;
void serial_pro()
switch (SBUF_temp)
case '1':ena=0;TR0 = 0;break;
case '2':ena=1;TR0 = 1;break;
case '3':dir=0;break;
case '4':dir=1;break;
case '5':speed_wide=speed_wide+100;break;
case '6':speed_wide=speed_wide-100;break;
void speed_wide_com()
if(speed_wide>=50000)speed_wide=40900;
if(speed_wide<=500)speed_wide=600;
void main(void)
InitUART();
InitTimer0();
opt=1;
dir=0;
ena=0;
while(1)
if(flag_serial==1)
flag_serial=0;
serial_pro();
speed_wide_com();
void UARTInterrupt(void) interrupt 4
if(RI)
RI = 0;
flag_serial=1;
SBUF_temp=SBUF;
SendOneByte('o');SendOneByte('k');
else
TI = 0;
//-定时器
void Timer0Interrupt(void) interrupt 1
TH0 = (65535-speed_wide)/256;
TL0 = (65535-speed_wide)%256;
sp=~sp;
//-返回给串口的数据
void SendOneByte(unsigned char ch)
SBUF = ch;
while(!TI);
TI = 0;
PC机与stm32串口通信的问题
使用stm32自带AD,利用DMA把数据传输到指定变量(unsigned short),经过软件滤波(取平均值)后再通过串口把变量数据分高低位送入PC,使用串口调试助手接收,函数信号发生器提供6K的方波信号,大致是这个样子,但是我收到的数据有问题,应该是每行两个16进制数,但有时会多一个尾巴(FF FC之类的):
27 07
1F 7F
03 08
37 04
00 9C FC
37 07
00 8B FC
37 1F
00 84 FC
37 03
30 67
00 9F FC
37 00
00 9C FC
37 08
00 83 FC
27 FB FF
00 9C FC
37 03
00 83 FC
37 00
0F F8
00 84 FC
27 FC FF
00 84 FC
27 FF FF
00 88 FC
24 3B
07 24
我把信号输入换成正弦波也是这样子, 但如果接地(这时输出00 00)或接电源(这时输出3F C4)的话尾巴就没有了
这是怎么回事?坐等高手解答
又或者你的工具能够改帖间隔的话,就改下. 参考技术A 这是无线还是有线啊?
以上是关于pc机与单片机98c52 串口通信 用串口通信助手,发送一个数,单片机接收后返回串口通信助手显示出来。的主要内容,如果未能解决你的问题,请参考以下文章