首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

HCS12AD转换中转换完成标志清除问题

HCS12AD转换中转换完成标志清除问题

HCS12AD转换中转换完成标志清除问题:
在中断服务程序中如何才能把SCF标志清除,我按照文档中的方法做了,但是就是清除不掉,请大家指教.我用的是DG128,源码如下所示:
Entry:
JSR ADINIT
CLI ;enable interrupts
LOOP: MOVB #%10000111,ATD0CTL5;右对齐方式,通道选择为通道7
BRA LOOP ;endless loop
;******************************************************************************
;**************************************************************
;* ADINIT *
;**************************************************************
ADINIT: MOVB #%10100010,ATD0CTL2 ;初始化AD,bit7=1:启动AD转换电源,bit1=1,允许中断方式AD转换
MOVB #%00001011,ATD0CTL3 ;bit6bit5bit4bit3=0001:转换序列长度为1,bit2=0:不使用FIFObit1bit0=11:冻结
MOVB #%10000101,ATD0CTL4 ;bit7=1:AD精度为8位,bit6bit5=00:2个采样周期,bit4-bit0=00101:对总线周期24M进行12分频
MOVB #$00,ATD0DIEN
JSR Dly1ms
RTS
;**************************************************************
;* ATD_ISR *
;**************************************************************
ATD_ISR LDAB ATD0STAT1 ;读状态寄存器
LDAB ATD0DR0L ;读AD转换的值
JSR HtoA ;将结果转换为十六进制通过串口输出
LDAB #$80
STAB ATD0STAT0 ;向SCF写1以清除该转换完成标志
;MOVB #%10000111,ATD0CTL5 ;开始下一次转换
RTI
;*****************************************************************************
应该不是不能清除中断标志,而是你在主循环中不断在开始新的AD转换。
海纳百川  有容乃大
版主,我用BDM在线调试的时候也是一样的,一直就在中断程序中不出来,而且AD转换的值也不会改变,就算输入改变,AD输出的值还是一样的.我试过在主循环中只执行一次 MOVB #%10000111,ATD0CTL5 ;开始下一次转换,并把BRA LOOP改为BRA *不去执行其他指令也是一样的.请指教.谢谢
不知道是不是其他地方设置的错误啊?我用的是DG128的芯片,以前用的是08的GB60,在那里用中断AD转换一点问题都没有,现在不知道为什么
把你的整个project打包贴出来看看吧。
海纳百川  有容乃大
我知道了,是DG128芯片的一个BUG,我老师上午打电话问邵贝贝老师了,在飞思卡尔网站上有说明,只能用快速清除标志模式才可以清除中断标志,正确代码我一会发上来
http://bbs.eccn.com/uploadImages/example_8_AD.rar
这个包是完整的用DB128B实现的AD转换例子,和大家分享,如果有错误请大家多多请点!谢谢
我现在学习飞思卡尔单片机,有兴趣的朋友可以和我一起交流,我愿意和大家分享我的感受!加我的QQ:274415332
返回列表