STC-STC89C51

第一章、51单片机学习总结

1.GPIO口

1.1 GPIO口的电路结构及大致工作结构图

工作结构图
8051IO和寄存器,CPU的关系

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(1)
	{

	}
}

/*定时器中断*/
void Timer0() interrupt 1
{
	TH0=(65536-10000)/256;	//给定时器赋初值,定时10ms
	TL0=(65536-10000)%256;	

	TR0=0;//关闭定时器
	if(key==0)	 //再次判断按键是否按下
	{	
		led=!led;  //控制led状态取反
	}
}
/*外部中断0*/
void Int0()	interrupt 0		//外部中断0的中断函数
{
	TR0=1;//打开定时器
}


3.中断系统

3.5 外部中断

3.5.1 电路结构

在这里插入图片描述

3.在这里插入图片描述

5.2 相关寄存器

3.触摸按键

4.串口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值