欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 怎么用單片機定時器給adc0809提供時鐘? [打印本頁]

作者: 喬陸騰    時間: 2018-9-15 19:26
標題: 怎么用單片機定時器給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. }
復制代碼




作者: 喬陸騰    時間: 2018-9-15 19:44
寫錯了,定時器用的是模式2
作者: zl2168    時間: 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.書中電路和程序設計有詳細說明,程序語句條條有注解。





歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1