矩阵键盘
代码
1 | /* |

定时器
工作方式
interrupt0,13位,当 INT0 引脚由高电平变为低电平时触发中断。
- $X=8192-N\frac{12}{fosc}$
- 上次计数为0,要重复计数需要置零
interrupt1,16位,当定时器 0 计数器溢出时触发中断。
- $X=65536-N\frac{12}{fosc}$
- 上次计数值为0,要重复计数需要重置初值
interrupt2,8位自动重置定时/计数器,当 INT1引脚由高电平变为低电平时触发中断。
interrupt3,8位,只有T0才能使用,当定时器 1 计数器溢出时触发中断。
- $X=256-N\frac{12}{fosc}$
- 计数器自动配置初值,不需要用户重置
interrupt4,串口中断,当串口接收完成(RI)或发送完成(TI)时触发中断。
TMOD 寄存器
TMOD 的低 4 位控制定时器 0,高 4 位控制定时器 1,每个定时器都有两个工作模式可以选择
M0表示定时器0,M1表示定时器1
TMOD=0x20表示定时器1设置为2模式
TMOD=0x02表示定时器0设置为2模式
| TMOD | GATE | C/T | M1 | M0 | 工作模式 |
|---|---|---|---|---|---|
| 0x00 | 0 | 0 | 0 | 0 | 模式 0:13 位计数器 |
| 0x01 | 0 | 0 | 0 | 1 | 模式 1:16 位计数器 |
| 0x02 | 0 | 0 | 1 | 0 | 模式 2:8 位自动重装载计数器 |
| 0x03 | 0 | 0 | 1 | 1 | 模式 3:16 位自动重装载计数器 |
| 0x04 | 0 | 1 | 0 | 0 | 模式 4:外部事件计数 |
| 0x05 | 0 | 1 | 0 | 1 | 模式 5:保留 |
| 0x06 | 0 | 1 | 1 | 0 | 模式 6:8 位 PWM 波形发生器 |
| 0x07 | 0 | 1 | 1 | 1 | 模式 7:16 位 PWM 波形发生器 |
TH和TL寄存器
TH0/TL0表示定时器0的高低八位TH1/TL1表示定时器1的高低八位
IT寄存器
IT0,外部中断寄存器IT1,外部中断寄存器IT0/IT1=0,低电平触发IT0/IT1=1,下降沿触发
中断寄存器
ET0/ET1,定时器中断使能寄存器,为1中断允许,为0不允许EA,总中断使能寄存器,为1中断允许,为0不允许TR0/TR1,定时器启动控制寄存器,为1时开始计数,为0时停止计数。
12MHz晶振对应的一个机器周期为1us,需要延时50ms,则从65536-50000开始计数,分为高低八位分别存储计数,当定时器0计数到65536溢出位时,触发timer_isr中断,执行函数。
1 | /* |

计数器
代码
1 | /* |
