【STC8学习笔记】STC8A8K64S4A12 ADC模数转换,使用串口打印出来
STC8系列单片机内部集成了一个12位的15通道A/D转换器,使用STC8内部ADC时,要使AVref连接参考电压,ADC_AVcc和ADC_AGnd接好电源和地线!
内部ADC引脚可参考芯片手册ADC_CHS寄存器配置可得知
参考例程
#include <STC8.h>
#include <intrins.h>
#include <stdio.h>#define uchar unsigned char
#define uint unsigned int/*常量宏定义*/
#define FOSC 11059200 //MCU晶振
#define BAUD_RATE 115200 //波特率设置
#define BRT (65536 - FOSC / BAUD_RATE / 4)//计算公式//========================================================================
// 端口模式设置
//========================================================================
//准双向口
#define P0_MODE_IO_PU(Pin) P0M1 &= ~(Pin), P0M0 &= ~(Pin);
#define P1_MODE_IO_PU(Pin) P1M1 &= ~(Pin), P1M0 &= ~(Pin);
#define P2_MODE_IO_PU(Pin) P2M1 &= ~(Pin), P2M0 &= ~(Pin);
#define P3_MODE_IO_PU(Pin) P3M1 &= ~(Pin), P3M0 &= ~(Pin);
#define P4_MODE_IO_PU(Pin) P4M1 &= ~(Pin), P4M0 &= ~(Pin);
#define P5_MODE_IO_PU(Pin) P5M1 &= ~(Pin), P5M0 &= ~(Pin);
#define P6_MODE_IO_PU(Pin) P6M1 &= ~(Pin), P6M0 &= ~(Pin);
#define P7_MODE_IO_PU(Pin) P7M1 &= ~(Pin), P7M0 &= ~(Pin);
//高阻输入
#define P0_MODE_IN_HIZ(Pin) P0M1 |= (Pin), P0M0 &= ~(Pin);
#define P1_MODE_IN_HIZ(Pin) P1M1 |= (Pin), P1M0 &= ~(Pin);
#define P2_MODE_IN_HIZ(Pin) P2M1 |= (Pin), P2M0 &= ~(Pin);
#define P3_MODE_IN_HIZ(Pin) P3M1 |= (Pin), P3M0 &= ~(Pin);
#define P4_MODE_IN_HIZ(Pin) P4M1 |= (Pin), P4M0 &= ~(Pin);
#define P5_MODE_IN_HIZ(Pin) P5M1 |= (Pin), P5M0 &= ~(Pin);
#define P6_MODE_IN_HIZ(Pin) P6M1 |= (Pin), P6M0 &= ~(Pin);
#define P7_MODE_IN_HIZ(Pin) P7M1 |= (Pin), P7M0 &= ~(Pin);
//漏极开路
#define P0_MODE_OUT_OD(Pin) P0M1 |= (Pin), P0M0 |= (Pin);
#define P1_MODE_OUT_OD(Pin) P1M1 |= (Pin), P1M0 |= (Pin);
#define P2_MODE_OUT_OD(Pin) P2M1 |= (Pin), P2M0 |= (Pin);
#define P3_MODE_OUT_OD(Pin) P3M1 |= (Pin), P3M0 |= (Pin);
#define P4_MODE_OUT_OD(Pin) P4M1 |= (Pin), P4M0 |= (Pin);
#define P5_MODE_OUT_OD(Pin) P5M1 |= (Pin), P5M0 |= (Pin);
#define P6_MODE_OUT_OD(Pin) P6M1 |= (Pin), P6M0 |= (Pin);
#define P7_MODE_OUT_OD(Pin) P7M1 |= (Pin), P7M0 |= (Pin);
//推挽输出
#define P0_MODE_OUT_PP(Pin) P0M1 &= ~(Pin), P0M0 |= (Pin);
#define P1_MODE_OUT_PP(Pin) P1M1 &= ~(Pin), P1M0 |= (Pin);
#define P2_MODE_OUT_PP(Pin) P2M1 &= ~(Pin), P2M0 |= (Pin);
#define P3_MODE_OUT_PP(Pin) P3M1 &= ~(Pin), P3M0 |= (Pin);
#define P4_MODE_OUT_PP(Pin) P4M1 &= ~(Pin), P4M0 |= (Pin);
#define P5_MODE_OUT_PP(Pin) P5M1 &= ~(Pin), P5M0 |= (Pin);
#define P6_MODE_OUT_PP(Pin) P6M1 &= ~(Pin), P6M0 |= (Pin);
#define P7_MODE_OUT_PP(Pin) P7M1 &= ~(Pin), P7M0 |= (Pin);//========================================================================
// 定义声明
//========================================================================#define GPIO_PullUp 0 //上拉准双向口
#define GPIO_HighZ 1 //浮空输入
#define GPIO_OUT_OD 2 //开漏输出
#define GPIO_OUT_PP 3 //推挽输出#define GPIO_Pin_0 0x01 //IO引脚 Px.0
#define GPIO_Pin_1 0x02 //IO引脚 Px.1
#define GPIO_Pin_2 0x04 //IO引脚 Px.2
#define GPIO_Pin_3 0x08 //IO引脚 Px.3
#define GPIO_Pin_4 0x10 //IO引脚 Px.4
#define GPIO_Pin_5 0x20 //IO引脚 Px.5
#define GPIO_Pin_6 0x40 //IO引脚 Px.6
#define GPIO_Pin_7 0x80 //IO引脚 Px.7
#define GPIO_Pin_LOW 0x0F //IO低4位引脚
#define GPIO_Pin_HIGH 0xF0 //IO高4位引脚
#define GPIO_Pin_All 0xFF //IO所有引脚#define GPIO_P0 0 //
#define GPIO_P1 1
#define GPIO_P2 2
#define GPIO_P3 3
#define GPIO_P4 4
#define GPIO_P5 5
#define GPIO_P6 6
#define GPIO_P7 7void Delay1ms(void) //@11.0592MHz
{unsigned char i, j;i = 15;j = 90;do{while (--j);} while (--i);
}void Delay_ms(unsigned int time)
{unsigned int i;for(i=0; i<time; i++){Delay1ms();}
}//串口初始化
//定时器1做串口波特率
void uart1_Init(void)
{//串口工作模式2,允许串口接收SCON = 0x50;T2L = BRT;T2H = BRT>>8;AUXR = 0x15;//启动定时器ES = 1;//使能串口中断EA = 1;//使能总中断
}//重写putchar函数
char putchar(char ch)
{SBUF = ch;while(!TI);TI = 0;return ch;
}//ADC初始化
void ADC_Init(void)
{ADCCFG = 0x0f; //设置ADC时钟为 计算公式为:系统时钟/2/16/SPEED[3:0] 具体查看芯片手册 P286ADC_CONTR = 0x80; //使能ADC模块
}//读取ADC结果
uint ADC_Result(void)
{unsigned int adc_num;ADC_CONTR |= 0x40; //启动AD转换_nop_();_nop_();while (!(ADC_CONTR & 0x20)); //查询ADC完成标志ADC_CONTR &= ~0x20; //清完成标志adc_num = ADC_RES; return adc_num; //返回ADC结果
}void main()
{unsigned int temp_adc;uart1_Init(); //串口1初始化P1_MODE_IN_HIZ(GPIO_Pin_0); //设置P1.0为高阻输入,设置为ADC口ADC_Init(); //ADC初始化while(1){temp_adc = 0;temp_adc = ADC_Result();printf("P1.0端口ADC结果为:%d\n", temp_adc);Delay_ms(500);}
}
【STC8学习笔记】STC8A8K64S4A12 ADC模数转换,使用串口打印出来相关推荐
- STM32学习笔记(七) ADC模数转换测电平(普通和DMA模式)
嵌入式系统在微控制领域(温度,湿度,压力检测,四轴飞行器)中占据着重要地位,这些功能的实现是由微处理器cpu(如stm32)和传感器以及控制器共同完成的,而连接他们,使它们能够互相正常交流的正是本小节 ...
- STM32F407霸天虎HAL库学习笔记——使用ADC采集MQ135的数据并通过OLED显示
STM32F407霸天虎HAL库学习笔记--使用ADC采集MQ135的数据并通过OLED显示 一.软件准备 二.硬件准备 三.CubeMX配置 四.Keil MQ135.c MQ135.h main函 ...
- (实验4)单片机,STM32F4学习笔记,代码讲解【串口实验】【正点原子】【原创】
文章目录 其它文章链接,独家吐血整理 实验现象 主程序 串口中断程序 代码讲解 其它文章链接,独家吐血整理 (实验3)单片机,STM32F4学习笔记,代码讲解[按键输入实验][正点原子][原创] (实 ...
- (实验50)单片机,STM32F4学习笔记,代码讲解【串口IAP实验】【正点原子】【原创】
文章目录 ❤2023重新理解记录 其它文章链接,独家吐血整理 实验现象 主程序 IAP初始化程序 代码讲解 文章目录 ❤2023重新理解记录 其它文章链接,独家吐血整理 实验现象 主程序 IAP初始化 ...
- 小熊派gd32f303学习之旅(3)—串口打印第一个Hello world程序
小熊派gd32f303学习之旅(3)-串口打印第一个Hello world程序 一.硬件连接 通过查看原理图我们可以看到,当[UART通信选择开关]拨向[AT-MCU]时,USB虚拟串口连接到MCU的 ...
- STM8学习笔记----普通IO口模拟串口功能
串口在产品应用中很常见,但是单片机的默认带的串口往往比较少,有时候就会出现串口不够用,所以就想着能不能用普通IO口模拟串口来实现串口的功能. 要模拟串口首先要清楚串口数据传输过程中的原理. 常用的串口 ...
- IMX6ULL学习笔记(20)——UART串口使用
一.UART简介 i.MX6U 芯片具有多达 8 个 UART 外设用于串口通讯,UART 是在 USART 基础上裁剪掉了同步通信功能,只支持异步通信.简单区分同步和异步就是看通信时需不需要对外提供 ...
- K210学习笔记(一) K210与STM32串口通信相关
文章目录 前言 一.STM32 串口中断 接收K210板子发送的ASCII码整数 转换为 多位整形数据 二.MAIX BIT(K210)与STM32串口通讯 2.1 实现MAIX BIT与XCOM之间 ...
- 迪文屏幕T5L平台学习笔记五:C51使用UART2打印log
上篇博客介绍了利用sprintf,实现数据转化,在文本框上显示字符串,这篇博客利用printf,实现串口打印log. 一.首先看UART2配置寄存器 这里我们选择模式1,选择SRELOH:L产生波特率 ...
最新文章
- 独家 | 手把手教你运用深度学习构建视频人脸识别模型(Python实现)
- NodeJS + PhantomJS 前端自动化资源监控
- SQL Server通过web方式进行远程维护,管理
- 汉诺塔的改编题(用栈求解,分别递归和非递归)
- kotlin 协程异常处理机制颠覆三观
- 免费下载|《云原生时代下的App开发》走进阿里云一站式应用研发平台EMAS
- gbk编码在线转换工具_TOOLFK工具-在线汉字/字母/人民币/简繁体转换工具
- urlib2和requests模拟登陆查询MD5
- mysql主从复制中间件_linux下mysql主从复制(第二篇读写分离) mycat 中间件
- oracle中NUMBER(10,2)含义
- Win10设置mac
- js批量向html容器内的元素赋值
- HDU 4746 Mophues(莫比乌斯反演)题解
- ASP使用ASPupload组件上传多个文件
- 贝格尔编排法的PHP实现
- 虽说中国是礼仪之邦,但是这个礼看来还是没有几个人学透
- 怎么确保数据在网络传输的安全性?
- 爬虫项目(一)爬虫+jsoup轻松爬知乎
- Scrapy抓取接口中文数据显示问号问题
- 软考复习笔记|项目管理过程与可行性分析及可行性分析报告编写