找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3489|回复: 2
打印 上一主题 下一主题
收起左侧

怎么用单片机定时器给adc0809提供时钟?

[复制链接]
跳转到指定楼层
楼主
我用51单片机定时器的模式1给adc0809提供时钟,因为adc0809需要500kHZ,所以2us中断一次,我写的是一个用adc0809采集电压后送给51,然后用lcd1602显示的程序,但写了时钟的中断后lcd就不正常显示了

是不是因为中断太频繁所以程序难以往下进行?那给adc0809提供时钟的程序该怎么写?
  1. #include"reg52.h"
  2. #include"intrins.h"

  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. sbit rs=P3^0;
  6. sbit wr=P3^1;
  7. sbit lcde=P3^2;


  8. sbit st=P2^0;
  9. sbit eoc=P2^1;
  10. sbit oe=P2^2;
  11. sbit clock=P2^3;

  12. uchar dat=0;
  13. *************************************
  14. 延时函数
  15. ******************************
  16. void delay2ms(void)  
  17. {
  18.     unsigned char a,b;
  19.     for(b=4;b>0;b--)
  20.         for(a=248;a>0;a--);
  21.     _nop_();  
  22. }
  23. ***************************************
  24. lcd写命令函数
  25. ****************************************
  26. void lcd_write_com(uchar a)
  27. {
  28.       
  29.       
  30.         rs=0;
  31.         wr=0;
  32.         P1=a;
  33.         delay2ms();
  34.         lcde=0;
  35.         lcde=1;
  36. }
  37. ************************************
  38. lcd写数据函数
  39. *************************************
  40. void lcd_write_dat(uchar a)
  41. {
  42.         rs=1;
  43.         wr=0;
  44.         P1=a;
  45.         delay2ms();
  46.         lcde=0;
  47.         lcde=1;
  48. }
  49. **************************************
  50. lcd写字符串函数
  51. *****************************************

  52. void lcd_write_str(char *s)
  53. {
  54.         while(*s!='\0')
  55.         {
  56.                 lcd_write_dat(*s);
  57.                 delay2ms();
  58.                 s++;
  59.         }
  60. }
  61. *******************************
  62. 初始化定时器和lcd
  63. *********************************
  64. void init()
  65. {
  66.         lcd_write_com(0x38);
  67.         lcd_write_com(0x0c);
  68.         lcd_write_com(0x06);
  69.         lcd_write_com(0x01);
  70.       

  71.     TMOD = 0x02;
  72.     TH0 = 0x14;
  73.     TL0 = 0x00;
  74.     EA = 1;
  75.     ET0 = 1;
  76.     TR0 = 1;

  77.       
  78. }
  79. *********************************************
  80. 定时器中断
  81. *******************************************
  82. void Timer0Interrupt(void) interrupt 1
  83. {

  84.           clock=~clock;

  85. }
  86. ********************************************
  87. 显示函数
  88. ***********************************************
  89. void display(uchar dat)
  90. {
  91.         uchar voltage;
  92.       
  93.         voltage=dat;
  94.         voltage=voltage/51;
  95.       
  96.         lcd_write_com(0x01);
  97.   lcd_write_str("voltage:");
  98.         lcd_write_dat(voltage+0x30);
  99. }
  100. **************************************
  101. 主函数
  102. *****************************
  103. void main()
  104. {
  105.         init();
  106.       
  107.         P3=0x3f;//í¨μà1
  108.       
  109.         while(1)
  110.         {
  111.           st=0;
  112.                 st=1;
  113.                 st=0;
  114.                 while(eoc==0);
  115.                 oe=1;
  116.                 dat=P1;
  117.                 display(dat);
  118.                 oe=0;
  119.         }
  120. }
复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:347721 发表于 2018-9-15 19:44 | 只看该作者
写错了,定时器用的是模式2
回复

使用道具 举报

板凳
ID:111634 发表于 2018-9-15 21:39 | 只看该作者
本帖最后由 zl2168 于 2018-9-18 22:24 编辑

实例81  ADC0808中断方式A-D(ALE输出CLK)
Proteus仿真一下,确认有效。
实例81 ADC0808A-D( ALE输出CLK,中断方式).rar (54.32 KB, 下载次数: 28)

以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1.书中电路和程序设计有详细说明,程序语句条条有注解。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表