51单片机整理

原理图

参考:51单片机最小系统原理图、PCB及组成原理详解
在这里插入图片描述

视频教程

郭天祥十天学会51单片机教程 高清无鼠标点击声
Altium Designer系列教学视频【郭天祥】

笔记整理

引脚串口部分

/引脚串口部分

定时器的时间很精确,相比于delay函数要好很多

interrupt 0 外部中断0
interrupt 1 T0中断
interrupt 2 外部中断1
interrupt 3 T1中断
interrupt 4 串口中断

后面的using代表使用哪一组寄存器,但一般会自动分配
。。。。。。

单片机的中断处理是这样工作的,当有中断请求后(并且允许中断)CPU就跳转到特定的地址执行程序,在汇编语言中你可以直接跳到该地址,而在C语言中不是这样的,而是采用interrupt加序号的办法,每一个序号对应着一个中断向量地址,这样编程者就不需要了解中断向量的地址具体是多少

##############各个引脚用途###################

单片机的第二引脚功能,默认是普通IO口,除非对对应的寄存器进行设置,每一个端口都有对应的寄存器

优先中断

电平触发 跳变触发(下降沿)  默认电平触发方式  IT0  IT1

//中断 TCON IE IP

10 11 RXD串行输入口 TXD串行输出口,实现计算机和单片机的通信,单片机启动时才会发送握手信息   RI TI
·TI,发送中断标志位。在方式0时,当串行发送第8位数据结束时,或在其它方式,串行发送停止位的开始时,由内部硬件使TI置1,向CPU发中断申请。在中断服务程序中,必须用软件将其清0,取消此中断申请。
·RI,接收中断标志位。在方式0时,当串行接收第8位数据结束时,或在其它方式,串行接收停止位的中间时,由内部硬件使RI置1,向CPU发中断申请。也必须在中断服务程序中,用软件将其清0,取消此中断申请。

12 13 INT0 INT1外部中断01   对应中断标志为IE0 IE1   对应程序标志EX0 EX1


14 15 T0 T1 外部输入定时功能  
  (ET0 ET1 代表定时器中断,这样才能不断循环)
(中断:对应中断标志为TF0 TF1   程序对应触发方式IT0 IT1 )
(定时:TMOD TCON TH0 TL0 TH1 TL1)
(TR0 TR1代表定时器置位,启动;TF0,TF1用来判断是否中断,即是否定时完成,TF为1时视为中断
TF的好处是可以不用interrupt中断函数而直接在主函数中判断定时器是否中断)
模式0819213位)(/32)
模式165536(即16位定时器)(/256)
模式2256(自动重装载模式,波特率发生器必须是这个模式)(/1)
模式3256(该模式用处不大,将定时器分成两个8位定时器)
TOMD=0x01;16进制赋值0x011都是一样的,都代表定时器0方式1


定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。
TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;低四位用于T0,高四位用于T1
TCON是控制寄存器,控制TO、T1的启动和停止及设置溢出标志。TR0 TR1

16 17 RD WR 分别对应外部数据存储器的读控制和写控制

18 19 XTAL1 XTAL2晶振输入端

9 RST接复位电路,其中电容隔直通交,按下复位键时,利用分压,RST端有了5V电压,上电后自动复位,12MHZ左右晶振对应30PF电容

29 PSEN一般不用

30 ALE(输出六分之一周期的时钟脉冲方波,可以用来检测单片机是否工作)/PROG(program,编程端)

EA 内部外部存储器,一般接高电平就行了,接低就接外部    总中断控制


#########中断允许寄存器ie,各位名称是什么,各代表含义#########
各位的名称和含义:

EX0:外部中断0允许位。EX0=1,允许外部中断0中断;EX0=0,禁止外部中断0中断。

ET0:T0溢出中断允许位。ET0=1,允许T0中断;ET0=0,禁止T0中断。

EX1:外部中断1允许位。EX1=1,允许外部中断1中断;EX1=0,禁止外部中断1中断。

ET1:T1溢出中断允许位。ET1=1,允许T1中断;ET1=0,禁止T1中断。

ES:串行中断允许位。ES=1,允许串行口中断;ES=0,禁止串行口中断。

EA:中断总允许位。EA=1,CPU开放中断;EA=0,CPU禁止所有的中断请求。总允许EA好比一个总开关。

在这里插入图片描述

代码部分

/代码部分

#include<uart.h>		//包含51单片机串口设置
#include <reg51.h>               //包含51单片机基本设置
#include<intrins.h>         //包含移位部分


#c++内部需要用分号,和Python有很大区别
#宏定义,即是一个简单的字符串替换,而这里P2_3必须是已经定义好的,而头文件包含51单片机的基本定义和设置只对部分IO口有定义,所以还是sbit好一些
#
#define LeftIR  	    P2_3   //左边红外接收连接到P2_3

typedef unsigned char BYTE;	//用BYTE代替unsigned char 

#定义IO口
sbit led0=P1^0;

//中断函数中药恢复初值,不然就是从65536开始计时,会出错
//中断函数这里并不是计数,而是恢复初值,让main里面继续计数

_crol_和_cror_其实就是左右循环代码,需要#include<intrins.h>,内部两个参数,第2个是移位的个数
intrins.h内部函数

(答1)_crol_ 字符循环左移回

(2)_cror_ 字符循环右移

(3)_irol_ 整数循环左移

(4)_iror_ 整数循环右移

(5)_lrol_ 长整数循环左移

(6)_lror_ 长整数循环右移

(7)_nop_ 空操作 (相当于8051 NOP 指令)

(8)_testbit_ 测试并清零位 (相当于8051 JBC 指令)

硬件实例部分

/硬件实例部分

数码管存在位选和段选,是两个锁存器,位选关闭后,上面的数无法改变;段选类似。两个地方都要设置
(位选打开,设置位选,位选关闭;段选打开,设置段选,段选关闭。设置都是P0口等等)
(但这是针对段选和位选都只有一个输入口)
(有些数码管段选位选可以同时设置)


TCP协议,先插上esp8266实现无线网络的热点通信,拔掉之后再插上51单片机的烧录,即可实现控制,或者利用手机的调试助手也可以实现

通过输出PWM波的占空比控制电机转速,同时需要升压驱动,
其中一种方法:一端是利用三极管组合电路驱动,另一端通过INT时钟控制端形成占空比可调的PWM波,通过中断函数interrupt 0按一下按钮占空比加1
当然PWM波也可以用延时函数实现,就是延时后后翻转电平即可,

例如对于方波信号,你起初可以用延时函数来实现:bell=1;   delay(m);bell=0;delay(n);也可以用定时实现,比如定时100秒,前30秒不输出,后70秒输出,则占空比70%,但是该方法并不精确,利用单片机的定时器更好。
同时对于不同频率的变换,只需要翻转电平实现,对于翻转周期要算好

单次delay只能改变周期而无法调整占空比

usb口用pl2303还得焊接,还是用转ttl模块好一些,针对单片机的直插式烧录

PCB中2.54mm很重要,代表100mil,即100毫英寸


针对于直流电机,
参考:
https://baijiahao.baidu.com/s?id=1608784130799418152&wfr=spider&for=pc
https://blog.csdn.net/Xiaomo_haa/article/details/84189798?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1

对于普通的直流电机,只要在电机的两根线上接上电源电机就转动,导线反接后,电机就发转。
如果,电机两端的电压为额定电压,则电机满速运转,如果电压为额定电压的一半,则电机以一般的速度运转。
所以电机调速的手段就是更变电机两端的电压,而通常的做法就是通过PWM来实现电机调速。

可以用L298N进行驱动,若要实现调速,输入PWM脉冲占空比即可,
而且单片机的数字量输出为固定电平也难以改变电压值,所以此时不能通过改变电压值之类的方法改变其转速。
但是可以利用多个管脚个数字量输出转化成模拟量,即进行DA转换也可以实现
(参考:https://www.cnblogs.com/hughdong/p/6897460.html)

当然也可以直接用arduino实现,但是定时功能没想那么多

针对LCD1602:
参考:
https://blog.csdn.net/wait_for_taht_day5/article/details/50609293

继电器:通过小电流控制大电流。继电器就相当于一个控制大功率电器的开关(只要电器的额定电压电流在继电器的控制范围内),比如你可以把家用照明灯的开关线连接到继电器,然后用单片机程序控制照明灯的开关

51单片机的IO口每个引脚的电流驱动能力比较弱:不足以直接驱动蜂鸣器,但是arduino每个引脚的电流驱动不超过40ma远超51,可以直接驱动蜂鸣器


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值