求助stc单片机串口通信程序

求助STC通过串口发送数据的程序,单片机采用STC12C4052AD,晶振11.0592波特率9600一位起始位八位数据位一位结束位,16进制发送,当单片机收到数据01时,单片机发送06,当单片机收到03时,单片机发送06 00 14 00 03 00 03 00 00 00 00 00 00 00 0F 00 64 00 8D共十九组数据,望各位都来帮帮我吧,我不太懂C语言,先谢谢各位了!

你不懂C语言,那你懂什么语言??
我帮你写了,希望能帮到你。

#include "STC12C4052.h"

unsigend char uart_buf[] = {0x06, 0x00, 0x14, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00 0x64, 0x00, 0x8D};

void UartInit(void) //9600bps@11.0592MHz
{
PCON |= 0x80; //使能波特率倍速位SMOD
SCON = 0x50; //8位数据,可变波特率
BRT = 0xB8; //设定独立波特率发生器重装值
AUXR |= 0x04; //独立波特率发生器时钟为Fosc,即1T
AUXR |= 0x01; //串口1选择独立波特率发生器为波特率发生器
AUXR |= 0x10; //启动独立波特率发生器
ES=1; //串口中断使能
}

//串口1发送,用于程序测试
void UART_SendByte(unsigned char c)
{
ES=0;
TI=0;
SBUF=c;
while(TI==0);
if(TI==1)
TI=0;
ES=1;
}

void UART_SendString(unsigned char *buf, unsigned char n)
{
unsigned char i;
for(i=0;i<n;i++)
{
UART_SendByte(buf[i]);
}
}

void UART1_INT(void) interrupt 4
{
unsigned char k;
if(RI==1)
{
RI=0;
k=SBUF;
if(k == 0x00)
{
UART_SendByte(0x06);
}
else if(k == 0x03)
{
UART_SendString(uart_buf,19);
}

}
else
{
TI=0;
}

}

void main(void)
{
UartInit();
EA = 1;
while(1)
{
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-03-22
//自己参考一下改改 单片机数据发送程序
#include<reg51.h> //包含单片机寄存器的头文件
/*****************************************************
函数功能:向PC发送一个字节数据
***************************************************/
void Send(unsigned char dat)
{
SBUF=dat;
while(TI==0)
;
TI=0;
}
/*****************************************************
函数功能:延时1ms
(3j+2)i=(3×33+2) ×10=1010(微秒),可以认为是1毫秒
***************************************************/
void delay1ms()
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++)
;
}
/*****************************************************
函数功能:延时若干毫秒
***************************************************/
void delaynms(unsigned char x)
{
unsigned char i;
for(i=0;i<x;i++)
delay1ms();
}
/*****************************************************
函数功能:主函数
***************************************************/
void main(void)
{
unsigned char i;
TMOD=0x20; //定时器T1工作于方式2
TH1=0xfd; //根据规定给定时器T1赋初值
TL1=0xfd; //根据规定给定时器T1赋初值
PCON=0x00; //波特率9600
TR1=1; //启动定时器t1
SCON=0x40; //串口工作方式1
while(1)
{
for(i=0;i<200;i++) //模拟检测数据
{
Send(i); //发送数据i
delaynms(100); //100ms发送一次检测数据
}
}
}
第2个回答  2012-03-05
void main(void)
{
j=250;
loop:
if (P32==0)
{j=j+1;}

else

if (P33==0)
{j=j-1;}
else

if (j<500)
{ ;
}
else
{ j=250;
}

OutputPWM();
goto loop; //循环
}

//**********************
OutputPWM(void)
{

P10=!P10;
P11=!P11;
delay(500-j);
P10=!P10;
P11=!P11;
delay(j);

}
第3个回答  2012-03-04
你可以参考一下
#include<reg52.h>
unsigned char flag,a;
void main()
{

TMOD=0x20;//设置定时器1为工作方式2
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
while(1)
{
/* if(RI==1)
{
RI=0;
P1=SBUF;
}*/
if(flag==1)
{
ES=0;
flag=0;
SBUF='1';//28;
while(!TI);
TI=0;
SBUF='2';//28;
while(!TI);
TI=0;
SBUF='3';//28;
while(!TI);
TI=0;
ES=1;
}
}
}

void ser() interrupt 4
{
RI=0;
// P1=SBUF;
a=SBUF;
flag=1;
}

参考资料:郭天祥的十天学会单片机

第4个回答  2012-03-04
无语。

求助stc单片机串口通信程序
AUXR |= 0x04;\/\/独立波特率发生器时钟为Fosc,即1T AUXR |= 0x01;\/\/串口1选择独立波特率发生器为波特率发生器 AUXR |= 0x10;\/\/启动独立波特率发生器 ES=1;\/\/串口中断使能 } \/\/串口1发送,用于程序测试 void UART_SendByte(unsigned char c){ ES=0;TI=0;SBUF=c;while(TI==0);if(TI==...

请大神帮忙编写一个单片机C语言程序,串行通信的。
首先你想法是不正确的,AD的值不能直接给数组(uchar a[8])应该先赋给一个变量AD_ DATA 发送应该是SBUF=AD_DATA ,这条语句是把AD变量的值赋给SBUF串口寄存器。建议你先把串口调试出来在作其他的。

求助,STC12系列单片机与上位机的串口通信程序
晶振11.0592 STC12系列1T单片机,示例代码:include <reg51.h> sfr AUXR = 0x8E;void InitUART(void){ TMOD = 0x20;SCON = 0x50;TH1 = 0xDC;TL1 = TH1;PCON = 0x00;EA = 1;ES = 1;TR1 = 1;} void SendOneByte(unsigned char c){ SBUF = c;while(!TI);TI = 0;} v...

STC单片机串口通信问题!
你用的芯片是stc12系列的芯片,但是你的头文件是reg51.h 你这样编译都能通过的吗?reg51.h里面是标准51的寄存器,是只有1个串口的,建议你去stc的官网把stc12系列的头文件下载下来进行包含,如果你的程序没错的话,应该就可以用了 欢迎追问 ...

(求大神)STC单片机烧录不了程序 我觉得谁能解决得了我的问题谁就真大 ...
别急,先放下做些别的事,抽空琢磨着,过些时候等到心情平缓了或琢磨出可能的原因了再动手;感觉这样几个方面要关注下:1】串口驱动程序要用win7系统的版本。2】串口驱动成功并确认了串口号以后,打开STC-ISP选择“串口助手”做下串口测试,就是直接短路USB-COM输出连接单片机TXD\/RXD端并选择好接收与...

求助stc 单片机串口发送接收多个数据的程序
收\/发一个数据会了,那收\/多个的方法也相同。接收最好用中断方式,不影响其它程序执行。发送时,采用查询方式比较方便好写。发送多个,可用for循环控制,循环体内就是发送一个数据的程序,只是循环发送了。在循环发送前,把串口中断关了,ES=0;发送结束再打开中断,ES=1;...

STC单片机p31口如何串口通信IO复用
其次,不知你用的是什么型号的STC单片机,STC单片机有些型号是带双串口的,这样,还可以用第2个串口了,就不会影响你用P3.0和P3.1了,但最好还是把串口放在P3.0和P3.1上。因STC单片机下载程序就是用P3.0和P3.1这两个引脚的,所以,最好不要复用。按你补充的说法只能复用的话,就要考虑...

串口屏与stc单片机怎么接线
1、首先,打开STCISP软件。2、其次,选择要烧录的单片机型号。3、最后,选择单片机与电脑连接的串口号。

stc单片机串口调试的小程序,但是在串口调试助手里,显示接收不到数据...
你先看看串口线有没问题:将串口的2、3脚两根针短接,用键盘在串口调试输入字符,如果串口调试接收区能够显示输入的字符,说明串口工作正常 等我再看看程序 我觉得这儿有问题 JBC TI,SEND JBC在T1为0的时候,会顺序执行,然后就end了 ,这里我觉得应该改为等待发送结束的指令 JNB T1,...

单片机用STC-ISP下载程序出现串口通信失败
已经提示了,还有一个程序在使用串口,是不是打开串口调试助手了,把它关了,或者有其他什么程序正在用串口。如果不是,就是串口有问题,是用USB转串口的吧,要安装驱动程序,而且STC-ISP要指向这个由USB转串口生成的虚拟串口上。

相似回答