STM8片上集成了10位逐次比较型模数转换器,在开发板上有个电位器接到了AIN3,但没有可以显示数据的LED数码管或LCD液晶显示屏,怎么办呢?可以把AD采集数据通过UART发送到电脑上显示。
#i nclude
void CLK_init(void)
{
CLK_CKDIVR = 0x08; // 16M内部RC经2分频后系统时钟为8M
}
void GPIO_init(void)
{
PD_DDR = 0x08; // 配置PD端口的方向寄存器PD3输出
PD_CR1 = 0x08; // 设置PD3为推挽输出
PD_CR2 = 0x80; // 使能PD7外部中断
}
void EXTI_init(void)
{
EXTI_CR1 = 0x80; // PD口下降沿触发中断
}
#pragma vector=0x02
__interrupt void EXTI_PD7_TLI(void)
{
unsigned int value;
ADC_CSR &= ~0x80; // 清除EOC转换结束标志
ADC_CR1 |= 0x01; // 开始单次转换
while(!(ADC_CSR&0x80)); // 等待单次转换完成
value = ((int)ADC_DRH<<2); // 先读高8位,默认设置数据左对齐
value |= ADC_DRL; // 再读低8位
while(!UART3_SR_TXE);
UART3_DR = value; // 通过UART3发送AD采样结果
while(!UART3_SR_TXE);
UART3_DR = value>>8;
}
void ADC_init(void)
{
ADC_CSR = 0x03; // ADC输入引脚AIN3
ADC_CR1 = 0x01; // ADC开启
}
void UART3_init(void)
{
UART3_BRR2 = 0x01;
UART3_BRR1 = 0x34; // 8M/9600 = 0x341
UART3_CR2 = 0x0C; // 允许接收,允许发送
}
void init_devices(void)
{
asm("sim"); //禁止中断
CLK_init();
GPIO_init();
EXTI_init();
ADC_init();
UART3_init();
asm("rim"); //使能中断
}
void main( void )
{
init_devices();
// 主循环里没有程序需要执行
while(1);
}
在本例中仅使用了ADC的单次转换模式,每按一次按键进行一次AD转换,并把转换结果通过UART发送,这样可以在电脑上通过超级终端或串口调试软件查看数据。
通过这次测试,还发现一个现象,如果把清除EOC转换结束标志放在读取数据之后,那么在下次启动单次转换后,EOC标志位会自动置位,此时必须人为的等待7us后才能读到正确的数据,否则只能读到上一次的转换数据,可能这是STM8的ADC与其他MCU不同之处。
关键字:STM8 单片机 ADC IAR
引用地址:
STM8单片机ADC应用(IAR)
推荐阅读最新更新时间:2024-03-16 14:43
学习笔记之 STM32单片机
1、 AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2 1,意思是APB2接高速设备 2、 Stm32f10x.h相当于reg52.h(里面有基本的位操作定义),另一个为stm32f10x_conf.h专门控制外围器件的配置,也就是开关头文件的作用 3、 HSE Osc(High Speed External Oscillator)高速外部晶振,一般为8MHz,HSI RC(High Speed InternalRC)高速内部RC,8MHz 4、 LSE Osc(Low Speed External Oscillator)低速外部晶振,一般为32.768KHz,LSI RC(Low Speed Intern
[单片机]
22.1184晶振的单片机
首先说说晶振与51单片机的机器周期得关系:晶振的倒数是一个时钟周期单位为秒,一个机器周期等于12乘时钟周期。 再说说指令周期与时钟周期得关系:对于8031等早期的51来说,指令周期和机器周期是一样的等于12乘时钟周期,但后来出现了很多改进型的51系列单片机如80320等,指令周期等于4个时钟周期,也就是说同样的晶振速度是原来的3倍。但无论如何变,T0、T1等定时器的计时任然按机器周期来计算的,也就是说12乘时钟周期。 定时器是按溢出产生中断的,所以要用溢出值65536减你所希望的值得到定时器的初值。 那么怎么计算赋值所决定的时间呢: 首先计算出机器周期:12*(1/22.1184/1000000)秒(应该是22.1184兆吧), 因
[单片机]
单片机硬件抗干扰经验
步进电机是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。步进电机可分为反应式步进电机(简称VR)、永磁式步进电机(简称PM)和混合式步进电机(简称HB)。 步进电机区别于其他控制电机的最大特点是,它是通过输入脉冲信号来进行控制的,即电机的总转动角度由输入脉冲数决定,而电机的转速由脉冲信号频率决定。 步进电机的驱动电路根据控制信号工作,控制信号由单片机产生。其基本原理作用如下: (1)控制换相顺序 通电换相这一过程称为脉冲分配。例如:三相步进电机的三拍工作方式,其各相通电顺序为A-B-C-D,通电控制脉冲必须严格按照这一顺序分别控制A,B,C,D相的通断。 (2)
[单片机]
51单片机数据传送类指令
单片机的累加器A与片外RAM之间的数据传递类指令 MOVX A,@Ri MOVX @Ri,A MOVX A,@DPTR MOVX @DPTR,A 说明: 1)在51系列单片机中,与外部存储器RAM打交道的只能是A累加器。所有需要传送入外部RAM的数据必需要通过A送去,而所有要读入的外部RAM中的数据也必需通过A读入。在此我们能看出内外部RAM的区别了,内部RAM间能直接进行数据的传递,而外部则不行,比如,要将外部RAM中某一单元(设为0100H单元的数据)送入另一个单元(设为0200H单元),也必须先将0100H单元中的内容读入A,然后再传送到0200H单元中去。 要读或写外部的RAM,当然也必须要知道RAM的地址,
[单片机]
STM8单片机中断的主要功能解析
内部中断:一般是由硬件错误或者运算过程中出错引起的,一般是不可避免的; 外部中断:是处理器的外设发出的中断请求,如定时器中断,UART接收中断,外部中断一般都可以通过中断控制器进行屏蔽; 1.ITC功能概述: ……所有IO引脚都具有外部中断能力,每个端口都有独立的中断向量以及独立的标志;外设中断能力; ……软件中断能力(TRAP) ……具有灵活的优先级和中断等级管理,支持可嵌套和同级中断管理: ——多达4个软件可编程的嵌套等级;——最多有32个中断向量,其入口地址由硬件固定;——2个不可避免的中断:RESET,TRAP;——1个不可避免的最高优先级硬件中断TL1; 2.中断的主要功能 1. 实现高速CPU和低速外设之间速度
[单片机]
[51单片机学习笔记FOUR]---16*16LED点阵
一、LED点阵发光原理 8*8单色单片机结构图如下: 从电路图中很简单的就可以看出来,想要点亮点阵中的某一个LED灯。只要使得那个灯所在的行输出高电平,所在列输出低电平就好。 二、点阵扫描实验 1 /*********************************************** 2 实验名称: 点阵扫描 3 实验说明: 扫描每个LED灯,检查点阵是否完好 4 实验时间: 2014/12/24 5 ***********************************************/ 6 #include reg51.h 7 #include intrins.h
[单片机]
学习MCS-51单片机需要哪些软件工具
要想学51单片机,先要进行器件选型! 小白:什么?51单片机不是就一种么,还需要选型? MCU起航:呵呵,自从intel在上世纪八十年代将51单片机的内核转让给各个厂家以后,每个厂家都生产了带有自己特色的51单片机。每种厂家的单片机下载软件都是不太一样的。 小白:那么,我们应该如何选择呢? MCU起航:像winbond厂家生产的89C52单片机,下载的时候需要昂贵的下载器,同时配套他们厂家的软件。美国ATMEL公司和STC公司的芯片下载起来非常简单,对于入门的同学来说,是不错的选择。 小白:少废话,具体有哪些? MCU起航:ATMEL厂家的AT89S52,还有STC公司的STC89C52RC系列
[单片机]
IAR推出新版IAR Embedded Workbench for Arm功能安全版,该版本配备经过认证的静态代码分析功能
IAR推出新版IAR Embedded Workbench for Arm功能安全版,该版本配备经过认证的静态代码分析功能 瑞典乌普萨拉,2024年2月20日 – 全球领先的嵌入式系统开发软件解决方案供应商IAR宣布 :推出其旗舰产品IAR Embedded Workbench for Arm功能安全版的最新版本9.50.3。此次发布进一步加强了IAR支持开发人员创建安全、可靠和符合标准的嵌入式应用程序的承诺,涵盖了汽车、医疗设备、工业自动化和消费电子等多个行业。该版本中最重要的新功能是经过认证的C-STAT,这是专为安全关键应用程序设计的静态代码分析工具。 IAR Embedded Workbench for Ar
[嵌入式]