一道51单片机的C语言程序,关于串口通讯的,很简单......

2024-11-16 22:35:43
推荐回答(3个)
回答1:

#include //增强型52寄存器的定义
#define uchar unsigned char //用uchar代替unsigned char
#define uint unsigned int //用uint代替unsigned int
unsigned char flag,a,i; //定义变量flag,a,i
uchar code table[]="I receive,thanks"; //定义一个字符串数组

void init()
{
} //设置工作掘此兆方式,这个懂。

void main()
{
init(); //系扒颂统初始化,你懂的
while(1) //主循环部分,一直运行
{
if(flag==1) //等待flag标志位置位,当接收到数据的时候在串口接收中断中置位
{
ES=0; //禁止串口中断,但是注意发送中断标志位的置位仍然正常
for(i=0;i<18;i++) //for循环为了一个个把之前判租定义的字符串
{
SBUF=table[i]; //向串口收发缓冲器中写入回应的内容“I receive,thanks”
while(!TI); //等待发送完成,发送中断标志被置一,否则while循环一直进行
TI=0; //清除发送中断标志位
}
SBUF=a; //继续通过串口向串口收发缓冲器发送a,回显收到的数据
while(!TI); //等待发送完成
TI=0; //清除发送中断标志位
ES=1; //重新使能串口中断
flag=0; //清除flag,为了等待下一次接收
}
}
}
void serial() interrupt 4 //串口中断服务程序,优先级为4
{
RI=0; //当接收完成之后RI被置一,发生串口中断,清标志位
a=SBUF; //读取收到的字符,并赋给变量a
flag=1; //置接收完成标志flag为一,便于主程序中发送响应
}

回答2:

托你的福,我也学到了这点,谢谢!

回答3:

#include //头文件,c语言一样
#define uchar unsigned char //定义unsigned char为uchar
#define uint unsigned int
unsigned char flag,a,i; //定义unsigned char变量,其实这里用uchar也行
uchar code table[]="I receive, thanks "; //定义一个数组,存放到rom中,因为有code

void init()
{
} //设置工作方式,这个懂。

void main()
{
init(); //调用初始化函数
while(1) //while(1)循环,就是一直在这里面循环,一直接收
{
if(flag==1) //等待标志位也就是要等待接收中断执行缺册之后,标志位置1,就森扮历是执行接收中断后,flag为1
{
ES=0; //关掉中断
for(i=0;i<18;i++) //for循环,依次取出数据发送(你写错了,是8)
{
SBUF=table[i]; //将你取出的一个uchar型数据送给SBUF
while(!TI); //等待发送完成,当发送完成后TI为1
TI=0; //发送中断清零,智能软件清零如果不清0会一直中断,出错的会
}
SBUF=a; //然后再发个a
while(!TI); //同上
TI=0;
ES=1; //置位中断标志位
flag=0; //清除标志位
}
}
}
void serial() interrupt 4 //中断,注意是interrupt 4
{
RI=0; //当发生中断清楚接收中断标志RI,也就是置0,它只能软件清零,一定要注意,只要你发送或者接收到后,RI和TI都会置位,必须软件清0
a=SBUF; //从SBUF中取出数据
flag=1; //标志位置1
}
呵呵,好了,慢慢此搜来吧,单片机还是挺重要的~~~
记得给分啊~~~
(*^__^*) 嘻嘻……