8分钟让你学会Markdown
第一章、51单片机学习总结
1.GPIO口
1.1 GPIO口的电路结构及大致工作结构图
工作结构图
1.2为什么要设置IO口的输出/输入模式
(1) 正确读取信号;
(2)控制外部设备;
(3)节省功耗;
(4)信号稳定性;
1.3.有几种输入模式
(1)高阻输入模式
(2)浮空输入模式
(3)上拉输入模式
(4)下拉输入模式
(5)模拟输入模式
(6)开漏输入模式
1.4.有几种输出模式
(1)推挽输出模式
(2)开漏输出模式
(3)复用模式
2 定时器和中断
2.1 定时器中计数器起始计数个数计算
我现在需要获得一个输出频率为2000~4000HZ的输出PWM波形;以输出4000Hz为例
那么我需要的波形输出周期就是1/4000=0.00025s=250us;
也就是说每到250us产生一个PWM中断;
那么计数器要记多少次数才能产生这个250us?
计数器产生一个计数需要花费的时间是;
如果一个计数32us,需要计数7个;
那么就要从65527开始计数;‘
怎么分配这个数给高八位和低八位的计数器?
TH0=65527/256;
TL0=65527%256;
2.2 定时器的电路模块
定时器的工作模式由相关的寄存器位来控制,STC89C51的TIMER0有4种工作模式:
工作模式0:
工作模式1:
工作模式2:
工作模式3:
本文以工作模式1为例:
2.3 定时器相关的寄存器
2.3.1 定时器模式寄存器
M0和M1来决定模式
不可位寻址
与或是赋值法‘
2.3.2 时钟部分
C/T决定是时钟来源
2.3.3 计数部分
TH0;高8位;
TL0:低八位
低8位溢出向高八位进位
2.3.4 中断部分
1.中断和定时器0关联电路
2.相关寄存器
1.开中断
2.中断标志位
在这里插入图片描述
TF0初始值为0;
2.4、定时器消抖原理
1、判断按键是否按下,
2、若检测到有按键按下,则开启定时器,开启定时中断,定时时间为10ms 左右,使得按键按下10ms后进入定时中断,进入中断的时候按键抖动时间已过
3、在定时器中断中再次判断按键是否按下
4、关闭定时器,等待按键松开
#include <reg51.h>
sbit key=P3^2; //定义key为P1.0
sbit led=P2^0; //定义LED为P2.0
void main(void)
{
TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。
TH0=(65536-10000)/256; //给定时器赋初值,定时10ms
TL0=(65536-10000)%256;
ET0=1;//打开定时器0中断允许
TR0=0;//关闭定时器
IT0=1;//跳变沿出发方式(下降沿)
EX0=1;//打开INT0的中断允许。
EA=1;//打开总中断
while(