ADC采样程序.docx

上传人:rrsccc 文档编号:9851150 上传时间:2021-03-30 格式:DOCX 页数:25 大小:25.91KB
返回 下载 相关 举报
ADC采样程序.docx_第1页
第1页 / 共25页
ADC采样程序.docx_第2页
第2页 / 共25页
ADC采样程序.docx_第3页
第3页 / 共25页
ADC采样程序.docx_第4页
第4页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《ADC采样程序.docx》由会员分享,可在线阅读,更多相关《ADC采样程序.docx(25页珍藏版)》请在三一文库上搜索。

1、ADC采样程序1./*2.函数名:8位A/D转换初始化函数3.调用:Read (?);4.参数:输入的端口(0000 0XXX 其中XXX是设置输入端口号,可用十进制07表示,0表示P1.0,7表示P1.7)5.返回值:无6.结果:开启ADC功能并设置ADC的输入端口7.备注:适用于STC12C2052AD系列单片机(必须使用STC12C2052AD.h头文件)8./*/9.void Read_init (unsigned char CHA)10. unsigned char AD_FIN=0; /存储A/D转换标志11. CHA &= 0x07; /选择ADC的8个接口中的一个(00

2、00 0111 清0高5位)12. ADC_CONTR = 0x40; /ADC转换的速度(0XX0 0000 其中XX控制速度,请根据数据手册设置)13. _nop_();14. ADC_CONTR |= CHA; /选择A/D当前通道15. _nop_();16. ADC_CONTR |= 0x80; /启动A/D电源17. DELAY_MS(1); /使输入电压达到稳定(1ms即可)18.19./*/20./*21.函数名:8位A/D转换函数22.调用:? = Read ();23.参数:无24.返回值:8位的ADC数据25.结果:读出指定ADC接口的A/D转换值,并返回数值26.备注:

3、适用于STC12C2052AD系列单片机(必须使用STC12C2052AD.h头文件)27./*/28.unsigned char Read (void)29. unsigned char AD_FIN=0; /存储A/D转换标志30. ADC_CONTR |= 0x08; /启动A/D转换(0000 1000 令ADCS = 1)31. _nop_();32. _nop_();33. _nop_();34. _nop_();35. while (AD_FIN =0) /等待A/D转换结束36. AD_FIN = (ADC_CONTR & 0x10); /0001 0000测试A/D转

4、换结束否37. 38. ADC_CONTR &= 0xE7; /1111 0111 清ADC_FLAG位, 关闭A/D转换,39.return (ADC_DATA); /返回A/D转换结果(8位)40.41./*/以上- 8位ADC程序模块(适用于STC12C2052AD系列)C代码1./*2.程序名: 8位ADC转换实验程序3.编写人:杜洋4.编写时间:2010年3月24日5.硬件支持:STC12C2052AD 使用ADC功能外部晶体12MHz6.接口说明:7.修改日志:8.1-9./*10.说明:11.PC串口端设置 4800,8,无,1,无 12.将ADC读出的数值通过串口以十六

5、进制方式显示。13.14./*/15.16.#include 17.#include 18.19./*20.函数名:毫秒级CPU延时函数21.调用:DELAY_MS (?);22.参数:165535(参数不可为0)23.返回值:无24.结果:占用CPU方式延时与参数数值相同的毫秒时间25.备注:应用于1T单片机时i26./*/27.void DELAY_MS (unsigned int a)28. unsigned int i;29. while( a- != 0)30. for(i = 0; i 31. 32.33./*/34.35./*36.函数名:UART串口初始化函数37.调用:UAR

6、T_init();38.参数:无39.返回值:无40.结果:启动UART串口接收中断,允许串口接收,启动T/C1产生波特率(占用)41.备注:振荡晶体为12MHz,PC串口端设置 4800,8,无,1,无 42./*/43.void UART_init (void)44. /EA = 1; /允许总中断(如不使用中断,可用/屏蔽)45. /ES = 1; /允许UART串口的中断46.47. TMOD = 0x20; /定时器T/C1工作方式248. SCON = 0x50; /串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收)49. TH1 = 0xF3; /定时器初值高

7、8位设置50. TL1 = 0xF3; /定时器初值低8位设置51. PCON = 0x80; /波特率倍频(屏蔽本句波特率为2400)52. TR1 = 1; /定时器启动53.54./*/55.56./*57.函数名:UART串口发送函数58.调用:UART_T (?);59.参数:需要UART串口发送的数据(8位/1字节)60.返回值:无61.结果:将参数中的数据发送给UART串口,确认发送完成后退出62.备注:63./*/64.void UART_T (unsigned char UART_data) /定义串口发送数据变量65. SBUF = UART_data; /将接收的数据发送

8、回去66. while(TI = 0); /检查发送中断标志位67. TI = 0; /令发送中断标志位为0(软件清零)68.69./*/70./*71.函数名:8位A/D转换初始化函数72.调用:Read (?);73.参数:输入的端口(0000 0XXX 其中XXX是设置输入端口号,可用十进制07表示,0表示P1.0,7表示P1.7)74.返回值:无75.结果:开启ADC功能并设置ADC的输入端口76.备注:适用于STC12C2052AD系列单片机(必须使用STC12C2052AD.h头文件)77./*/78.void Read_init (unsigned char CHA)79. un

9、signed char AD_FIN=0; /存储A/D转换标志80. CHA &= 0x07; /选择ADC的8个接口中的一个(0000 0111 清0高5位)81. ADC_CONTR = 0x40; /ADC转换的速度(0XX0 0000 其中XX控制速度,请根据数据手册设置)82. _nop_();83. ADC_CONTR |= CHA; /选择A/D当前通道84. _nop_();85. ADC_CONTR |= 0x80; /启动A/D电源86. DELAY_MS(1); /使输入电压达到稳定(1ms即可)87.88./*/89./*90.函数名:8位A/D转换函数91.

10、调用:? = Read ();92.参数:无93.返回值:8位的ADC数据94.结果:读出指定ADC接口的A/D转换值,并返回数值95.备注:适用于STC12C2052AD系列单片机(必须使用STC12C2052AD.h头文件)96./*/97.unsigned char Read (void)98. unsigned char AD_FIN=0; /存储A/D转换标志99. ADC_CONTR |= 0x08; /启动A/D转换(0000 1000 令ADCS = 1)100. _nop_();101. _nop_();102. _nop_();103. _nop_();104. while

11、 (AD_FIN =0) /等待A/D转换结束105. AD_FIN = (ADC_CONTR & 0x10); /0001 0000测试A/D转换结束否106. 107. ADC_CONTR &= 0xE7; /1111 0111 清ADC_FLAG 位, 关闭A/D转换,108.return (ADC_DATA); /返回A/D转换结果(8位)109.110./* */111./* *112.函数名:主函数113.调用:无114.参数:无115.返回值:无116.结果:程序开始处,无限循环117.备注:118./* */119.void main (void)120. un

12、signed char R;121. UART_init();/串口初始程序122. Read_init(0);/ADC初始化123. P1M0 = 0x01; /P1.7.0:0000 0001(高阻)/注意:更改ADC 通道时须同时将对应的IO接口修改为高阻输入。124. P1M1 = 0x00; /P1.7.0:0000 0000(强推)125. while(1)126. R = Read ();127. UART_T (R); /串口小秘书,将ADC读出值送入串口显示128. 129.以上- 8位ADC应用实例(适用于STC12C2052AD系列)C代码1./*2.函数名:10位A/D

13、转换初始化函数3.调用:Read_init (?);4.参数:输入的端口(0000 0XXX 其中XXX是设置输入端口号,可用十进制07表示,0表示P1.0,7表示P1.7)5.返回值:无6.结果:开启ADC功能并设置ADC的输入端口7.备注:使用ADC功能时需要将对应的IO接口设置为高阻输入方式(例如:P1M1 = 0x01;)8./*/9.void Read_init (unsigned char CHA)10. unsigned char AD_FIN=0; /存储A/D转换标志11. CHA &= 0x07; /选择ADC的8个接口中的一个(0000 0111 清0高5位)12

14、. ADC_CONTR = 0x40; /ADC转换的速度(0XX0 0000 其中XX控制速度,请根据数据手册设置)13. _nop_();14. ADC_CONTR |= CHA; /选择A/D当前通道15. _nop_();16. ADC_CONTR |= 0x80; /启动A/D电源17. DELAY_MS(1); /使输入电压达到稳定(1ms即可)18.19./*/20./*21.函数名:10位A/D转换函数22.调用:? = ADC_Read();23.参数:无24.返回值:10位ADC数据高(从0到1023(十进制)25.结果:读出指定ADC接口的A/D转换值,并返回数值26.备

15、注:适用于STC12C5A60S2系列单片机(必须使用STC12C5A60S2.h头文件)27./*/28.unsigned int ADC_Read (void)29. unsigned char AD_FIN=0; /存储A/D转换标志30. ADC_CONTR |= 0x08; /启动A/D转换(0000 1000 令ADCS = 1)31. _nop_();32. _nop_();33. _nop_();34. _nop_();35. while (AD_FIN =0) /等待A/D转换结束36. AD_FIN = (ADC_CONTR & 0x10); /0001 0000测

16、试A/D转换结束否37. 38. ADC_CONTR &= 0xE7; /1111 0111 清ADC_FLAG位, 关闭A/D转换,39.return (ADC_RES*4+ADC_RESL);/返回A/D转换结果(10位ADC数据高8位在ADC_RES中,低2位在ADC_RESL中)40.以上- 10位ADC程序模块(适用于STC12C5A60S2系列)C代码1./*2.程序名: 10位ADC转换实验程序3.编写人:杜洋4.编写时间:2010年3月24日5.硬件支持:STC12C5A60S2 使用10位ADC功能外部晶体12MHz6.接口说明:P1.0接口接电位器7.修改日志:8.

17、1-9./*10.说明:11.PC串口端设置 4800,8,无,1,无 12.将ADC读出的数值通过串口以十六进制方式显示(第一个数据是ADC高8位,第二个数据是ADC低2位)。13./*/14.15.#include 16.#include 17.18./*19.函数名:毫秒级CPU延时函数20.调用:DELAY_MS (?);21.参数:165535(参数不可为0)22.返回值:无23.结果:占用CPU方式延时与参数数值相同的毫秒时间24.备注:应用于1T单片机时i25./*/26.void DELAY_MS (unsigned int a)27. unsigned int i;28. w

18、hile( a- != 0)29. for(i = 0; i 30. 31.32./*/33.34./*35.函数名:UART串口初始化函数36.调用:UART_init();37.参数:无38.返回值:无39.结果:启动UART串口接收中断,允许串口接收,启动T/C1产生波特率(占用)40.备注:振荡晶体为12MHz,PC串口端设置 4800,8,无,1,无 41./*/42.void UART_init (void)43. /EA = 1; /允许总中断(如不使用中断,可用/屏蔽)44. /ES = 1; /允许UART串口的中断45.46. TMOD = 0x20; /定时器T/C1工作

19、方式247. SCON = 0x50; /串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收)48. TH1 = 0xF3; /定时器初值高8位设置49. TL1 = 0xF3; /定时器初值低8位设置50. PCON = 0x80; /波特率倍频(屏蔽本句波特率为2400)51. TR1 = 1; /定时器启动52.53./*/54.55./*56.函数名:UART串口发送函数57.调用:UART_T (?);58.参数:需要UART串口发送的数据(8位/1字节)59.返回值:无60.结果:将参数中的数据发送给UART串口,确认发送完成后退出61.备注:62./*/63.v

20、oid UART_T (unsigned char UART_data) /定义串口发送数据变量64. SBUF = UART_data; /将接收的数据发送回去65. while(TI = 0); /检查发送中断标志位66. TI = 0; /令发送中断标志位为0(软件清零)67.68./*/69./*70.函数名:10位A/D转换初始化函数71.调用:Read_init (?);72.参数:输入的端口(0000 0XXX 其中XXX是设置输入端口号,可用十进制07表示,0表示P1.0,7表示P1.7)73.返回值:无74.结果:开启ADC功能并设置ADC的输入端口75.备注:适用于STC1

21、2C5A60S2系列单片机(必须使用STC12C5A60S2.h头文件)76./*/77.void Read_init (unsigned char CHA)78. unsigned char AD_FIN=0; /存储A/D转换标志79. CHA &= 0x07; /选择ADC的8个接口中的一个(0000 0111 清0高5位)80. ADC_CONTR = 0x40; /ADC转换的速度(0XX0 0000 其中XX控制速度,请根据数据手册设置)81. _nop_();82. ADC_CONTR |= CHA; /选择A/D当前通道83. _nop_();84. ADC_CONTR

22、 |= 0x80; /启动A/D电源85. DELAY_MS(1); /使输入电压达到稳定(1ms即可)86.87./*/88./*89.函数名:10位A/D转换函数90.调用:ADC_Read ();91.参数:无92.返回值:无(10位ADC数据高8位存放在ADC_RES中,低2位存放在ADC_RESL中)93.结果:读出指定ADC接口的A/D转换值,并返回数值94.备注:适用于STC12C5A60S2系列单片机(必须使用STC12C5A60S2.h头文件)95./*/96.void ADC_Read (void)97. unsigned char AD_FIN=0; /存储A/D转换标志

23、98. ADC_CONTR |= 0x08; /启动A/D转换(0000 1000 令ADCS = 1)99. _nop_();100. _nop_();101. _nop_();102. _nop_();103. while (AD_FIN =0) /等待A/D转换结束104. AD_FIN = (ADC_CONTR & 0x10); /0001 0000测试A/D转换结束否105. 106. ADC_CONTR &= 0xE7; /1111 0111 清ADC_FLAG 位, 关闭A/D转换,107.108./* */109./* *110.函数名:主函数111.调用:无1

24、12.参数:无113.返回值:无114.结果:程序开始处,无限循环115.备注:116./* */117.void main (void)118. UART_init();/串口初始程序119. Read_init(0);/ADC初始化120. P1M1 = 0x01; /P1.7P1.0:0000 0001(高阻)/注意:更改ADC通道时须同时将对应的IO接口修改为高阻输入。121. P1M0 = 0x00; /P1.7P1.0:0000 0000(强推)122. while(1)123. ADC_Read ();/调用ADC转换程序124. UART_T (ADC_RES); /串口小秘书

25、,将ADC读出值高8位送入串口 0000 0000125. UART_T (ADC_RESL); /串口小秘书,将ADC读出值低2位送入串口 XXXX XX00126. 127.以上- 10位ADC应用实例(适用于STC12C5A60S2系列)引用注意事项:1. STC12C5A60S2系列内置10位ADC,STC12C2052AD系列内置8位ADC。2. 在使用ADC功能时,应将其输入端的I/O接口设置为高阻输入工作方式。3. 更改ADC通道时须同时将对应的IO接口修改为高阻输入。4. STC12C5A60S2系列的10位ADC数据中,高8位存放在ADC_RES中,低2位存放在ADC_RES

26、L中。STC12C5A60S2.h头文件中对ADC部分的定义如下:sfr ADC_CONTR = 0xBC; /A/D 转换控制寄存器ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 0000,0000sfr ADC_RES = 0xBD; /A/D 转换结果高8位 ADCV.9 ADCV.8 ADCV.7 ADCV.6 ADCV.5 ADCV.4 ADCV.3 ADCV.2 0000,0000sfr ADC_RESL = 0xBE; /A/D 转换结果低2位 ADCV.1 ADCV.0 0000,0000可将其模板下载到本地硬盘,在编写新程序的时候复制、粘贴到工程当中,然后根据情况写入具体内容。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1