51stm32 单片机串口中断UART串口中断发送问题

51单片机 串口通信 中断
我的图书馆
51单片机 串口通信 中断
http://www.eeworld.com.cn/mcu/article_6.html2016& & 从一段程序开始 实现电脑向发送一些数据,单片机返回Iget +数据
#include #define uchar unsigned char
&#define uint unsigned int unsigned char flag,a,i;//声明标志位 flag
&uchar code table[]="I get"
&void init()
&&TMOD=0x20;//设置T1定时器工作方式为2 8位初值自动重装的8位定时器 这里设置了两个计数器的工作方式
& TH1=0 / /T1定时器装初值(高八位) 控制的波特率(由定时器1的溢出率控制)
& TL1=0 //T1定时器装入初值(低八位)
& TR1=1; //定时器1运行控制位 置一启动定时器1
& REN=1; //允许串口接收
& SM0=0; //设置串口工作方式为一
&&SM1=1; EA=1; //全局允许位 置一开全局中断
&&ES=1; //串口中断允许位
&void main()
&&&&& init();
&&&& &if(flag==1)
&&&&&&& &ES=0;
&&&& &for(i=0;i&6;i++)
&& & SBUF=table[i];
&&&& while(!TI);
&&&&&TI=0;//发送中断标志 发送数据完成后触发中断 硬件置一 必须软件清零
&&& SBUF=a; // 串口发送数据
while(!TI);
&&&& TI=0;
&&& &ES=1;
&&& flag=0;
&void ser()
4 //串口中断服务程序
&&& RI=0; // 收到数据硬件置一,由软件清零
&&& a=SBUF; //将寄存器的值 赋给a flag=1; //标志位
此程序中共用的串口中断,
定时器1中断 特殊功能寄存器SBUF
&中断响应的条件
中断源有中断请求 此中断源允许位为1 cpu开中断(即EA=1)以上三个条件同时满足
&串口通信设置
确定串口通信波特率(编程TMOD寄存器定时器工作方式寄存器)
&计算定时器初值转载THX TLX
确定串行口工作方式(编程SCON寄存器串行口控制方式寄存器)
&串行口工作在中断方式时,要进行中断设置如TI,RI软件清零
[转]&[转]&[转]&[转]&[转]&[转]&
喜欢该文的人也喜欢51单片机学习笔记(六)_串口中断通信+定时器2串口中断
默认使用 1作为串口通信的波特率发生器、定时器1中断通信,串口与定时器1冲突,在遇到定时器不够用的时候可以用定时器2 #include &reg52.h& void DelayMs(unsigned int i); void SerialInit(); void SendByte(unsigned char sbyte); void SendString(unsigned char *pstr); void main(void) { SerialInit(); while(1); //注:必需要无限循环 } /* // 时钟周期:11.0592MHz 以时钟1作为波特率发生器 void SerialInit(){ TMOD=0x20; //设置T1工作方式为方式2 TH1=0 //给定时器高位装初值 TL1=0 //给定时器低位装初值 TR1=1; //开定时器 //以上是设置波特率 SM0=0; //设置串口通讯方式为方式1 SM1=1; REN=1; //串口是否接收数据的开关 EA=1; //总中断打开,采用查询法时不用打开中断 ES=1; //串口中断开关,采用查询法时不用打开中断 } */ //单片机时钟周期:11.0592MHz 以时钟T2作为波特率发生器 void SerialInit(){ PCON &= 0x7F; //波特率不倍速 SMOD=0 SCON = 0x50; //方式1,8位数据,可变波特率,接收允许 T2CON = 0x34; RCAP2H = 0xFF; RCAP2L = 0xDC; TH2 = 0xFF; TL2 = 0xDC; EA=1; //总中断打开,采用查询法时不用打开中断 ES = 1; //串口中断开关,采用查询法时不用打开中断 } //串口中断函数: void SerialPortInte(void) interrupt 4 //采用串口中断法收发数据 { if(RI){ //RI=1,判定为串口接收到了数据,RI要清零, RI=0; rbyte=SBUF; if(rbyte==0x0A){ SendString("换行"); }else if(rbyte==0x0D){ SendString("回车"); }else{ SendByte(rbyte); } } } //串口发送一个字节: void SendByte(unsigned char sbyte) { SBUF= //发送数据 while(!TI); //等待发送完成 TI=0; //清零发送标志位 } //串口发送一个字符串: void SendString(unsigned char *pstr) //定义指针 { while(*pstr!='\0') //字符串是否发完 { SendByte(*pstr);//发送字符串数据 pstr++; //指向下一个字符 } } void DelayMs(unsigned int i) //延时i ms { while(i--) { for(j = 0; j & 125; j++); } }
原文链接:
责任编辑:
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
今日搜狐热点串口调试助手发送多次只偶尔成功接收一次之前发送的所有,哪错?【51单片机吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:59,334贴子:
串口调试助手发送多次只偶尔成功接收一次之前发送的所有,哪错?收藏
#include&reg52.h&#define uchar unsigned char#define uint unsigned intuchar flag,i,t;uchar
StringdData[100];uchar code table[]=&I get &;//字符串用“”,字符用‘’,其他用{}void init(){ TMOD=0x20;// T1定时器工作方式2【8位初值自动重装,进入中断后无事可做,无需打开定时器1中断】 TH1=0xFD;
TL1=0xFD;//9600pbs T1定时器装初值
【TCON定时器控制寄存器】 TR1=1; //启动定时器运行控制位 SCON=0x50;// REN=1;//允许串行接收允许位// SM0=0; //串口工作方式1// SM1=1;//
【SCON串行口控制寄存器】
EA=1;//开全局总中断 ES=1; //开串口中断
【IE中断允许寄存器】}void main(){
while(1)//进入大循环一直检测标志位flag是否为1,当检测到为1,说明程序已经执行过(串口中断服务程序),即收到了数据,否则始终检测flag状态
if(flag==1)
ES=0;//关闭串口中断【为了避免死循环,等发送完数据再打开】
for(i=0;i&6;i++)
SBUF=table[i];//发送缓冲器发送数据
while(!TI); //等待发送数据完成,发送中断标志位TI置1,取非,跳出循环
TI=0; //软件清零
for(i=0;i&t;i++)
SBUF= StringdData[i];//发送缓冲器再发送从(串口中断服务程序)中读回来的数据
while(!TI); //发送中断标志位
//SBUF='\n';
while(!TI); //发送中断标志位
}}void ser()interrupt 4//串口中断服务程序{ RI=0;//RI(接收中断标志位)硬件置1要清零【既然产生串口中断,肯定是收到或发送了数据,在开始没有发送任何数据,必然是收到了数据】 StringdData[t] =SBUF;//接收缓存器接收数据,a读取接收
t++; if(StringdData[t]=='\n') {
flag=1;//方便在主程序中查询是否已经收到数据 }}
我的现在也是这个问题,你那时怎么弄的
没看你程序,我遇到过,是晶振用的11.0592M和12M的问题
登录百度帐号查看: 4164|回复: 5
51单片机UART 如何发送与接收字符串?
51单片机驱动2.4寸TFT液晶显示屏,同时会接收来自一上位机发来的字符串,来显示一些参数。?请问如何实现?
回复【楼主位】vesion2012
-----------------------------------------------------------------------
单片机只能一个一个字符的接收,自己写个字符串接受程序吧
定义一个数组用于字符串接受用
自己定一个程序或者搜一下有没有写过这样子的程序
上位机跟下位机得先定好通信协议吧,约定好以哪个字节代表开始哪个字节代表结束,然后可以在中断函数里用判断起始位则开始往全局变量数组里存,直到接收到结束位为止。起始位跟结束标志位的设置不要与传输的数据有相同,不然会引起透明传输的问题。
很想學習這個
阿莫电子论坛, 原"中国电子开发网"
, 原www.ourdev.cn, 原www.ouravr.com 上传我的文档
 下载
 收藏
粉丝量:22
愿得一心人,白首不相离
愿得一心人,白首不相离
 下载此文档
51单片机的串口中断程序
下载积分:1200
内容提示:51单片机的串口中断程序
文档格式:DOCX|
浏览次数:198|
上传日期: 18:22:38|
文档星级:
全文阅读已结束,如果下载本文需要使用
 1200 积分
下载此文档
该用户还上传了这些文档
51单片机的串口中断程序
关注微信公众号

我要回帖

更多关于 c51单片机串口中断 的文章

 

随机推荐