微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机AD转换的程序

51单片机AD转换的程序

时间:11-28 来源:互联网 点击:

  1. //ES = 1; //允许UART串口的中断
  2. TMOD = 0x20; //定时器T/C1工作方式2
  3. SCON = 0x50; //串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收)
  4. TH1 = 0xF3; //定时器初值高8位设置
  5. TL1 = 0xF3; //定时器初值低8位设置
  6. PCON = 0x80; //波特率倍频(屏蔽本句波特率为2400)
  7. TR1 = 1; //定时器启动
  8. }
  9. void UART_T (unsigned char UART_data){ //定义串口发送数据变量
  10. SBUF = UART_data; //将接收的数据发送回去
  11. while(TI == 0); //检查发送中断标志位
  12. TI = 0; //令发送中断标志位为0(软件清零)
  13. }
  14. void Read_init (unsigned char CHA){
  15. unsigned char AD_FIN=0; //存储A/D转换标志
  16. CHA = 0x07; //选择ADC的8个接口中的一个(0000 0111 清0高5位)
  17. ADC_CONTR = 0x40; //ADC转换的速度(0XX0 0000 其中XX控制速度,请根据数据手册设置)
  18. _nop_();
  19. ADC_CONTR |= CHA; //选择A/D当前通道
  20. _nop_();
  21. ADC_CONTR |= 0x80; //启动A/D电源
  22. DELAY_MS(1); //使输入电压达到稳定(1ms即可)
  23. }
  24. void ADC_Read (void){
  25. unsigned char AD_FIN=0; //存储A/D转换标志
  26. ADC_CONTR |= 0x08; //启动A/D转换(0000 1000 令ADCS = 1)
  27. _nop_();
  28. _nop_();
  29. _nop_();
  30. _nop_();
  31. while (AD_FIN ==0){ //等待A/D转换结束
  32. AD_FIN = (ADC_CONTR 0x10); //0001 0000测试A/D转换结束否
  33. }
  34. ADC_CONTR = 0xE7; //1111 0111 清ADC_FLAG位, 关闭A/D转换,
  35. }
  36. void main (void){
  37. UART_init();//串口初始程序
  38. Read_init(0);//ADC初始化
  39. P1M1 = 0x01; //P1.7~P1.0:0000 0001(高阻)//注意:更改ADC通道时须同时将对应的IO接口修改为高阻输入。
  40. P1M0 = 0x00; //P1.7~P1.0:0000 0000(强推)
  41. while(1){
  42. ADC_Read ();//调用ADC转换程序
  43. UART_T (ADC_RES); //串口小秘书,将ADC读出值高8位送入串口 0000 0000
  44. UART_T (ADC_RESL); //串口小秘书,将ADC读出值低2位送入串口 XXXX XX00
  45. }
  46. }

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top