10861|9

94

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

c51奇怪问题请教,高手请进,谢谢! [复制链接]

一段很简单的代码,没有任何错误和警告,烧写下去跑的很正常,但是编译器编译后单步执行到?处却飞啦 为什么呢?请指点,谢谢! #include<reg51.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char sfr AUXR = 0x8e; uchar STATE; uint counter; void INI(); void receive(); void send_onebyte(uchar n); void Delay(uint n); void main() { counter=0; STATE=0; INI(); // TR0=1; while(1) { if(STATE==0x10) { send_onebyte(0x22); TR0=1; STATE=0; } Delay(2); } } /*******************************************************************************************/ void Delay(uint n) { uint i; while(n--) { for(i=0;i<80;i++) { }; } } /*******************************************************************************************/ //*******************************************************************************// /*void INI_INTERRUPT() { ES=0;// ;禁止串口中断 TMOD=0x21;// ;设置T1为波特率发生器,定时器模式二运行,自动重装初值 SCON=0x50;// ;8位数据位,无奇偶校验 TH1=0xFD;TL1=0xFD;// //11.0592MHZ 晶振,波特率9600 TH0=0xee;TL0=0x00; //2^16-1ms/(12/11.0592us); AUXR &=0xbf;// ;定时器工作在12T模式下,与普通8051相同 RI=0; EA=1; ET0=1; ET1=1; TR1=1; ES=1; }*/ void INI() { ES=0; TMOD=0x21; SCON=0x50; TH1=0xFD;TL1=0xFD; TH0=0xee;TL0=0x00; AUXR&=0xbf; RI=0; EA=1; ET0=1; ET1=1; TR1=1; ES=1;//????????????????????????????????????? } //*******************************************************************************// //*******************************************************************************// void send_onebyte(uchar n) { ES=0; TI=0; SBUF=n; while(TI==0); TI=0; ES=1; } //*******************************************************************************// void timer0(void)interrupt 1 using 1 { counter++; TH0=0Xee;TL0=0X00;//about 5ms //TH0=0X80;TL0=0X00;about 22ms send_onebyte(counter); if(counter==100) { send_onebyte(counter); counter=0; } } //*******************************************************************************// void receive()interrupt 4 using 3 { uchar temp; if(RI) { RI=0; temp=SBUF; STATE=SBUF; temp++; send_onebyte(temp); } else {TI=0;} }
此帖出自51单片机论坛

最新回复

注意函数send_onebyte(uchar n) (默认寄存器组0) timer0(void)interrupt 1 using 1 receive()interrupt 4 using 3 在不同的寄存器组中是无法正确传送参数的 另外不提倡使用这种资源互锁的操作,还需要考虑中断优先级的问题  详情 回复 发表于 2007-10-23 10:12
点赞 关注
 

回复
举报

1170

帖子

0

TA的资源

至上芯片

沙发
 

回复:c51奇怪问题请教,高手请进,谢谢!

跑飞?什么意思?也许是进入中断服务了。
此帖出自51单片机论坛
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

回复:c51奇怪问题请教,高手请进,谢谢!

你的意思是实际运行可以,软件仿真不行。。。没有见过这种情况,相反情况见过。。。
此帖出自51单片机论坛
 
 
 

回复

94

帖子

0

TA的资源

一粒金砂(初级)

4
 

回复:c51奇怪问题请教,高手请进,谢谢!

对实际运行可以,软件仿真就飞啦
此帖出自51单片机论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

5
 

回复:c51奇怪问题请教,高手请进,谢谢!

估计是中断问题.你仿镇 环境设置对吗?
此帖出自51单片机论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

6
 

回复:c51奇怪问题请教,高手请进,谢谢!

用keil么?设置正常的吧。。。。hoho
此帖出自51单片机论坛
 
 
 

回复

94

帖子

0

TA的资源

一粒金砂(初级)

7
 

回复: c51奇怪问题请教,高手请进,谢谢!

对,是kei,昨晚回去在自己笔记本上把keil卸载后重新安装下,ok,程序不飞,后来写一个类似测试程序的时候又飞了,代码如下,基本功能很简单就是开两个定时器(其中t0为普通定时器工作在方式一下,t1为波特率发生器工作在方式二下)和串口中断,当只开t1和串口中断的时候,很正常,当加上t0普通定时器的时候程序软件模拟飞,烧下去也不行,而且所有程序均是0错误0警告的,请各位继续分析,谢谢! //#include <REGF51RC.H> #include<reg51.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char sfr AUXR = 0x8e; uchar counter; void INI_INTERRUPT(); void receive(); void send_onebyte(uchar n); void Delay(uint n); void timer0_5ms(); void main() { counter=0; INI_INTERRUPT(); while(1) { Delay(10); } } //*******************************************************************************// void INI_INTERRUPT() { ES=0;// ;禁止串口中断 TMOD=0x21;// ;设置T1为波特率发生器,定时器模式二运行,自动重装初值 SCON=0x50;// ;8位数据位,无奇偶校验 TH1=0xFD;// ;11.0592MHZ 晶振,波特率9600 TL1=0xFD;// AUXR &=0xbf;// ;定时器工作在12T模式下,与普通8051相同 RI=0; EA=1; ET0=1; ET1=1; TR1=1; TR0=1; ES=1; } //*******************************************************************************// //function Delay 100us(); delay 100us //*******************************************************************************// void Delay(uint n) { uint i; while(n--) for(i=0;i<80;i++); } //*******************************************************************************// //*******************************************************************************// void receive()interrupt 4 using 3 { uchar temp; if(RI) { RI=0; temp=SBUF; temp++; send_onebyte(temp); } else {TI=0;} } //*******************************************************************************// void send_onebyte(uchar n) { ES=0; TI=0; SBUF=n; while(TI==0); TI=0; ES=1; } //*******************************************************************************// void timer0_5ms(void)interrupt 1 using 1 { counter=counter+1; TH0=0xee;TL0=0x00; send_onebyte(counter); } //*******************************************************************************//
此帖出自51单片机论坛
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

8
 

回复:c51奇怪问题请教,高手请进,谢谢!

试试KEIL自带的例子就知道了。。。
此帖出自51单片机论坛
 
 
 

回复

94

帖子

0

TA的资源

一粒金砂(初级)

9
 

回复:c51奇怪问题请教,高手请进,谢谢!

谢谢ayb_ice的建议,找了些例子,但是好像没有同时开这三个中断的例子,那位大侠有写好的开这三个中断的例子,贴出来(在不影响你公司或者个人技术保密的范围内)我对照一下差异也行。谢谢!
此帖出自51单片机论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

10
 

回复:c51奇怪问题请教,高手请进,谢谢!

注意函数send_onebyte(uchar n) (默认寄存器组0) timer0(void)interrupt 1 using 1 receive()interrupt 4 using 3 在不同的寄存器组中是无法正确传送参数的 另外不提倡使用这种资源互锁的操作,还需要考虑中断优先级的问题
此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表