0

所以我有一个 PIC 16F88,我设法用它做了几件事,但现在我想知道如何进行模数转换?

我在互联网上尝试了很多例子,但没有成功:(如果有人能说明如何使用 ADCON0/1 和类似的东西,我将不胜感激。

非常感谢。

编辑:这是我的代码:

START
    banksel TRISA
    clrf    TRISB
    movlw   0xff
    movwf   TRISA
    movlw   b'11000111'
    movwf   OPTION_REG
    movlw   b'00000001'
    movwf   ADCON1
    banksel PORTB
    clrf    PORTB   
LOOP
    btfss   PIR1,ADIF
    goto    LOOP
    bsf ADCON0,GO   
WAIT
    btfsc   ADCON0,GO
    goto    WAIT
    movf    ADRESH,W
    movwf   PORTB,W
END
4

1 回答 1

0

从 PIC 数据表:

ADRESH:ADRESL 寄存器包含 A/D 转换的 10 位结果。当 A/D 转换完成时,结果被装入该 A/D 结果寄存器对,GO/DONE 位(ADCON0<2>)被清零,A/D 中断标志​​位 ADIF 被置位。A/D 模块的框图如图 11-1 所示。

根据需要配置 A/D 模块后,必须在开始转换之前获取所选通道。 模拟输入通道必须选择其对应的 TRIS 位作为输入。要确定采样时间,请参见第 11.1 节。经过这段采集时间后,可以开始 A/D 转换。进行 A/D 转换应遵循以下步骤:

  1. 配置 A/D 模块: • 配置模拟引脚/电压基准/和数字 I/O (ADCON1) • 选择 A/D 输入通道 (ADCON0) • 选择 A/D 转换时钟 (ADCON0) • 打开 A/D 模块(ADCON0)
  2. 配置 A/D 中断(如果需要): • 清除 ADIF 位 • 设置 ADIE 位 • 设置 GIE 位 3。等待所需的采集时间。
  3. 开始转换: • 设置 GO/DONE 位 (ADCON0)
  4. 等待 A/D 转换完成,通过以下方式之一: • 轮询 GO/DONE 位以清除或 • 等待 A/D 中断
  5. 读取 A/D 结果寄存器对 (ADRESH:ADRESL),如果需要,清除位 ADIF。
  6. 对于下一次转换,根据需要转到第 1 步或第 2 步。每个位的 A/D 转换时间定义为 TAD。在下一次采集开始之前,至少需要等待 2TAD。

在开始转换之前,您无需等待采集时间。其他一切似乎都是正确的。

于 2012-05-22T17:06:38.070 回答