找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机定时中断范例 带仿真 程序 原理图

[复制链接]
跳转到指定楼层
楼主
定时中断范例

所有完整资料下载: 定时中断.rar (83.17 KB, 下载次数: 18)


仿真文件原理图:


程序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位定时计数器
  21. ET0=1;
  22. EX0=1;  //开外部中断0
  23. EX1=1;
  24. TR0=1;
  25. IT0=1;    //外中断方式为高电平
  26. IT1=1;
  27. //PX1=1;  //优先级设置
  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;  //计数器T1高8位赋初值
  22. TL1=0;          //计数器T1低8位赋初值
  23. EA=1;
  24. ET1=1;  //开定时/计数器1
  25. // TR1=1;;  //启动定时/计数器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;         //停止定时/计数器T1
  35.   LED=0;        //灯灭
  36.   TH1=0;        //
  37.   TL1=0;         //计数清零
  38.   delayms(1000);  ////延时
  39. }
  40. void time1() interrupt 2    ///定时T1中断子程序
  41. {
  42.   TH1=0;
  43.   TL1=0;
  44.   a++;           ///溢出后反向加1,直到加满溢出后又返回加1
  45. }
复制代码


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

使用道具 举报

沙发
ID:708367 发表于 2020-3-14 16:21 | 只看该作者
图怎么画呀
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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