予以处理。 限于篇幅,不可能详细介绍整个设计方案,在此只能给出各测试通道工作任务的前台和后台线程划分及流程,供参考。然后,给出一个中断退出后返回到任意地址的函数,它比c51自己的setjmp和longjmp全程跳转函数的使用要方便很多。实时任务中,中断服务结束后不是返回到断点地址执行原有程序,而是强制返回到某一地址执行新程序的情况非常普遍。我们采用设置环境变量的方法,使中断退出后可以任意返回到多个设置入口中的某一个去执行,有效地解决了前台和后台任务线程的灵活切换这一关键问题。我们使用的cpu是97c52,编程语言为keil c51 6.0版。 图3是主定时器中断服务,12c887提供中断请求信号至int0。12c887的三个中断触发服务中,温度扫描是独立线程,四次500ms“周期中断”(即每2s)后执行一遍;需要屏幕显示预温侄计时的时候使用“更新中断”,每秒一次,各测试任务,其倒计时线程依靠各自的标识启动和停止;“报警中断”需要时设置为每分钟1次,用于主菜单界面显示当前时间和长定时的返回。 图4是cpu内部定时器0的中断服务,用于a/d转换。每个测试任务的a/d分为两个线程:检测试剂加入和
虑到对采样数据简单处理要保留3ms时间,所以一次a/d转换时间不能超过47ms。 这样就出现了一个问题,我们可以把测量光信号的时间中断优先级设置得比测量温度的时间中断要高,这样才能保证前者的时间精度,而后者被中断的、未转换完的结果丢弃。但是,若每次a/d转换(包括数据处理)时间大于33ms,将导致恒温监控事件上无法进行,因为其间的每个测温a/d都无法完成。如果想使对机相温度的监控也不停止,则a/d转换时间至少要小于25ms,其道理是显而易见的。2.2 设计思想我们的系统使用12mhz主频的97c52,ad7715的接线如图2所示。串口方式0很适合三线制接口的使用,此方式下txd引脚作为串行时钟,接收和发送均使用rxd引脚;run接cpu的p1.6引脚,in_port.8是输入端口的第8位,用来接收状态信号drdy;数字供电(dvdd、dgnd)和模拟供电(avdd、agnd)分开;vref是基准电压,系统中使用2.39v精密电压。signal_in接多路开关(8选1)的输出,因为不需要转换差分信号,所以ain-接模拟地。2.3 调试和软件实现ad7715的最高更新率可以达到500hz,即理
应该可以的,8051废了之后当8031用了我以前买过很多拆机的97c52,呵呵,otp的,便宜,拿来做80c32用一样的。不知你用的什么芯片,为何不能用呢。