STC12C5A60S2内部ADC转换串口显示程序_第1页
STC12C5A60S2内部ADC转换串口显示程序_第2页
STC12C5A60S2内部ADC转换串口显示程序_第3页
STC12C5A60S2内部ADC转换串口显示程序_第4页
STC12C5A60S2内部ADC转换串口显示程序_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精心整理STC12C5A60S劝部ADC专换串口显示程序(已经验证成功)#i nclude #in elude in tri ns.h typedef un sig ned char uchar;*typedef un sig ned intuint;设置 ADC_CONTRL 控制寄存器 *#defi ne ADC_POWER 0x80转换电源1 :打开AD转换电源r I / ADC 电源控制为0 :关闭AD ADC 转换结束标志位,AD转#defi ne ADC_FLAG 0x10换后自动置1, 由软件清零(这里作取反使用)#defi ne ADC_START 0x08/ ADC 转换启动

2、控制位,设置为1时开始AD转换,/转换结束后为0#define ADRJ_0x04/ AUXR1 寄存器的 ADRJ 位是转换结果寄存器(ADC_RES,ADC_RESL)的数据格式调整控制位/ ADRJ 为0时,10位AD转换结果的高8位存放在ADC_RES 中,低2位存放在 ADC_RESL的低2位/ ADRJ 为1时,10位AD转换结果的高2位存放在ADC_RES 低2位中,低8位存放在ADC_RESL#define ADC_SPEEDLL 0x00II 540 个时钟周期转换一次(最低速)#defi ne ADC_SPEEDL0x20/ 360个时钟周期转换一次(低速)#defi ne

3、 ADC_SPEEDH0x40/ 180个时钟周期转换一次(高速)#defi ne ADC_SPEEDHH 0x60/ 90个时钟周期转换一次(最高速)/ i l?!r? -以J. iuchar ch = 0;/模拟通道uchar code num=0,1,2,3,4,5,6,7,8,9;字符数组,输出到串口显示X J . xi I - -Ivoid delay2ms(void) / 误差 O.OOOOOOOOOOOOusun sig ned char a,b;for(b=129;b0;b-)for(a=45;a0;a-);void delay2s(void) / 误差-0.000000000

4、111usun sig ned char a,b,c ,n;for(c=142;c0;c-)for(b=168;b0;b-)for(a=250;a0;a-);精心整理for(n=2;n0;n-);_nop_(); /if Keil,require use intrin s.h/*串口通信部分*uchar wj_uun二!;/用于存放串口 1接收的字符void bt_uart_i nit(void)r/单片机串口初始化I V *!1SCON=0X50;J? A ; r 1 P 匚/SM0=0 SM1 = 1SM2=0REN=1、人八 I i * J、7/ I-SM0 = 0;/串口工作方式1 :

5、 1位起始位,8位数据位,1位停止位允许串口接收SM1 = 1;REN = 1;/允许串口接收RI=1;/接收标志位,0:正在接收1:接收完毕(如果RI=1就一直执行串口中断)TMOD = 0X20;/定时器T1工作方式2TH1 = 0XFD;/ 9600bit/s下的定时器初值TL1 = 0XFD;TR1 = 1;/启动定时器T1EA = 1;/开总中断ES = 1;/开串行口中断精心整理*串口 1发送函数*void s1_se nd_char(uchar dat) SBUF = dat;器while(!TI);发送中1 :发送结束TI = 0;void s1_se nd_stri ng(u

6、char *pt) 来发送字符数组while(*pt != 0) s1_se nd_char(*pt+);void ADCni t(void) / P1ASF = 0x01;/发送端(发送的是字符)/将字符送入发送缓冲寄存/ TI为发送状态标志位,0 :力” IL么1厂广Ilf /手动清零标志位:夕门,r? .7 | I ,| f I b / 、/通过调用发送字符函数 X -i I1 w - - . I设置P1 口的0为模拟输入端口(经过测试这句写不写P1 口都能模拟输入)ADC RES = 0;/ 先清空两个寄存器/ ADRJ为0的存储格式(参考技ADC_RESL = 0;AUXR1 &二

7、ADRJ术手册)ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|ch;/ 开启ADC电源并且启动ADC/ 经过最少四个时钟周期之后才能够正确读取到ADC_CONTR 的值delay2ms();EADC = 1;*/ 允许ADC中断主函数*void mai n()P4SW = 0x70;口bt_uart_i nit();ADC_I nit();while(1) / P4 端口的4、5、6脚可作为通用I/O/串口初始化/ ADC 初始化ADC中断函数*void ADC_(void) in terrupt 5/ ADC 中断编号为5uint adc_result

8、= 0;/ while(!(ADC_CONTR & ADC_FLAG); /如果未转换结束,等待ADC_CONTR寄存器ADC_FLAG位置1/ ADC_CONTR &二 ADC_FLAG;/ 清零 ADC 转换结束标志位(这句可以不写,因为下面有覆盖)if(ADC_CONTR & ADC_FLAG) ADC_RESL &二 0x03;adc_result = ADC_RES*4 + ADC_RESL;获取到 10AD转换值s1_send_string(通道号:”);Xjr -i I1- Is1_se nd_char( numch);II 通过串口发送通道号s1_send_string(转换值:);II 一共四位数s1_se nd_char( nu madc_resultI1000);s1_se nd_char( nu madc_result%1000/100);s1_se nd_char( nu madc_result%100I10);s1_se nd_char( nu madc_result%10);if(+ch3) ch = 0;II 不断切换通道号0、2、3II 再次设置ADC_CONTR 寄存器ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|ch;delay2s();*串口 1中断程序*void bt_serial_1() inter

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论