ADC的寄存器读取,
int adc_read(void)
{
int result;

#if ADSTART==0
result = ADC.ADCDAT0&0x3ff;

while(!(ADC.ADCCON&(0x1<<15)))
{
}
#elif ADSTART==1
while(!(ADC.ADCCON&(0x1<<15)))
{
}

result = ADC.ADCDAT0&0x3ff;
#endif

return 3300/0x3ff*result;
}
#endif
**************************************
void niuniu(void)
{
uart_init();
adc_init();
beeper_init();

adc_read();

while(1)
{
itoa(adc_read());
if(adc_read() > 2500)
{
beeper_on();
}
else
{
beeper_off();
}
delay(10000);
}
}
#endif
**********************************
ADC的寄存器读取出来就是Int型的十进制。,有小数所以转化为上千。
为了打印出来所以用了itoa,比较的时候不要住转化为字符串adc_read() > 2500;
而RTC中寄存器存的时候就用16进制,atoh字符串转化为int型16进制,我们平时用的时间比入22:19:54 就是十进制的表示,我说数字不是说他的进位,我们设置时间的两种方式:
方法1: char time[]={0x22,0x19,0x54};
char time[]={34,25,84};
方法2: 利用串口,timeset 22:19:54(把字符串利用strtok切割出来放到time中)
time[0] = atoh(p[1]);
time[1] = atoh(p[2]);
time[2] = atoh(p[3]);
time[3] = atoh(p[4]);
time[4] = atoh(p[5]);
time[5] = atoh(p[6]);
time[6] = atoh(p[7]);
atoh函数看上去把字符串转化为Int型的16进制,实际不是
int atoh(char *p)
{
int sum = 0;

while(*p != '\0')
{
sum = sum*16+*p++-'0';
}

return sum;
}
举例:
字符串14(后边有一个\0)
sum=0*16+’1’(字符1的ASCII码)-'0'( 字符0的ASCII码60)
*p++ 变为4(指的是字符4)
sum=1*16+‘4’-‘0’=20
atoh函数,作用你自己脑子想的10进制数14时写成字符1和字符4,利用atoh函数,脑子里想的10进制的14是十进制的20.因为你没有加0x,所以只能写成10进制。其实BCD只是2进制一种编码方式,不是16进制,而我们的寄存里存16进制,我们必须把16进制转化为10进制数(也可以直接16进制赋值,必须加0x),不加0x给寄存器,这只是给寄存器赋值,怎么赋值无所谓,只是寄存器中存的是16进制,而我们从寄存器中读数,
void rtc_display(void)
{
puts("\r\n");
htoa(RTC.BCDYEAR);
putc('-');
htoa(RTC.BCDMON);
putc('-');
htoa(RTC.BCDDATE);
putc(' ');
htoa(RTC.BCDDAY);
putc(' ');
htoa(RTC.BCDHOUR);
putc(':');
htoa(RTC.BCDMIN);
putc(':');
htoa(RTC.BCDSEC);
}
我们从寄存器里读出来的数是Int型的16进制,我们利用htoa进行转化,
void htoa(int h)
{
putc(h/16+48);
putc(h%16+48);
}
这个函数比如20(没有加ox,但是他是16进制),我们想要打印出来,必须化为字符,20/16+48,=1 (对应的字符‘0’)
20%16=4,+48,对应字符4
所以寄存器里还是存的十进制。
*************************************
RTC
应用层
void niuniu(void)
{
int time[7];
char buf[32], *p[9];
int i;

uart_init();

while(1)
{
puts("\r\nrtc> ");
gets(buf);
buf[strlen(buf)-2] = '\0';
p[0] = strtok(buf, " ");
for(i=1; p[i-1]!=NULL; i++)
{
p[i] = strtok(NULL, " ");
}

if(strcmp(p[0], "timeset") == 0)
{
time[0] = atoh(p[1]);
time[1] = atoh(p[2]);
time[2] = atoh(p[3]);
time[3] = atoh(p[4]);
time[4] = atoh(p[5]);
time[5] = atoh(p[6]);
time[6] = atoh(p[7]);
rtc_init(time);
}

if(strcmp(p[0], "time") == 0)
{
rtc_display();
}
}
}
**********************************************
void rtc_init(int *t)
{
RTC.RTCCON = 0x1;
RTC.BCDYEAR = t[0];
RTC.BCDMON = t[1];
RTC.BCDDATE = t[2];
RTC.BCDDAY = t[3];
RTC.BCDHOUR = t[4];
RTC.BCDMIN = t[5];
RTC.BCDSEC = t[6];
RTC.RTCCON = 0x0;
}

void rtc_display(void)
{
puts("\r\n");
htoa(RTC.BCDYEAR);
putc('-');
htoa(RTC.BCDMON);
putc('-');
htoa(RTC.BCDDATE);
putc(' ');
htoa(RTC.BCDDAY);
putc(' ');
htoa(RTC.BCDHOUR);
putc(':');
htoa(RTC.BCDMIN);
putc(':');
htoa(RTC.BCDSEC);
}
#endif
*********************************
#if STRING==1
void itoa(int i)
{
putc(i/1000+48);
putc(i%1000/100+48);
putc(i%100/10+48);
putc(i%10+48);
puts("\r\n");
}

void htoa(int h)
{
putc(h/16+48);
putc(h%16+48);
}

int atoh(char *p)
{
int sum = 0;

while(*p != '\0')
{
sum = sum*16+*p++-'0';
}

return sum;
}
举例:
字符串14(后边有一个\0)
sum=0*16+’1’(字符1的ASCII码)-'0'( 字符0的ASCII码60)
*p++ 变为4(指的是字符4)
sum=1*16+‘4’-‘0’=20
#endif
***********************************

ADC和RTC的寄存器的读取的更多相关文章

  1. SAR ADC : 逐次逼近寄存器型(SAR)模数转换器(ADC)

    1.为实现二进制搜索算法,N位寄存器首先设置在中间刻度(即:100... .00,MSB设置为1).这样,DAC输出(VDAC)被设为VREF/2,VREF是提供给ADC的基准电压.然后,比较判断VI ...

  2. hwclock和date源码分析

    一. hwclock 1.1 hwclock源码在哪里? util-linux 或者busybox 1.2 获取源码 git clone https://github.com/karelzak/uti ...

  3. stm32寄存器版学习笔记07 ADC

    STM32F103RCT有3个ADC,12位主逼近型模拟数字转换器,有18个通道,可测量16个外部和2个内部信号源.各通道的A/D转换可以单次.连续.扫描或间断模式执行. 1.通道选择 stm32把A ...

  4. 痞子衡嵌入式:对比i.MXRT与LPC在RTC外设GPREG寄存器使用上的异同

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是对比i.MXRT与LPC在RTC外设GPREG寄存器使用上的异同. 本篇是 <在SBL项目实战中妙用i.MXRT1xxx里Syst ...

  5. STM32 ADC详细篇(基于HAL库)

    一.基础认识 ADC就是模数转换,即将模拟量转换为数字量 l  分辨率,读出的数据的长度,如8位就是最大值为255的意思,即范围[0,255],12位就是最大值为4096,即范围[0,4096] l  ...

  6. RTC实时时钟

    作者:宋老师,华清远见嵌入式学院讲师. 1.1 RTC介绍 在 一个嵌入式系统中,通常采用RTC 来提供可靠的系统时间,包括时分秒和年月日等,而且要求在系统处于关机状态下它也能够正常工作(通常采用后备 ...

  7. 重学STM32---(五)ADC

    这两天把外部中断和ADC看了下,个人感觉外部中断不是很难,也就没有把记下来了,毕竟写这个挺浪费时间.ADC是比较复杂的,如果想让完全自由的运用ADC必须经过多次实践可能才可以.由于已经学过库函数,也就 ...

  8. Linux驱动修炼之道-RTC子系统框架与源码分析【转】

    转自:http://helloyesyes.iteye.com/blog/1072433 努力成为linux kernel hacker的人李万鹏原创作品,为梦而战.转载请标明出处 http://bl ...

  9. linux rtc 接口【转】

    转自:http://blog.csdn.net/goldfighter/article/details/6126178 Linux操作系统内核对RTC的编程详解 转自: http://xenyinze ...

随机推荐

  1. 前端 javascript 定时器

    setInterval("执行的代码",间隔时间)毫秒单位 每5秒一次会提示出弹框 <!DOCTYPE html> <html lang="en&quo ...

  2. JavaScript Big-Int

    这个库是为JavaScript中的大整数操作,如加,减,乘,除,mod,比较等. 这个库的原理是模拟笔和纸的操作,你可以操作整数,大到你的RAM允许. 例 var bigInt = require(' ...

  3. HttpServletRequest获取请求参数中所有的信息

    /** * 获取客户端请求参数中所有的信息 * @param request * @return */ private Map<String, String> getAllRequestP ...

  4. IBM Java 7 新特性和在 WAS 8.5 中的配置【转载】

    IBM Java 7新特性以及在WAS V8.5 中的安装与版本切换 简介: 本文介绍了 IBM Java 7 的基本新特性以及 IBM 特有的新特性,并详细的介绍和分析了 JVM 所采用的新的垃圾回 ...

  5. 20165324《Java程序设计》第一周

    20165324<Java程序设计>第一周学习总结 教材学习内容总结 第一章:Java入门 重点一.编写Java程序 第一步编写源文件,(注:第一步中Java严格区分大小写:Java源文件 ...

  6. Delphi APP 開發入門(八)SQLite資料庫

    Delphi APP 開發入門(八)SQLite資料庫 分享: Share on facebookShare on twitterShare on google_plusone_share   閲讀次 ...

  7. 以About Us为范例在Zen cart中增加页面

    1.在includes\languages\english\html_includes目录中新建文件define_about_us.php 2.在includes\templates\Your_tem ...

  8. Linux系统——文件和目录权限

    文件及目录权限(七进制表示) r  读权限(4),允许查看文件内容 w 写权限(2),允许修改文件内容 x  可执行权限(1),允许运行程序 - 无权限(0) 属主:拥有该文件的用户账号 属组:拥有该 ...

  9. php注册审查

    思路 用户注册后就有该条用户记录,你对用户表设一个“审核状态”字段,默认值设为“未审核”,然后你写几句审核代码做成一个功能,按照你们的意愿若审核通过你把审核状态改为“已审核”就行了.用户想进行各种操作 ...

  10. 中线,基线,垂直居中vertical-align:middle的一些理解

    基线:小写字母xxxxx的下边缘线就是我们的css基线:一般的行内元素都是vertical-align: baseline;默认设置: x-height:就是指小写字母xxxx的高度,下边缘线到上边缘 ...