【蓝桥杯——单片机学习笔记】十五.内部ADC采样包含ADC中断(STC15F2K60S2)
2020-03-05 12:46
441 查看
STC15单片机的A/D转换口在P1.0~P1.7,有8路10位A/D转换器。
一.所用寄存器
1.P1ASF P1口模拟功能控制寄存器(不可位寻址)
SFR name | Address | bit | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
---|---|---|---|---|---|---|---|---|---|---|
P1ASF | 9DH | name | P17ASF | P16ASF | P15ASF | P14ASF | P13ASF | P12ASF | P11ASF | P10ASF |
位号 | P1.x功能 |
---|---|
P17ASF=1 | P1.7口作为模拟A/D使用 |
P16ASF=1 | P1.6口作为模拟A/D使用 |
P15ASF=1 | P1.5口作为模拟A/D使用 |
P14ASF=1 | P1.4口作为模拟A/D使用 |
P13ASF=1 | P1.3口作为模拟A/D使用 |
P12ASF=1 | P1.2口作为模拟A/D使用 |
P11ASF=1 | P1.1口作为模拟A/D使用 |
P10ASF=1 | P1.0口作为模拟A/D使用 |
2.ADC_CONTR ADC控制寄存器
SFR name | Address | bit | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
---|---|---|---|---|---|---|---|---|---|---|
ADC_CONTR | BCH | name | ADC_POWER | SPEED1 | SPEED0 | ADC_FLAG | ADC_START | CHS2 | CHS1 | CHS0 |
ADC_POWER: ADC电源控制位。0—关闭,1—打开;
SPEED1、SPEED0:
SPEED1 | SPEED0 | A/D转换所需时间 |
---|---|---|
0 | 0 | 90个时钟周期转换一次 |
0 | 1 | 180个时钟周期转换一次 |
1 | 0 | 360个时钟周期转换一次 |
1 | 1 | 540个时钟周期转换一次 |
ADC_FLAG: 数模转换器转换结束标记位。A/D转换完成后,硬件自动置1,需要软件清0;
ADC_START: 数模转换器转换启动控制位。置1后开始转换,转换结束后自动清0;
CHS2、CHS1、CHS0:
CHS2 | CHS1 | CHS0 | 模拟输入通道选择 |
---|---|---|---|
0 | 0 | 0 | 选择P1.0作为A/D输入 |
0 | 0 | 1 | 选择P1.1作为A/D输入 |
0 | 1 | 0 | 选择P1.2作为A/D输入 |
0 | 1 | 1 | 选择P1.3作为A/D输入 |
1 | 0 | 0 | 选择P1.4作为A/D输入 |
1 | 0 | 1 | 选择P1.5作为A/D输入 |
1 | 1 | 0 | 选择P1.6作为A/D输入 |
1 | 1 | 1 | 选择P1.7作为A/D输入 |
3.ADRJ ADC转换结果调整寄存器位
SFR name | Address | bit | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
---|---|---|---|---|---|---|---|---|---|---|
CLK_DIV | 97H | name | ADRJ |
ADRJ: 0—ADC_RES[7:0]存放高8位,ADC_RESL[1:0]存放低2位;1—ADC_RES[1:0]存放高2位,ADC_RESL[7:0]存放低8位;
4.ADC_RES、ADC_RESL A/D转换结果寄存器
5.IE中断允许寄存器
SFR name | Address | bit | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
---|---|---|---|---|---|---|---|---|---|---|
IE | A8H | name | EA | EADC |
EA: 总中断;
EADC: A/D中断允许位。0—不允许,1—允许;
6.IP中断优先级控制寄存器
SFR name | Address | bit | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
---|---|---|---|---|---|---|---|---|---|---|
IP | B8H | name | PADC |
PADC: A/D转换中断优先级控制位。
二.代码
/*********************************************** stc15单片机内部adc转换,P1.0口用于采样 ***********************************************/ #include "stc15.h" #include "intrins.h" #define ADC_POWER 0x80 //ADC电源控制位 #define ADC_FLAG 0x10 //ADC完成标志 #define ADC_START 0x08 //ADC起始控制位 #define ADC_SPEEDLL 0x00 //540个时钟 #define ADC_SPEEDL 0x20 //360个时钟 #define ADC_SPEEDH 0x40 //180个时钟 #define ADC_SPEEDHH 0x60 //90个时钟 unsigned char code smg_duan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; unsigned char code smg_wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; unsigned char display[5]; unsigned int res; //adc读取值 void ADC_Init() { CLK_DIV=0x20; //设置RES的低二位为数据高二位,RESL为数据低八位 P1ASF=0x01; //P1.0为A/D模式 ADC_RES=0; //A/D转换结果存储寄存器初始化 ADC_RESL=0; } //定时器0初始化1ms void Timer0Init(void) //1ms@11.0592MHz { AUXR |= 0x80; TMOD &= 0xF0; TL0 = 0xCD; TH0 = 0xD4; TF0 = 0; TR0 = 1; } //数码管显示函数 void smg_display() { static unsigned char i=0; P2=(P2&0x1f)|0xe0; P0=0xff; P2&=0x1f; P2=(P2&0x1f)|0xe0; P0=display[i]; P2&=0x1f; P2=(P2&0x1f)|0xc0; P0=smg_wei[i]; P2&=0x1f; i++; if(i==5) i=0; } void main(void) { ADC_Init(); Timer0Init(); EA=1; ET0=1; EADC=1; //使能ADC中断 PT0=0; //定时器0优先级为1 PADC=1; //ADC中断优先级为0 P1M1=0x01; //共同配置P1.0口为开漏模式 P1M0=0x01; while(1) { display[0]=~smg_duan[light/10000]; display[1]=~smg_duan[light/1000%10]; display[2]=~smg_duan[light/100%10]; display[3]=~smg_duan[light/10%10]; display[4]=~smg_duan[light%10]; } } //ADC中断,获取A/D转换结果 void Adc_Int() interrupt 5 using 1 { ADC_CONTR&=!ADC_FLAG; //清楚A/D中断标志位 res=ADC_RES<<8; res|=ADC_RESL; } //定时器0中断 void Time0_Int() interrupt 1 using 1 { static unsigned char count=0; count++; smg_display(); if(count==200) { count=0; ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START; //ADC电源打开,设置速度,打开ADC,通道默认为0 _nop_();_nop_();_nop_();_nop_(); } }
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 【蓝桥杯——单片机学习笔记】十六.蜂鸣器播放音乐(STC15F2K60S2)
- (学习笔记)单片机外部中断的两种模式
- python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
- 单片机学习笔记(四)——中断
- 【学习笔记】AVR单片机之ADC和DAC的应用
- 嵌入式学习笔记(20)——AVR单片机之中断
- STM32F4CubeMX学习笔记之ADC不带中断
- STM32学习笔记:adc采样得到的电压值用485发送给pc
- PBRT学习笔记:在单位圆内部均匀采样
- cortex_m3_stm32嵌入式学习笔记(十七):内部温度传感器(ADC采集)
- cortex_m3_stm32嵌入式学习笔记(十五):待机唤醒实验(WK_UP外部中断)
- 单片机学习笔记 —— 定时器与中断
- 蓝桥杯大赛单片机组学习笔记,基于stc15f2k61s2转接板
- 嵌入式学习笔记(11)——51单片机之中断(串口通信)
- 嵌入式学习笔记(10)——51单片机之中断(定时器中断)
- STC单片机学习----ADC
- STM32学习笔记:adc采样得到的电压值用485发送给pc
- 汇编语言学习笔记(随笔记) 内部中断
- 【学习笔记】STC 12C系列1T单片机主频配置
- 单片机学习笔记--外部中断,定时器,串口中断