[关闭]
@richey 2020-09-02T04:03:36.000000Z 字数 1982 阅读 1367

微型计算机技术应用讲义02-中断、定时器

单片机 讲义 中断 定时器

0.引言

1.MCS-51单片机的中断系统

2.定时器/计数器

image_1clt62nvmnh21pkj19bs1295ebd36.png-136.9kB
image_1clt653376c1pqccdbv2iaqk4j.png-131.6kB
image_1clt67l3110cnode1tmo10gt6iv60.png-64.8kB
image_1clt6c4lt1k24krpsto8071j6o9t.png-90.3kB

image_1clt6icsj18s014dv1od1fden92an.png-35.5kB
image_1clt6gp9d12j01n1sti6u8p1vq7aa.png-64kB

2.1控制寄存器

2.1.1 TMOD控制器寄存器

2.1.2 TCON控制器寄存器

2.2 定时器的工作方式

2.2.1 方式1:16为定时器/计数器方式

image_1clv054srvp31db3qvi1fv318pr16.png-205.8kB

2.2.2 方式2:8位自动重装方式

image_1clv07gk6191oo08184tkif91123.png-208.9kB

2.2.3 初值计算方法

2.2.4 定时器例子1:16位定时器应用

Created with Raphaël 2.1.2定时器0中断入口重装TH0、TL0秒计数器 counter++;counter > 20?counter := 0;bFlag := 1中断返回yesno
Created with Raphaël 2.1.2开始调用定时器初始化子程序 bFlag == 1?bFlag := 0;LED0 != LED0;yesno
Created with Raphaël 2.1.2开始设置TMOD工作方式TH0、TL0赋初值;开中断;启动定时器;返回
  1. #include <reg51.h>
  2. #include "common.h"
  3. #define FOSC 11059200ul
  4. #define T0_H (65536-(50*FOSC)/(12*1000))/256
  5. #define T0_L (65536-(50*FOSC)/(12*1000))%256
  6. uint8_t counter = 0;
  7. bit bFlag = 0;
  8. void initSys();
  9. sbit LED0 = P1^0;
  10. void main(){
  11. initSys();
  12. while(TRUE){
  13. if(bFlag){
  14. bFlag = 0;
  15. LED0 = !LED0;
  16. }
  17. }
  18. }
  19. void initSys(){
  20. TMOD = 0x01;
  21. TH0 = T0_H;
  22. TL0 = T0_L;
  23. EA = 1;
  24. ET0 = 1;
  25. TR0 = 1;
  26. }
  27. void timer0() interrupt 1 {
  28. TH0 = T0_H;
  29. TL0 = T0_L;
  30. if(++counter>20){
  31. counter = 0;
  32. bFlag = 1;
  33. }
  34. }

2.2.5 定时器例子2:8位定时器应用

  1. #include <reg51.h>
  2. #include "common.h"
  3. #define FOSC 11059200ul
  4. #define T1_H 256-(1*FOSC)/(12*10000)
  5. #define T1_L 256-(1*FOSC)/(12*10000)
  6. uint8_t counter = 0;
  7. bit bFlag = 0;
  8. void initSys();
  9. sbit LED0 = P1^0;
  10. void main(){
  11. initSys();
  12. while(TRUE){
  13. ;
  14. }
  15. }
  16. void initSys(){
  17. TMOD = 0x20;
  18. TH1 = T1_H;
  19. TL1 = T1_L;
  20. EA = 1;
  21. ET1 = 1;
  22. TR1 = 1;
  23. }
  24. void timer1() interrupt 3 {
  25. LED0 = !LED0;
  26. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注