Chinaunix首页 | 论坛 | 博客
  • 博客访问: 360868
  • 博文数量: 79
  • 博客积分: 1270
  • 博客等级: 中尉
  • 技术积分: 1370
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-12 08:48
个人简介

freedom~~~~~~~~~~

文章分类

全部博文(79)

文章存档

2014年(10)

2013年(2)

2012年(13)

2011年(54)

分类: 嵌入式

2011-10-03 10:37:03

定时器:

  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
阅读(1386) | 评论(0) | 转发(0) |
0

上一篇:矩阵按键

下一篇:AT89C52简单的串口操作

给主人留下些什么吧!~~