本帖最后由 Nu_Micro 于 2016-7-5 14:55 编辑
实际上这是一个接外部ADC芯片ICL7135的驱动程序,MCU输出一个250K的PWM信号作为ICL7135的时钟源, PB15接到ICL7135的busy管脚,“busy”输出端(ICL7135的21脚)高电平的宽度等于积分和反积分时间之和。ICL7135内部规定积分时间固定为10001个时钟脉冲时间,反积分时间长度与被测电压的大小成比例。如果利用单片机内部的计数器对ICL7135的时钟脉冲计数,利用“busy”作为计数器门控信号,控制计数器只能在busy为高电平时计数,将这段busy高电平时间内计数器的内容减去10001,其余数便等于被测电压的数值。
当busy上升沿信号触发M0518 PB15中断后,MCU启动timer 的 计数功能开始计数,等busy下降沿再次触发外部中断时,停止timer 计数,这就可以算出busy高电平时间内MCU输出到7135的时钟脉冲个数了; timer时钟设为25M, PWM输出250K hz波形,timer获取的计数值除以100刚好是PWM输出的周期个数;
|