51单片机串口中断函数响应并返回后主函数运行到末尾后卡着不动,主函数无法循环了

zhongguoshun0301 2012-05-27 12:01:51
程序如下:
void main(void)
{
LED_CHECK=1; //用来判断程序运行位置的LED灯,高电平灭。
Serial_Init(); //串口初始化函数
LCD_init(); //液晶屏初始化函数

if(acq||(!key)) //两种方式进入下面执行函数,acq(此为全局变量)由上位机串口设置启动,key为开发板上的按键启动。现在的问题是key启动没问题,程序可以再main函数内循环运行,但用PC机通过串口发生启动命令后,程序可以启动但运行到main函数底部后就不动了,无法循环,不知道是哪里的问题????
{
LCD_clear(2); //LCD清屏

pic_play(0,127,0,159); //显示图片
acq=0;
}

LED_CHECK=0; //用acq启动后运行到main函数的此位置,LED一直亮着
}

串口中断函数:
void ser_int (void) interrupt 4 using 1
{

LED_CHECK=1; //用acq启动后,主函数运行到底部也未把此处LED灯灭掉,说明未卡在中断函数中
if(RI == 1) //RI接受中断标志
{
RI = 0; //清除RI接受中断标志
ReData = SBUF;
if(ReData==97) //97为字符a的ascii
{
acq=1;
}
return;
}
...全文
1173 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhongguoshun0301 2012-05-29
  • 打赏
  • 举报
回复
多谢各位的耐心指导,在此特别感谢zxcvbnm987654321,问题已经完美解决。main函数必须增加无限循环(大循环),如果想增加其它条件循环,需把该条件循环语句放到大循环内。再次感谢给位!
流水源 2012-05-28
  • 打赏
  • 举报
回复
单片机编程main程序一定要死循环,这是最基本的知识。如果你的main函数在循环,只能说明你的单片机一直在复位。
zhongguoshun0301 2012-05-28
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
main函数是顺序执行吧??? 不会自己莫名循环吧???
LZ 这句 if(acq||(!key)) 不论是否进入if, 灯都是亮的额..
[/Quote]
dongyang626,你好!

测试验证main函数应该在循环,因为我用物理按键(点动)可以重复进入执行函数啊。
你说的对,灯不论是否进入if, 灯都是亮的,但如果main函数在循环的话,灯应该是在闪烁,或者一旦进入中断函数会把灯灭掉的。
  • 打赏
  • 举报
回复
main函数是顺序执行吧??? 不会自己莫名循环吧???
LZ 这句 if(acq||(!key)) 不论是否进入if, 灯都是亮的额..
流水源 2012-05-28
  • 打赏
  • 举报
回复
main主程序一定要加WHILE死循环,要不然main函数执行完会执行后面的代码,程序到处乱跳无法预料各种结果。
你这样改一下看看:
void main(void)
{
LED_CHECK=1; //用来判断程序运行位置的LED灯,高电平灭。
Serial_Init(); //串口初始化函数
LCD_init(); //液晶屏初始化函数
while(1){
if(acq||(!key))
{
LCD_clear(2); //LCD清屏
pic_play(0,127,0,159); //显示图片
acq=0;
LED_CHECK=0;
}
}
}

串口中断函数:
void ser_int (void) interrupt 4 using 1
{

if(RI == 1) //RI接受中断标志
{
RI = 0; //清除RI接受中断标志
ReData = SBUF;
if(ReData==97) //97为字符a的ascii
{
acq=1;
LED_CHECK=1;
}
}
}
zhongguoshun0301 2012-05-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
把你主程序中希望循环运行的主体部分放到while无限循环语句中:
while(1)
{
循环主体;
}

另外,你的中断函数怎么还少一个右括号?
[/Quote]

你好!
你还真够仔细的哦,可能是我拷贝的时候少复制了个右括号,程序能够通过编译的。
zhongguoshun0301 2012-05-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
你程序跑一次就结束了,没有死循环。
[/Quote]

你好!按道理主函数本身不也是一直循环的吗?
zhongguoshun0301 2012-05-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
程序跑飞了,没有while死循环。。。。
[/Quote]

zxcvbnm987654321,你好!
之前是我是有加while死循环的,但还是有同样的问题,所以我就把该语句删掉了。测试时上位机通过串口第一次发送命令时,单片机能够响应,此时主函数(main)末尾的LED_CHECK灯一直亮着,说明程序能够从串口中断程序中还回,但上位机第二次发送启动指令时,单片却没反应,且物理按键也无法使单片机执行我设置的执行函数,好像单片机执行到主函数末尾就不动了,不循环跑了,就像死机了一样。但单片机断电重启后,用物理按键手动控制单片机却可以重复进入我的执行函数中。难道是串口中断导致程序跑飞??但如果是跑飞了的话为什么程序又可以从串口中断中正常还回到主函数呢??
jsmouse 2012-05-28
  • 打赏
  • 举报
回复
你程序跑一次就结束了,没有死循环。
流水源 2012-05-27
  • 打赏
  • 举报
回复
程序跑飞了,没有while死循环。。。。
bjtea 2012-05-27
  • 打赏
  • 举报
回复
把你主程序中希望循环运行的主体部分放到while无限循环语句中:
while(1)
{
循环主体;
}

另外,你的中断函数怎么还少一个右括号?


作为Microsoft 32位平台的应用程序编程接口, Win32 API是从事Windows应用程序开发所必备的。 首先对Win32 API函数做完整的概述;然后收录五大类函数: 窗口管理、图形设备接口、系统服务、国际特性以及网络服务; 在附录部分,讲解如何在Visual Basic和Delphi中对其调用。 本书是从事Windows应用程序开发的软件工程师的必备参考手册。 控件与消息函数 共91个函数 硬件与系统函数 共98个函数 设备场景函数 共73个函数 绘图函数 共105个函数 位图、图标和光栅运算函数 共39个函数 菜单函数 共37个函数 文本和字体函数 共41个函数 打印函数 共66个函数 文件处理函数 共118个函数 进程和线程函数 共40个函数 Windows消息函数 共11个函数 网络函数 共14个函数 目 录 第一章 Win32 API概论…………………………………………………………………………1 1.1 为什么使用Win32 API …………………………………………………………………1 1.2 Win32 API简介 …………………………………………………………………………1 1.3 综述………………………………………………………………………………………11 第二章 窗口管理函数(Windows Control Function) ……………………………………13 2.1 易用特性函数(Accessibility Features)…………………………………………13 2.2 按钮函数(Button)……………………………………………………………………20 2.3 插入标记(^)函数(Caret)…………………………………………………………21 2.4 组合框函数(Combo box) ……………………………………………………………24 2.5 通用对话框函数(Common Dialog Box) ……………………………………………25 2.6 标函数(Cursor)………………………………………………………………………36 2.7 对话框函数(Dialog Box)……………………………………………………………40 2.8 编辑控制函数(Edit Control)………………………………………………………54 2.9 图标函数(Icon)………………………………………………………………………54 2.10 键盘加速器函数(Keyboard Accelerator)……………………………………… 61 2.11 键盘输入函数(Keyboard InPut) …………………………………………………63 2.12 列表框函数(List box) ……………………………………………………………75 2.13 菜单函数(Menu) ……………………………………………………………………76 2.14 消息和消息队列函数(Message and Message Queue)……………………………90 2.15 鼠标输入函数(Mouse Input) ……………………………………………………100 2.16 多文档接口函数(Multiple Document Interface) ……………………………103 2.17 资源函数(Resource)………………………………………………………………105 2.18 滚动条函数(Scroll Bar)…………………………………………………………113 2.19 窗口函数(Window)…………………………………………………………………119 2.20 窗口类函数(Window Class)………………………………………………………144 2.21 窗口过程函数(Window Procedure)………………………………………………150 2.22 窗口属性函数(Window Property) ………………………………………………152 第三章 图形设备接口函数(Graphic Device Interface Function) …………………155 3.1 位图函数(Bitmap) …………………………………………………………………155 3.2 笔刷函数(Brush)……………………………………………………………………171 3.3 剪切函数(Clipping) ………………………………………………………………176 3.4 颜色函数(Color)……………………………………………………………………179 3.5 坐标空间与变换函数(Coordinate Space Transformation)……………………186 3.6 设备环境函数(Device Context) …………………………………………………195 3.7 填充形态函数(Filled shape) ……………………………………………………211 3.8 字体和正文函数(Font and Text)…………………………………………………215 3.9 ICM 2.0函数 …………………………………………………………………………238 3.10 线段和曲线函数(Line and Curve)………………………………………………295 3.11 图元文件函数(Metafile)…………………………………………………………300 3.12 多显示器函数(Multiple Display Monitors) …………………………………311 3.13 绘图函数和画图函数(Painting and Drawing)…………………………………313 3.14 路径函数(Path)……………………………………………………………………328 3.15 画笔函数(Pen) ……………………………………………………………………332 3.16 打印及打印假脱机程序函数(Printing and Print Spooler)…………………334 3.17 矩形函数(Rectangle) ……………………………………………………………371 3.18 区域函数(Region)…………………………………………………………………374 第四章 系统服务函数(System Service Function) ……………………………………383 4.1 访问控制函数(Access Control) …………………………………………………383 4.2 原子函数(Atom) ……………………………………………………………………406 4.3 客户/服务器访问控制函数(Client/Server Access Control) ………………409 4.4 剪贴板函数(Clipboard)……………………………………………………………431 4.5 通信函数(Communication)…………………………………………………………436 4.6 控制台函数(Console)………………………………………………………………444 4.7 数据解压库函数(Data Decompression Library) ………………………………463 4.8 调试函数(Debugging)………………………………………………………………466 4.9 设备输入输出函数(Device Input and Output)…………………………………472 4.10 动态数据交换函数(Dynamic Data Exchange) …………………………………474 4.11 动态数据交换管理函数(Dynamic Data Exchange Management)………………476 4.12 动态链接库函数(Dynamic-Link Library)………………………………………489 4.13 错误函数(Error) …………………………………………………………………496 4.14 事件日志函数(Event Logging) …………………………………………………499 4.15 文件函数(File)……………………………………………………………………503 4.16 文件安装库函数(File Installation Library) ………………………………542 4.17 文件映射函数(File Mapping)……………………………………………………546 4.18 文件系统函数 File System)………………………………………………………551 4.19 句柄和对象函数(Handle and Object)………………………………………………556 4.20 挂钩函数(Hook)………………………………………………………………………560 4.21 ImageHlp函数…………………………………………………………………………572 4.22 大整数操作函数(Iarge Integer Operations)……………………………………594 4.23 低层访问控制函数(Low-Level Access Control)………………………………596 4.24 LSAPI函数 …………………………………………………………………………617 4.25 邮槽函数(Mailslot)………………………………………………………………622 4.26 内存管理函数(Memory Management) ……………………………………………623 4.27 管道函数(Pipe) …………………………………………………………………655 4.28 电源管理函数(Power Management) …………………………………………… 663 4.29 进程和线程函数(Process and Thread)…………………………………………666 4.30 注册表函数(Registry)……………………………………………………………700 4.31 字符串操作函数(String Manipulation)……………………………………… 724 4.32 结构化异常处理函数(Structured Exception Handling) ……………………742 4.33 同步函数(Synchronization) ……………………………………………………745 4.34 系统信息函数(System Information)……………………………………………766 4.35 系统消息函数(System Message)…………………………………………………780 4.36 系统关机函数(System Shutdown) ………………………………………………781 4.37 磁带备份函数(Tape Backup) ……………………………………………………783 4.38 时间函数(Time)……………………………………………………………………789 4.39 计时器函数(Timer) ………………………………………………………………795 4.40 工具帮助函数(Tool Help) ………………………………………………………796 4.41 窗口站和桌面函数(Window Station and Desktop)……………………………799 4.42 Windows NT 4.0访问控制函数(Window NT 4.0 Access-Control)……………808 4.43 WinTrust函数(WinTrust)…………………………………………………………814 第五章 国际特性函数(International Peatures Punction)时性…………………………815 5.1 输入方法编辑函数(Input Method Editor)…………………………………………815 5.2 国家语言支持函数(National Language Support)………………………………… 828 5.3 Unicode和字符集函数(Unicode and Character Set)……………………………… 843 第六章 网络服务函数(Networding Service Function)……………………………………849 6.1 数据链路控制函数(DLC)………………………………………………………………849 6.2 网络函数(Net)…………………………………………………………………………849 6.3 NetBIOS函数……………………………………………………………………………896 6.4 网络DDE函数(Networking DDE)……………………………………………………897 6.5 RAS服务器管理函数(RAS Server Administration)………………………………901 6.6 远程访问服务函数(Remote Access Administration)………………………………910 6.7 服务函数(Service)……………………………………………………………………929 6.8 Windows网络函数(Windows Networking)……………………………………………930 附录1 如何在VB中调用DLL API ……………………………………………………………945 1 DLL API的声明……………………………………………………………………………945 2 DLL API的调用……………………………………………………………………………947 附录2 在Delphi中直接调用Windows API…………………………………………………953

27,521

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧