免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1281 | 回复: 0

AT59C52简单中断 [复制链接]

论坛徽章:
0
发表于 2011-12-23 01:27 |显示全部楼层
定时器:

  1. /*
  2. 定时器每个机器周期加1,机器周期是晶振的12倍.
  3. 初始化定时器中断。对TMOD赋值,确定T0,T1的工作方式
  4. 计算初值,将其写入TH0,TL0,TH1,TL1
  5. 开中断,对IE赋值,开放中断。
  6. 使TR0,TR1,置位,启动定时器定时或计数。
  7. sbit EA = IE^7;
  8. sbit ET2 = IE^5; //8052 only
  9. sbit ES = IE^4;
  10. sbit ET1 = IE^3;
  11. sbit EX1 = IE^2;
  12. sbit ET0 = IE^1;
  13. sbit EX0 = IE^0;
  14. TMOD用于设置timer的状态,高4位timer1,低4位timer0
  15. 控制寄存器TCON,高4位设置timer,低4位设置外部中断
  16. sbit TF1 = TCON^7;
  17. sbit TR1 = TCON^6;
  18. sbit TF0 = TCON^5;
  19. sbit TR0 = TCON^4;
  20. sbit IE1 = TCON^3;
  21. sbit IT1 = TCON^2;
  22. sbit IE0 = TCON^1;
  23. sbit IT0 = TCON^0;
  24. */
  25. #include <REG52.h>

  26. unsigned char code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

  27. unsigned char count=0;


  28. void time0_init()
  29. {
  30.     TMOD = 0x01;//gate0 c\t mode1 mode0 形成0 1 2 3 选择1为16位
  31.     TH0=0x4C;
  32.     TL0=0x00;//50ms
  33.     IE=1<<7|1<<1;//设置相应位为1//其中第7位为未定义
  34.     TCON=1<<4;
  35. }

  36. void add() interrupt 1//分别为,外部0定时器0外部1定时器1
  37. {
  38.     TH0=0X4C;
  39.     TL0=0X00;
  40.     count ++;    
  41. }

  42. void main()
  43. {
  44.     unsigned char i=0;
  45.     time0_init();
  46.     P2=0X04;//选着哪个数码管,从左边数第4个
  47.     while(1)
  48.     {
  49.         P0=table[i%10];
  50.         while(1)
  51.         {
  52.             if(count==20)
  53.             {
  54.                 count =0;
  55.                 i++;
  56.                 break;
  57.             }
  58.         }
  59.         
  60.     }
  61. }

外部中断:

  1. #include <REG52.h>

  2. sbit key_1=P3^2;
  3. sbit key_2=P3^3;
  4. //num为1延迟1ms,软件防抖延迟20ms
  5. void Delay(unsigned int num)
  6. {
  7.     unsigned int i,j;
  8.     for(i=0;i<num;i++)
  9.         for(j=0;j<1827;j++)
  10.             ;
  11. }

  12. void interrupt_init()
  13. {
  14.     IE=1<<7|1|1<<2;//第1,3,8位为1
  15.     TCON=1|1<<2;//第1,3位为1,负边沿触发
  16. }

  17. void out1() interrupt 0 using 1
  18. {
  19.     Delay(2);//延迟20ms
  20.     if(key_1==0);
  21.     {
  22.         P0=0xf0;
  23.     }
  24. }

  25. void out2() interrupt 2 using 1
  26. {
  27.     Delay(2);
  28.     if(key_2==0);
  29.     {
  30.         P0=0x0f;
  31.     }
  32. }

  33. int main()
  34. {
  35.     interrupt_init();
  36.     while(1)
  37.     ;
  38. }

定时器中断时候,需要处理TMOD设置相关方式,TCON设置TR为1,允许计时,IE中设置EA和ET
外部中断时候,需要设置TCON中的IT为相应位,设置中断触发方式,TCON中的IE0和IE1是中断请求标志,由硬件置1和0
然后设置IE中的EA和EX
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP