宏晶科技STC15F系列单片机.DOC

上传人:天*** 文档编号:712309 上传时间:2018-10-29 格式:DOC 页数:11 大小:145.50KB
下载 相关 举报
宏晶科技STC15F系列单片机.DOC_第1页
第1页 / 共11页
宏晶科技STC15F系列单片机.DOC_第2页
第2页 / 共11页
宏晶科技STC15F系列单片机.DOC_第3页
第3页 / 共11页
宏晶科技STC15F系列单片机.DOC_第4页
第4页 / 共11页
宏晶科技STC15F系列单片机.DOC_第5页
第5页 / 共11页
点击查看更多>>
资源描述

1、技术支持:(86)13922809991 第 1 页 共 11 页传真:86-755-82944243电话:86-755-82948412官方网站:www.STCMCU.com宏晶科技 STC15F 系列单片机用 RC 充放电实现检测外部电压日期:2012-2-24版本:V1.0对于没有 ADC 的 MCU,而又要测量外部的一个电压时,使用 RC 充放电的方式是比较容易实现并且低成本的方法。STC15F 系列是 1T 的 MCU,其 IO 口有 OPEN-DRAIN 模式,此模式可以很容易用一个 IO 口配合一个定时器实现 RC 充放电来测量外部未知电压。如果没有空余的定时器,也可以使用指令循

2、环的方式实现。本例使用定时器。本范例使用 P3.2(INT0)来做 RC 测量,电路和波形示意图如下:技术支持:(86)13922809991 第 2 页 共 11 页传真:86-755-82944243电话:86-755-82948412官方网站:www.STCMCU.com操作流程:1、 初始化程序将 P3.2 设置成 OPEN-DRAIN 模式, 并将 P3.2 输出 0 给电容放电。INT0 设置成上升沿中断。Timer 0 设置成 16 位自动重装定时器模式,时钟源为 12T,允许中断。2、 测量时,先清 Timer 0 的 TH0、TL0,然后将 P3.2 输出 1 开始对电容充电

3、,接着设置 TR0 = 1 来启动 Timer 0,然后在 INT0 中断里设置 TR0 = 0 来停止计数,并将 P3.2 输出 0 对电容放电。读出 TH0、TL0 的值就是RC 充电时间。由于 MCU 工作在 5V 时,IO 口读到“1”的门限电压大约为 2V,所以要求输入的电压高于 2V,本例的测试数据从 412.4V,测试结果参考后面的附录 1。假设输入电压为 Ux,IO 口门限电压为 2V,则 RC 充电时间为:T = - R * C * ln ( 1 2 / Ux )按图示参数,当输入为 10V 时,RC 时间大约为 446uS,附录 1 中实测为 447uS。技术支持:(86)

4、13922809991 第 3 页 共 11 页传真:86-755-82944243电话:86-755-82948412官方网站:www.STCMCU.com由于 RC 时间跟 R 和 C 有关,而 R 的温漂一般较小,但普通电容的温漂较大,所以要使用温漂小并且漏电也小的电容。由充电公式或曲线图可知,Ux 和 RC 值的关系是非线性的,所以实际项目使用时,要根据自己的实际电路做一些标定,这样可以得到比较准确的值。本方法适用于对测量精度要求不是很高的场合。附录 1:测量结果和曲线输入电压(V)Timer 0 读数时间 uS(18.432MHZ)4 2100 13674.2 1966 12804.

5、4 1846 12024.6 1740 11334.8 1646 10725 1560 10165.2 1487 9685.4 1416 9225.6 1354 882技术支持:(86)13922809991 第 4 页 共 11 页传真:86-755-82944243电话:86-755-82948412官方网站:www.STCMCU.com5.8 1297 8446 1245 8116.2 1196 7796.4 1150 7496.6 1110 7236.8 1070 6977 1033 6737.2 1000 6517.4 968 6307.6 938 6117.8 910 5928 8

6、84 5768.2 860 5608.4 836 5448.6 814 5308.8 793 5169 772 5039.2 754 4919.4 736 4799.6 718 467技术支持:(86)13922809991 第 5 页 共 11 页传真:86-755-82944243电话:86-755-82948412官方网站:www.STCMCU.com9.8 702 45710 686 44710.2 671 43710.4 656 42710.6 642 41810.8 629 41011 616 40111.2 604 39311.4 592 38511.6 581 37811.8

7、570 37112 560 36512.2 550 35812.4 540 352技术支持:(86)13922809991 第 6 页 共 11 页传真:86-755-82944243电话:86-755-82948412官方网站:www.STCMCU.com附录 2:C 语言程序/*-*/* - STC MCU International Limited -*/* - STC 1T Series MCU RC Demo -*/* - Mobile: (86)13922805190 -*/* - Fax: 86-755-82944243 -*/* - Tel: 86-755-82948412 -

8、*/* - Web: www.STCMCU.com -*/* If you want to use the program or the program referenced in the */* article, please specify in which data and procedures from STC */*-*/*功能描述: 使用 STC15F 系列 C 版本做的 RC 测量电压的例子.*/技术支持:(86)13922809991 第 7 页 共 11 页传真:86-755-82944243电话:86-755-82948412官方网站:www.STCMCU.com#incl

9、ude “reg51.h“#define MAIN_Fosc 22118400L /定义主时钟#define uchar unsigned char#define uint unsigned intsfr AUXR = 0x8e; /Auxiliary registersfr P3M1 = 0xB1; /P3M1.N,P3M0.N =00-Standard,01-push-pullsfr P3M0 = 0xB2; / =10-pure input, 11-open drainsbit P_TXD1 = P31; /定义模拟串口发送脚,打印信息用sbit P_RC = P32; /RC port

10、uchar SampleCnt; /发送结果的采样间隔计数uchar LineCnt; /每行显示结果计数bit B_Over; /超时标志bit B_ADC_OK; /检测完成标志uint adc; /RC 做的 ADC 值void RC_start(void);void Tx1Send(uchar dat);void InitTimer(void);void delay_ms(unsigned char ms);/void main(void)InitTimer(); /初始化 TimerP3M1 |= 1 = 100) /1 秒钟发一个结果给串口SampleCnt = 0;Tx1Send

11、(adc / 10000 + 0); /send to PC from the UARTTx1Send(adc % 10000 / 1000 + 0);Tx1Send(adc % 1000 / 100 + 0);Tx1Send(adc % 100 / 10 + 0);Tx1Send(adc % 10 + 0);Tx1Send( );Tx1Send( );if(+LineCnt = 10) /10 个结果后换行LineCnt = 0;Tx1Send(0x0d); /send CRTx1Send(0x0a);/=/ 函数: void delay_ms(unsigned char ms)/ 描述:

12、延时函数。/ 参数: ms, 要延时的 ms 数./ 返回: none./ 版本: VER1.0/ 日期: 2010-12-15/ 备注: /=void delay_ms(unsigned char ms)unsigned int i;技术支持:(86)13922809991 第 9 页 共 11 页传真:86-755-82944243电话:86-755-82948412官方网站:www.STCMCU.comdoi = MAIN_Fosc / 14000L; /1Twhile(-i) ; /13T per loopwhile(-ms);/* RC 启动函数 */void RC_start(vo

13、id)/使用 Timer 0 计时TH0 = 0; /clear Timer 0TL0 = 0;B_Over = 0; /Clear Over flagP_RC = 1; /RC chargeTR0 = 1; /enable Timer 0IE0 = 0; /Clear INT0 flagEX0 = 1; /INT0 EnableIT0 = 0; /INT0 上升,下降沿中断/* INT0 中断函数 */void INT0_int (void) interrupt 0 /if(INT0 /deable Timer 0P_RC = 0; /dechargeadc = TH0; /read the RC timeadc = (adc = 1;BitTime();P_TXD1 = 1;EA = 1;BitTime();BitTime();

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 重点行业资料库 > 1

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。