使用C语言编程实现单片机与上位机串行通信,其上位机发送数据给单片机,单片机接收到后发回给上位机。单片机fosc为11.0592MHz,波特率使用9600,串口工作在方式1。要中断法接收,查询法发送。
第1个回答 2013-12-30
#include "reg52.h"
#define uchar unsigned char
#define LLONG 30
//char code table[]="Hello!";
uchar code table[]={'F','i','r','s','t','C','h','a','r',':',0x0d,0x0a,'W','W','W','.','H','E','B','T','U','.','E','D','U','.','C','N',0x0d,0x0a};
uchar Flag,FirstChar=0,UARTChar[10]={0};
void uart() interrupt 4
{
ES=0; //---- 中断暂停 ----
RI=0; //---- 清标志位 ----
FirstChar=SBUF;
Flag=1;
ES=1; //---- 中断开启 ----
}
void main()
{
char i=0;
TH1=0xFD;
TL1=0xFD;
TMOD=0x20;//T1在定时器方式
TCON=0x40;//TR1=1
PCON=0x00;//SMOD为0
SCON=0x50;//串行方式1 REN=1
IP=0x00;
IE=0x90;
while(1)
{
if(Flag==1)
{
ES=0; //---- 中断暂停 ----
Flag=0; //---- 清标志位 ----
for(i=0;i<10;i++)
{
SBUF=table[i];
while(!TI);
TI=0;
}
SBUF=FirstChar;
while(!TI); //---- 通讯等待 ----
TI=0; //---- 清标志位 ----
for(i=10;i<LLONG;i++)
{
SBUF=table[i];
while(!TI);
TI=0;
}
ES=1; //---- 中断开启 ----
}
}
}
#define uchar unsigned char
#define LLONG 30
//char code table[]="Hello!";
uchar code table[]={'F','i','r','s','t','C','h','a','r',':',0x0d,0x0a,'W','W','W','.','H','E','B','T','U','.','E','D','U','.','C','N',0x0d,0x0a};
uchar Flag,FirstChar=0,UARTChar[10]={0};
void uart() interrupt 4
{
ES=0; //---- 中断暂停 ----
RI=0; //---- 清标志位 ----
FirstChar=SBUF;
Flag=1;
ES=1; //---- 中断开启 ----
}
void main()
{
char i=0;
TH1=0xFD;
TL1=0xFD;
TMOD=0x20;//T1在定时器方式
TCON=0x40;//TR1=1
PCON=0x00;//SMOD为0
SCON=0x50;//串行方式1 REN=1
IP=0x00;
IE=0x90;
while(1)
{
if(Flag==1)
{
ES=0; //---- 中断暂停 ----
Flag=0; //---- 清标志位 ----
for(i=0;i<10;i++)
{
SBUF=table[i];
while(!TI);
TI=0;
}
SBUF=FirstChar;
while(!TI); //---- 通讯等待 ----
TI=0; //---- 清标志位 ----
for(i=10;i<LLONG;i++)
{
SBUF=table[i];
while(!TI);
TI=0;
}
ES=1; //---- 中断开启 ----
}
}
}
第2个回答 2013-12-30
你是哪款的单片机51,ATMEL,ST,还是TI的,需要程序就出单片机相应官网里去找,会有很多例程的,51的话很多论坛里都有资源,找找就有了追问
是51单片机,老师留的题目,我不会做,纠结了好久,
追答这比较麻烦,我手上也没51板子,一般写程序如果比较急都是在别人的程序上自己修改成自己需要的功能,因为很难找到完全符合自己要求得程序,你要不就找一个串口程序让你同学给你改改,或者就看有没有其他网友能给你写个程序,你到一些单片机论坛里去找找看有没有,51玩的人比较多,说不定可以找到。
本回答被提问者采纳第3个回答 2013-12-30
51的是最基础的了,有什么不明白的?可以问我。