找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 719|回复: 1
收起左侧

这个单片机例程是如何定义P10是ADC采集口?

[复制链接]
ID:706724 发表于 2023-10-16 15:49 | 显示全部楼层 |阅读模式
大家好,看到这个例程不太明白,这个例程是如何定义P10是ADC采集口?仅靠IO口的设定?这个例程官网上的。
单片机源程序如下:
  1. #include "reg51.h"
  2. #include "intrins.h"

  3. sfr     ADC_CONTR   =   0xbc;
  4. sfr     ADC_RES     =   0xbd;
  5. sfr     ADC_RESL    =   0xbe;
  6. sfr     ADCCFG      =   0xde;

  7. sfr     P_SW2   =   0xba;
  8. #define ADCTIM  (*(unsigned char volatile xdata *)0xfea8)

  9. sbit    EADC    =   IE^5;

  10. sfr     P0M1    =   0x93;
  11. sfr     P0M0    =   0x94;
  12. sfr     P1M1    =   0x91;
  13. sfr     P1M0    =   0x92;
  14. sfr     P2M1    =   0x95;
  15. sfr     P2M0    =   0x96;
  16. sfr     P3M1    =   0xb1;
  17. sfr     P3M0    =   0xb2;
  18. sfr     P4M1    =   0xb3;
  19. sfr     P4M0    =   0xb4;
  20. sfr     P5M1    =   0xc9;
  21. sfr     P5M0    =   0xca;

  22. void ADC_Isr() interrupt 5
  23. {
  24.     ADC_CONTR &= ~0x20;                         //清中断标志
  25.     P2 = ADC_RES;                               //读取ADC结果
  26.     ADC_CONTR |= 0x40;                          //继续AD转换
  27. }

  28. void main()
  29. {
  30.     P0M0 = 0x00;
  31.     P0M1 = 0x00;
  32.     P1M0 = 0x00;
  33.     P1M1 = 0x00;
  34.     P2M0 = 0x00;
  35.     P2M1 = 0x00;
  36.     P3M0 = 0x00;
  37.     P3M1 = 0x00;
  38.     P4M0 = 0x00;
  39.     P4M1 = 0x00;
  40.     P5M0 = 0x00;
  41.     P5M1 = 0x00;

  42.     P1M0 = 0x00;                                //设置P1.0为ADC口
  43.     P1M1 = 0x01;
  44.     P_SW2 |= 0x80;
  45.     ADCTIM = 0x3f;                              //设置ADC内部时序
  46.     P_SW2 &= 0x7f;
  47.     ADCCFG = 0x0f;                              //设置ADC时钟为系统时钟/2/16
  48.     ADC_CONTR = 0x80;                           //使能ADC模块
  49.     EADC = 1;                                   //使能ADC中断
  50.     EA = 1;
  51.     ADC_CONTR |= 0x40;                          //启动AD转换

  52.     while (1);
  53. }

复制代码


回复

使用道具 举报

ID:155507 发表于 2023-10-16 22:09 | 显示全部楼层
为什么不读元件手册?

ADC_CHS[3:0]: ADC 模拟通道选择位
(注意:被选择为 ADC 输入通道的 I/O 口,必须设置 PxM0/PxM1 寄存器将 I/O 口模式设置为高
阻输入模式。另外如果 MCU 进入掉电模式/时钟停振模式后,仍需要使能 ADC 通道,则需要设置
PxIE 寄存器关闭数字输入通道, 以防止外部模拟输入信号忽高忽低而产生额外的功耗)

ADC001.png



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表