logo
 
首页-> 产品信息-> 8位单片机
 
入门指南
开发&工具
应用方案
客户支持
 
学习e条龙
一、单片机简介 二、指令系统 三、IO端口 四、中断系统
五、定时/计数器 六、串行接口 七、模拟外设 八、其它硬件
九、开发工具 、应用实例 十一、附录  

模拟外设

内容索引
7.1 模数转换器
7.2 DAC原理及应用
7.3 电压比较器原理及应用

7.1  模数转换器

7.1.1  A/D 转换器工作原理

  将 A/D 转换器电路集成到单片机内,可有效的减少外部器件,同时,具有低成本和减少器件空间需求的优势。 A/D 转换器广泛应用于触摸屏、电池电量检测等很多场合。

  SPMC65 系列单片机具有 9 通道 A/D 转换功能,精度为 10 位,可选内部参考电压即电源电压( VDD ),也可选择外部参考电压输入( VRT )( 8 通道 10 位 ADC 模式), PB7 用作外部参考电压的输入管脚。 ADC 输入通道和 I/O 端口 A[7:0] 、 PB7 复用,具体请参见 表 7.1 。

表 7 . 1 A/D 转换模式简表

模式

9 通道 10 位 ADC 模式

8 通道 10 位 ADC 模式

参考电压源

内部参考电压即电源电压

外部参考电压输入( PB7 )或内部参考电压

端口复用

ADC 输入通道和端口 PA[7:0] 、 PB7 复用

ADC 输入通道和端口 A[7:0] 复用

  A/D 转换器结构图请参见 图 7.1 。

图 7 . 1 A/D 转换器结构图

  SPMC65 系列单片机的 A/D 输入范围为 0~VDD/VRT ,而 VRT 最高不能超过 VDD 。

  而 A/D 转换时每完成一位所花的时间为 TAD ,在 SPMC65 系列单片机中,进行 10 位 A/D 转换总共需要 14 个 TAD 。 A/D 转换时钟频率共有 8 种选择,可以通过 P_AD_Ctrl0 寄存器中的 ADCS[2:0] 位设定,为了保证转换结果的正确, A/D 转换的时钟频率 (1/TAD) 应低于 1.4MHZ ,以配合 A/D 转换硬件部分的要求。由此可算出 SPMC65 系列单片机的 A/D 转换速率最高为 100KHz 。

7.1.2 控制寄存器

  A/D 转换相关寄存器有如下 7 个:

A/D 转换控制寄存器

P_AD_Ctrl0 P_AD_Ctrl1 P_AD_Ctrl2

A/D 转换结果存放寄存器

P_AD_DataHi P_AD_DataLo

A/D 转换中断控制和中断标志寄存器

P_INT_Ctrl0 P_INT_Flag0

•  A/D 转换控制寄存器

  ( 1 ) P_AD_Ctrl0 ( $28,R/W )

  作用: A/D 转换使能、外部或内部参考电压选择、 A/D 转换的时钟频率选择、启动 A/D 转换功能;该寄存器默认初值为 #00h 。

表 7 . 2 A/D 转换控制寄存器 0P_AD_Ctrl0 ( $28,R/W )

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

R

ADEN

ADVRT

-

-

ADCS2

ADCS1

ADCS0

ADRDY

W

ADEN

ADVRT

-

-

ADCS2

ADCS1

ADCS0

STARTB

Bit 7  ADEN : A/D 转换使能位
 
       0 = 禁止 A/D 转换功能
      
       1 = 允许 A/D 转换功能
     
Bit 6  ADVRT : A/D 转换参考电压选择位
     
      1 = 选用外部参考电压( VRT ), PB7 做为外部参考电压输入
     
      0 = 选用电源电压作为参考电压( VDD )

Bit [5:4] 保留

Bit [3:1] ADCS[2:0] : A/D 转换时钟的频率选择位。
     
      注意: AD 转换的时钟的频率不能超过 1.4MHz ,以保证转换结果的正确性。
     
      111= F SYS ÷ 256
     
      110= F SYS ÷ 128
     
      101= F SYS ÷ 64
     
      100= F SYS ÷ 32
     
      011= F SYS ÷ 16
     
      010= F SYS ÷ 8
     
      001= F SYS ÷ 4
     
      000= F SYS ÷ 2
     
      F SYS :系统时钟
     
Bit 0  ADRDY/STARTB : A/D 转换状态标志和启动位

     读操作: A/D 转换的状态
     
      1: A/D 转换结束
     
      0: 正在进行数据转换
     
      写操作: A/D 转换启动位
     
      1: 无效
     
      0: 启动 A/D 转换

( 2 ) P_AD_Ctrl1 ( $29,R/W )

  作用:设置 I/O 端口作为 ADC 的输入通道,该寄存器默认初值为 #00h 。

表 7 . 3 A/D 转换控制寄存器 1 P_AD_Ctrl1 ( $29,R/W )

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

PCFG7

PCFG6

PCFG5

PCFG4

PCFG3

PCFG2

PCFG1

PCFG0

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

PCFG7:

1= 模拟输入口 (AN7)

0= 普通 I/O 端口 (PA7)

PCFG6:

1= 模拟输入口 (AN6)

0= 普通 I/O 端口 (PA6)

PCFG5:
  
   1= 模拟输入口 (AN5)
  
   0= 普通 I/O 端口 (PA5)

PCFG4:
  
   1= 模拟输入口 (AN4)
  
   0= 普通 I/O 端口 (PA4)

PCFG3:
  
   1= 模拟输入口 (AN3)
  
   0= 普通 I/O 端口 (PA3)

PCFG2:

  1= 模拟输入口 (AN2)
  
   0= 普通 I/O 端口 (PA2)

PCFG1:
  
   1= 模拟输入口 (AN1)
  
   0= 普通 I/O 端口 (PA1)

PCFG0:
  
   1= 模拟输入口 (AN0)
  
   0= 普通 I/O 端口 (PA0)

( 3 ) P_AD_Ctrl2 ( $2A,R/W )

  作用:通道选择寄存器,选择需要进行 A/D 转换的通道,该寄存器默认初值为 #00h 。

表 7 . 4 A/D 转换控制寄存器 2 P_AD_Ctrl2 ( $2A,R/W )

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

ADCE

ADS3

ADS2

ADS1

ADS0

-

-

PCFG8

R/W

R/W

R/W

R/W

R/W

-

-

R/W

Bit 7   ADCE : A/D 转换电源控制位。当不进行 A/D 转换时,关闭 ADC 电源可以省电。

      1= 打开 A/D 转换电源
      
       0= 关闭 A/D 转换电源

Bit [6:3] ADS[3:2] : A/D 转换通道选择

      0000= 选择通道 0 (AN0).
      
       0001= 选择通道 1 (AN1)
      
       0010= 选择通道 2 (AN2)
      
       0011= 选择通道 3 (AN3)
      
       0100= 选择通道 4 (AN4)
      
       0101= 选择通道 5 (AN5)
      
       0110= 选择通道 6 (AN6)
      
       0111= 选择通道 7 (AN7)
      
       1000= 选择通道 8 (AN8)

      其它 = 保留

Bit [2:1] 保留 Bit 0 PCFG8 :

      1 = 模拟输入口 (AN8/Avref)
      
       0 = 数字输入口 (PB7)

•  A/D 转换结果存放寄存器

( 1 ) P_AD_DataHi ( $2B,R/W )

  作用: 10bit A/D 转换结果的高 8 位存放寄存器。

表 7 . 5 A/D 转换值高字节寄存器 P_AD_DataHi ( $2B,R/W )

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

ADData9

ADData8

ADData7

ADData6

ADData5

ADData4

ADData3

ADData2

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

( 2 ) P_AD_ DataLo ( $2C,R/W )

  作用: 10bit A/D 转换结果的低 2 位存放寄存器。

表 7 . 6 A/D 转换值低字节寄存器 P_AD_DataLo ( $2C,R/W )

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

ADData1

ADData0

-

-

-

-

-

-

R/W

R/W

-

-

-

-

-

-

•  A/D 转换中断相关寄存器

  A/D 转换的中断相关的寄存器为中断控制寄存器 0 ( P_INT_Ctrl0 )和中断标志寄存器 0 ( P_INT_Flag0 ),当需要用中断的方式读取 A/D 转换的结果时,在 P_INT_Ctrl0 的 Bit7 位设置为 1 ,并且打开总中断即可。

( 1 ) P_INT_Flag0 ( $0C,R/W )

  作用:中断标志寄存器,其中 Bit7 为 ADC 中断标志位。

表 7 . 7 中断标志寄存器 0 P_INT_Flag0 ( $0C,R/W )

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

ADIF

WDIF

IRQ5IF/

CAP5IF

IRQ4IF/

CAP4IF

IRQ3IF

IRQ2IF

IRQ1IF/

CAP3IF

IRQ0IF/

CAP2IF

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

( 2 ) P_INT_Ctrl0 ( $0D,R/W )

  作用:中断控制寄存器,其中 Bit7 为 ADC 中断控制位。

表 7 . 8 中断控制寄存器 0 P_INT_Ctrl0 ( $0D,R/W )

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

ADIE

WDIE

IRQ5E/

CAP5E

IRQ4E/

CAP4E

IRQ3IE

IRQ2IE

IRQ1IE/

CAP3IE

IRQ0IE/

CAP2IE

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

7.3.1 A/D 转换器应用

  A/D 转换应用的一般步骤如下:

   ·打开 A/D 转换电源
  
   ·允许 A/D 转换,选择 A/D 转换的时钟速率
  
   ·将 I/O 口定义为模拟口
  
   ·选择模拟电压输入口
  
   ·启动 A/D 转换
  
   ·A/D 转换结束后读取结果

【例 7-1 】: 初始化 A/D 转换,从 AN1 输入模拟信号,并启动 A/D 转换器。

set  P_AD_Ctrl2,7   ; 打开 A/D 转换电源
 
lda  #85h       ; 允许 A/D 转换功能, A/D 转换的时钟速率
 
             ; 为 Fcpu ( 8M ) /8 = 1M
 
sta  P_AD_Ctrl0
 
lda  #FFh       ; 定义 PA 口为模拟口
 
sta  P_AD_Ctrl1
 
lda  #88h       ; 选择通道 1(AN1)
 
sta  P_AD_Ctrl2
 
lda  P_AD_Ctrl0
 
and  #11111110B    ; 启动转换
 
sta  P_AD_Ctrl0

  A/D 转换结束后读取结果

  A/D 转换结束后,转换结果保存在寄存器 P_AD_DataHi 和 P_AD_DataLo 中,转换结果有两种判断方式:查询方式和中断方式。

  ( 1 )查询方式:当 A/D 转换结束, P_AD_Ctrl0 的 Bit0 会被置 1 ,因而,可以在程序中不断查询该标志位,当该标志位被置 1 ,表示 A/D 转换结束,将 转换结果存入结果寄存器便可以 读取结果。流程如下:

图 7 . 2 查询式 A/D 转换流程

【例 7-2 】: 查询式 A/D 转换 。

 set  P_AD_Ctrl2,7    ; 打开 A/D 转换电源
   
  lda  #85h        ; 允许 ADC 转换功能
   
              ; ADC clock= Fsys(8MHz)/8= 1MHz
   
  sta  P_AD_Ctrl0
   
  lda  #FFh        ; 定义 PA 口为模拟口
   
  sta  P_AD_Ctrl1
   
  lda  #88h        ; 选择通道 1 ( AN1 )
   
  sta  P_AD_Ctrl2
   
  lda  P_AD_Ctrl0
   
  and  #11111110B     ; 启动 A/D 转换
   
  sta  P_AD_Ctrl0
 
  L_TestAdcL2:
 
  lda  P_AD_Ctrl0
   
  and  #00000001B     ; 查询是否转换完毕 ?
        
  beq  L_TestAdcL2    ; 没有转换完毕继续等待
        
  lda  P_AD_DataHi    
        
  sta  G_MWorkReg1    ; G_MworkReg1 为定义的变量
        
  lda  P_AD_DataLo    
        
  sta  G_MWorkReg2    ; G_MworkReg2 为定义的变量
        
  lda  P_AD_Ctrl0     
        
  and  #11111110B     ; 重新开始启动 A/D 转换
   
  sta  P_AD_Ctrl0
   
  jmp  L_TestAdcL2

( 2 )中断方式:如果我们将寄存器 P_INT_Ctrl0 中 ADIE 位置 1 ,即打开 A/D 中断,则当 A/D 转换结束, P_AD_Ctrl0 的 bit0 和 P_AD_Flag0 的 bit7 都会被置 1 ,程序会自动产生中断,此时便可以将转换结果读取出来。中断方式不像查询方式需要不断的查询等待,提高 CPU 效率。具体流程如下:

 

图 7 . 3 中断式 A/D 转换流程

【 例 7 -3 】: 中断式 A/D 转换

 set  P_AD_Ctrl2,7    ; 打开 A/D 转换电源
   
  sta  P_AD_Ctrl2
   
  lda  #85h        ; 允许 ADC 转换功能 ADC clock= Fsys(8MHz)/8= 1MHz
   
  sta  P_AD_Ctrl0
   
  lda  #FFh        ; 定义 PA 口为模拟口
   
  sta  P_AD_Ctrl1
   
  lda  #88h        ; 选择通道 1 ( AN1 )
   
  sta  P_AD_Ctrl2
   
  lda  #FFh
   
  sta  P_INT_Flag0    ; 清中断请求标志位
   
  lda  #10000000B     ; 使能 A/D 中断
   
  sta  P_INT_Ctrl0
   
  cli  ; 使能中断
   
  lda  P_AD_Ctrl0
   
  and  #11111110B     ; 启动 A/D 转换
   
  sta  P_AD_Ctrl0
   
  L_Loop:
 
  jmp L_Loop
 
  V_IRQ:          ; 中断服务程序
 
  pha
 
  txa
 
  pha
 
  ?L_AD:
 
  lda  P_INT_Flag0
   
  and  #80h       ; 是否发生 A/D 中断?
   
  beq  ?L_IRQ_Exit    ; 没有产生 A/D 中断继续等待
   
  lda  P_AD_DataHi
   
  sta  G_MWorkReg1
   
  lda  P_AD_DataLo
   
  sta  G_MWorkReg2
   
  set  P_INT_Flag0,7    ; 清中断标志
   
  lda  P_AD_Ctrl0
   
  and  #11111110B     ; 重新开始启动 A/D 转换
   
  sta  P_AD_Ctrl0
 
  ?L_IRQ_Exit:
 
  pla
 
  tax
 
  pla
 
  rti
 
  V_NMI:
 
  rti

7.2  DAC 原理及应用

7.2.1 D/A 转换器工作原理

  SPMC65 系列单片机内置了一个 10 位的数模转换器 (DAC) ,输出的转换电流最大为 3.3mA ,转换完成时间约 80 微秒。当数据写入 DAC 数据寄存器 P_DA_DataHi 和 P_DA_DataLo 中时, DAC 模块自动将其转换为相应的的模拟电流,通过 I/O 端口 PE6 管脚输出( SPMC65 系列单片机视具体型号提供 DAC 功能,即只有引出 PE6 端口的芯片才提供)。向 P_DA_DataHi 寄存器写入 “11111111B” ,向 P_DA_DataLo 寄存器写入 “11000000B” (其中 P_DA_DataHi 寄存器存放数字量的高 8 位, P_DA_DataLo 寄存器存放数字量的低 2 位), PE6 输出最大转换电流 3.3mA 。

7.2.2 控制寄存器

  D/A 转换相关寄存器有如下 3 个:

D/A 转换设置寄存器

P_DA_Ctrl

D/A 转换数据存放寄存器

P_DA_DataHi P_DA_DataLo

1 . P_DA_Ctrl ( $55,R/W )

  作用:控制 D/A 转换使能以及启动 DAC 功能,该寄存器默认初值为 #00h 。

表 7 . 9 DAC 控制寄存器 P_DA_Ctrl ( $55,R/W )

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

DAEN

-

-

-

-

-

-

-

R/W

-

-

-

-

-

-

-

Bit 7  DAEN : D/A 转换使能位

     1 = 使能 DAC 功能并启动 DAC 转换

     0 = 禁止 DAC 功能并停止 DAC 转换

Bit [6:0] 保留

2 . P_DA_ DataHi ( $57,R/W )

  作用: 10bit D/A 转换数据的高 8 位存放寄存器,该寄存器默认初值为 #00h 。

表 7 . 10 D/A 转换值高字节寄存器 P_DA_DataHi ( $57,R/W )

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

DAData9

DAData8

DAData7

DAData6

DAData5

DAData4

DAData3

DAData2

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

  Bit [7:0]  DAData[9:2]: 10 位 D/A 转换数据的高 8 位数据。

3 . P_DA_ DataLo ( $56,R/W )

  作用: 10bit D/A 转换数据的低 2 位存放寄存器,该寄存器默认初值为 #00h 。

表 7 . 11 D/A 转换值高字节寄存器 P_DA_DataLo ( $56,R/W )

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

DAData1

DAData0

-

-

-

-

-

-

R/W

R/W

-

-

-

-

-

-

  Bit [7:6] DAData[1:0]: 10 位 D/A 转换数据的低 2 位数据, bit7 位和 bit6 位有效。

  Bit [5:0] 保留

7.2.3 D/A 转换器应用

  D/A 转换一般步骤如下:

  进行 D/A 转换时,需要将寄存器 P_DA_Ctrl 中的 DAEN 位置 1 ,便开始进行转换, PE6 端口会输出转换电流。 DAC 数据寄存器包括两个字节:寄存器 P_DA_DataHi 存储转换数据的高 8 位,寄存器 P_DA_DataLo 存储转换数据的低 2 位。 DAC 转换完成需要约 80 微秒,用户必须等待本次转换完成才能进行下一次转换,以保证 D/A 转换的正确性。

【例 7 -4 】: D/A 转换

 lda  #C0h    ; 将需要转换数据的低 2 位数值送入寄存器 P_DA_DataLo 中

 sta  P_DA_DataLo

 lda  #FFh     ; 将需要转换数据的高 8 位数值送入寄存器 P_DA_DataHi 中

 sta  P_DA_DataHi

 set  P_DA_Ctrl,7  ; 使能 DAC 功能并启动 DAC 转换

7.3  电压比较器原理及应用

7.3.1 电压比较器工作原理

  SPMC65 系列单片机内置两个电压比较器(也简称比较器)( SPMC65 系列单片机视具体型号提供电压比较器功能,即只有引出 PE[2:5] 端口的芯片才提供),这两个电压比较器相互独立,其电压输入端 CMPIN1/CMPIN0 与普通 I/O 端口复用( PE5/PE3 ),参考电压可选外部参考电压(来自 PE4/PE2 管脚上的电压)或选择内部参考电压 (1.2V) ,具体请参见 表 7.12 。

表 7 . 12 电压比较器表

电压比较器

电压比较器 1 ( Comparator1 )

电压比较器 0 ( Comparator0 )

比较电压输入端口

与 PE5 复用

与 PE3 复用

参考电压源选择

可选外部参考电压(来自 PE4 端口)

或内部参考电压( 1.2V )

可选外部参考电压(来自 PE2 端口)

或内部参考电压( 1.2V )

  其中输入的比较电压范围为 0.2V~ (VDD-0.2) V 。 图 7 . 4 为电压比较器结构图。

图 7.4 电压比较器结构图

7.3.2 控制寄存器

  电压比较器相关寄存器有如下 2 个:

电压比较器设置寄存器

P_CMP_Ctrl

中断标志寄存器 2

P_INT_Flag2

1 .电压比较器控制寄存器 P_CMP_Ctrl ( $2E , R/W )

  电压比较器控制寄存器 P_CMP_Ctrl ( $2E ) ,用来对电压比较器进行设置。比较器 1 和比较器 0 的电压比较模块相互独立,具有各自的控制位: Bit7~Bit4 分配给比较器 1 使用, Bit3~Bit0 分配给比较器 0 使用; P_CMP_Ctrl 默认初值为 #00h 。具体内容如下:

表 7 . 13 比较器控制寄存器 P_CMP_Ctrl ( $2E , R/W )

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

CMP1EN

CMP1RS

CMP1LOG

CMP1OUT

CMP0EN

CMP0RS

CMP0LOG

CMP0OUT

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

 Bit 7 CMP1EN: 比较器 1 使能位
 
       1 = 使能比较器 1
      
       0 = 禁止比较器 1
 
  Bit 6 CMP1RS: 比较器 1 参考电压源选择位
 
       1 = 选择外部参考电压 (PE4)
 
       0 = 选择内部参考电压 (1.2v)
 
  Bit 5 CMP1LOG: 比较器 1 的事件逻辑选择位
 
       1 = 比较器 1 输入比较电压 > 比较器 1 参考电压, P_INT_Ctrl2 中 CMP1IE 位置 1
 
       0 = 比较器 1 输入比较电压 < 比较器 1 参考电压, P_INT_Ctrl2 中 CMP1IE 位置 1
 
  Bit 4 CMP1OUT: 比较器 1 结果指示位
 
       1 = 比较器 1 输入比较电压 > 比较器 1 参考电压
 
       0 = 比较器 1 输入比较电压 < 比较器 1 参考电压
 
  Bit 3 CMP0EN: 比较器 0 使能位 .
 
       1 = 使能比较器 0
 
       0 = 禁止比较器 0
 
  Bit 2 CMP0RS: 比较器 0 参考电压源选择位 .
 
       1 = 外部参考电压 (PE2)
 
       0 = 内部参考电压 (1.2v)
 
  Bit 1 CMP0LOG: 比较器 0 的事件逻辑选择位
 
       1 = 比较器 0 输入比较电压 > 比较器 0 参考电压, P_INT_Ctrl2 中 CMP0IE 位置 1
 
       0 = 比较器 0 输入比较电压 < 比较器 0 参考电压, P_INT_Ctrl2 中 CMP0IE 位置 1
 
  Bit 0 CMP0OUT: 比较器 1 结果指示位
 
       1 = 比较器 0 输入比较电压 > 比较器 0 参考电压
 
       0 = 比较器 0 输入比较电压 < 比较器 0 参考电压

2 .中断标志寄存器 2 P_INT_Flag2 ( $26 , R/W )

表 7 . 14 中断标志寄存器 P_INT_Flag2 ( $27 , R/W )

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

-

-

ITVALIF

IICIF

UARTIF

SPIIF

CMP1IF

CMP0IF

-

-

R/W

R

R

R

R/W

R/W

 Bit 1 CMP1IF: 比较器 1 中断标志
 
      读操作:
       
        0 = 中断没有发生
       
        1 = 中断发生
     
      写操作:
       
        0 = 无效
       
        1 = 清比较器 1 中断标志
 
  Bit 0 CMP0IF: 比较器 0 中断标志
 
      读操作:
     
        0 = 中断没有发生
       
        1 = 中断发生
     
      写操作:
     
        0 = 无效
       
        1 = 清比较器 1 中断标志

7.3.3  比较器应用

  电压比较器设置的一般步骤:

图 7 . 5 比较器设置一般流程

  电压比较器的比较结果的读取可以采用查询式:

  事件逻辑选择位设置后,当相应的逻辑事件成立时,寄存器 P_INT_Flag2 的 bit1/bit0 位会被置 1 ,所以查询该位状态即可。比如当将 COM0EN 位和 CMP0LOG 位置 1 ,当比较器 0 的输入电压 > 比较器 0 的参考电压时,寄存器 P_INT_Flag2 的 bit0 便会被置 1 。

【例 7-5 】 查询方式检测 PE3 输入电压大于 PE2 的电压

lda  #00001110B ; 选择比较器为外部参考电压输入( PE4 )
 
            ; 设置比较器 0 当输入电压大于参考电压时, CMP0IE 位置 1
           
            ; 启动比较器 0
 
sta  P_CMP_Ctrl
 
lda  #ffh       ; 清中断标志寄存器 P_INT_ Flag2
 
sta  P_INT_ Flag2

LOOP:

lda  P_INT_ Flag2  ; 查询 P_INT_ Flag2 中 CMP0IE 位是否为 1
 
and  #01h
 
equ  LOOP
 
lda  P_CMP_Ctrl   ; 可以读 P_CMP_Ctrl 中 CMP0OUT 位确认
 
sta  G_MWorkReg1  ; G_MworkReg1 为定义的变量

版权所有:北京凌阳爱普科技有限公司 京ICP备05061966号 未经许可网站内容严禁复制、转载,任何人不得擅自使用
友情链接:凌阳爱普 嵌入式培训 安卓培训 凌阳大学计划 北京嵌入式培训 深圳嵌入式培训 成都嵌入式培训