找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2918|回復: 1
收起左側

單片機定時中斷范例 帶仿真 程序 原理圖

[復制鏈接]
ID:120620 發(fā)表于 2016-5-13 21:33 | 顯示全部樓層 |閱讀模式
定時中斷范例
0.png
所有完整資料下載: 定時中斷.rar (83.17 KB, 下載次數(shù): 18)


仿真文件原理圖:
0.png 0.png

程序1:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. //sbit S1=P3^2;
  6. //sbit S2=P3^3;
  7. sbit OL=P2^0;
  8. uchar i,t,k; //全局變量
  9. int a,j,l;
  10. unsigned long m;
  11. void main()
  12. {
  13. P1=0x00; //先讓LED暗
  14. //S1=1;
  15. //S2=1;
  16. //j=0;
  17. //l=0;
  18. a=20000;  //50Hz的初值
  19. EA=1;
  20. TMOD=0x01;  //方式1,16位定時計數(shù)器
  21. ET0=1;
  22. EX0=1;  //開外部中斷0
  23. EX1=1;
  24. TR0=1;
  25. IT0=1;    //外中斷方式為高電平
  26. IT1=1;
  27. //PX1=1;  //優(yōu)先級設置
  28. while(1);
  29. }
  30. void time0(void) interrupt 1
  31. {
  32.   OL=0;
  33.   TH0=(65536-a)/256;
  34.   TL0=(65536-a)%256;
  35. if(k<8) //左移
  36. { if(k==0)
  37. t=0x01;
  38. P1 = t;
  39. OL=1;
  40. t=(t<<1);
  41. }
  42. if(k>=8) //右移
  43. { if(k==8)
  44. t=0x80;
  45. t=(t>>1);
  46. P1 = t;
  47. OL=1;
  48. }
  49. k++;
  50. if(k==14)
  51. {
  52. k=0;//從頭開始
  53. TF0=0;
  54. } }
  55. void int0 (void) interrupt 0
  56. {
  57.   EX0=0;
  58.   a=1000000/(50+j);
  59.   j++;
  60.   EX0=1;
  61. }
  62. void int1(void) interrupt 2
  63. {
  64.   EX0=0;
  65.   a=1000000/(50-l);
  66.   l++;
  67. if(l==50)
  68. l=0;
  69. EX1=1;
  70. }

復制代碼

程序2:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. uchar a=0;
  6. sbit LED=P1^0;
  7. sbit key=P3^3;
  8. void delayms(uint ms)
  9. {
  10. uchar i;
  11. while(ms--)
  12.   {
  13.   for (i=0;i<114;i++)
  14.   ;
  15.   }
  16.   
  17. }
  18. void init()
  19. {
  20. TMOD=0x90;  //設置工作方式
  21. TH1=0;  //計數(shù)器T1高8位賦初值
  22. TL1=0;          //計數(shù)器T1低8位賦初值
  23. EA=1;
  24. ET1=1;  //開定時/計數(shù)器1
  25. // TR1=1;;  //啟動定時/計數(shù)器1
  26. }
  27. void main()
  28. {
  29.   while (key);  //等待低電平
  30.   while (!key);  //等待高電平
  31.   TR1=1;        //啟動T1
  32.   LED=1;        //燈亮
  33.   while (key); //等待低電平
  34.   TR1=0;         //停止定時/計數(shù)器T1
  35.   LED=0;        //燈滅
  36.   TH1=0;        //
  37.   TL1=0;         //計數(shù)清零
  38.   delayms(1000);  ////延時
  39. }
  40. void time1() interrupt 2    ///定時T1中斷子程序
  41. {
  42.   TH1=0;
  43.   TL1=0;
  44.   a++;           ///溢出后反向加1,直到加滿溢出后又返回加1
  45. }
復制代碼


回復

使用道具 舉報

ID:708367 發(fā)表于 2020-3-14 16:21 | 顯示全部樓層
圖怎么畫呀
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表