51单片机记录

电平特性
(本课程中)定义单片机为TTL电平
高+5V 低 0V
RS232电平:计算机串口
高-12V 低+12V
※掌握二进制转16进制
二进制数的逻辑运算
“与”运算是实现“必须都有,否则就没有”运算符“·”—“&”有0则0
例:0·0=0;0·1=1·0=0;1·1=1
规律:两数相同是1,反之0;
"或"是实现“只要其中之一有,就是有”+“ 有1则1
例:0+0=0; 0+1=1+0=1; 1+1=1
规律:两数有1结果1,反之0;
”非“是实现"求反"这种逻辑运算符号变量A—"A"上有横线
例子:!1=0 !0=1
规律:前1后0,前0后1(反着来)
”异或“运算时实现”必须不用,否则就没有“,符号-”⊕“
例子:0⊕0=0;0⊕1=1;1⊕0=1;1⊕1=0
规律:两数相同0,不同1

|= 运算:
int a = 5; // 0000 0101
int b = 3; // 0000 0011
a |= b; // 0000 00111 // a = a | b 只要一竖行有1 结果就是1

例: 0000 0101
0000 0011
=0000 0111
}

80C51是MCS-51-----STC 89 C 52 RC40C-PDIP0721CV4336

STC:公司
89:系列民
c:CMS
52:系列名(51,54,55) 2(在乘4k)表示内部储存空间=8k
40:表示运行速度40HZ
C:表示商业级(工作温度不同)
PDIP:封制格式
0721:07年21周(生产日期)
80C51的引脚
总线型P:P1.0P1.7P3.0P3.7
非总线型:P1 P3
C-51
sft:特殊功能寄存器声明
sft16:sfr的16位数据声明
sbit:特殊功能声明
bit:位变量声明
例子;
sfr SCON=0X98;
sfr16 T2=0xCC;
sbit OV=PSW^2;
C语言
头文件:reg51.h,reg52.h,math.h,ctype.h,stdio.h,stdlib.h,absacc.h
常用有:reg51.h,reg52.h—(定义特殊功能寄存器和位寄存器)
数学运算:math.h
单片机最小系统运行条件
1.电源 2.晶振 3.复位电路
对单片机任意IO口随意操作
1.输出控制电平高低 2.输出检测电平高低
定时器:重点掌握最常用的方式2
中断:外部中断,定时器中断,串口中断
串口通信:单片机之间,单片机与计算机间

电路延时

//定义一个变量
unsigned int a;
void main(){
a=50000;
P1_1=0;
//延时,到a=0
while(a–);
a=5000;
p1_1=1;
//延时,到a=0
while(a–)
}
流水灯:crol(改变变量,向左移步幅)----intrins.h
010101 变成 101010 (步幅1)

引脚
RST引脚:复位引脚–高电平有效。加上大于两个机器周期----复位操作(指针到0)。一般加0.5V低电平。备用电源(Vpd)–加备用电源
TXD引脚

常用函数

//头文件
#include <reg52.h>
#include <intrins.h> //机器周期_nop_()
#define GUI_P0 P0

//位定义
sbit LED1=P1^0;
sbit LED2=P1^1;
sbit LED3=P1^2;
sbit LED4=P1^3;
sbit LED5=P1^4;
sbit LED6=P1^5;
sbit LED7=P1^6;
sbit LED8=P1^7;

//延时
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;

void ys(u16 i)
{
while(i–);
}

流水灯:

方法1:
流水灯:crol(改变变量,向左移步幅)----intrins.h
010101 变成 101010 (步幅1)
方法2:
LED=(0x01<<i) 二进制左移

静态晶体管

u8 code smgduan []={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//code 是 放在程序储存区
动态晶体管
void DigDisplay()
{
u8 i;
for(i=0;i<8;i++)
{
switch(i) //位选,选择点亮的数码管,
{
case(0):
LSA=0;LSB=0;LSC=0; break;//显示第0位
case(1):
LSA=1;LSB=0;LSC=0; break;//显示第1位
case(2):
LSA=0;LSB=1;LSC=0; break;//显示第2位
case(3):
LSA=1;LSB=1;LSC=0; break;//显示第3位
case(4):
LSA=0;LSB=0;LSC=1; break;//显示第4位
case(5):
LSA=1;LSB=0;LSC=1; break;//显示第5位
case(6):
LSA=0;LSB=1;LSC=1; break;//显示第6位
case(7):
LSA=1;LSB=1;LSC=1; break;//显示第7位
}
P0=smgduan[i];//发送段码
delay(100); //间隔一段时间扫描
P0=0x00;//消隐
}
}
二进制— ※注意 二进制是从右向左的(如果是第一个0xfe是第一个引脚为低电平)
0xfe //11111110
0xdf //11111101
0xfb //11111011
0xf7 //11110111
0xef //11101111
0xdf //11011111
0xbf //10111111
0x7f //01111111

74HC165芯片

位定义
sbit PIN_PL_SH_P16=P1^0; // SH/LD
sbit PIN_Date_QH_P17=P1^1; // QH 数据输出
sbit PIN_CLK_P36=P1^2; // 时钟拐角

LD引脚为低电平时,A-H置入寄存器,LD为高电平时,置数功能被禁止。
CLK有一个为低电平并且SH为高电平,另一个时钟可以输入。
CLK有一个为低电平并且SH为低电平,另一个时钟禁止。
步骤:
{
(1)SH输入低电平 LD=0;
(2)置入A-H位,延时一个周期
(3)SH输入高电平
(4)延时一个周期
}
循环读发来的数据 8次{ —一个时钟低电平(收数据)高电平(停止)
(5)时钟低电平
(6)延时一个周期
(7)QH传入一位与上一位组成一个十六进制 |=
(8)时钟高电平
}
74H595芯片

位定义
sbit STCP_SRC_P10=P1^0; //STCP(12)RCLK----存储寄存器(12)
sbit SHCP_SC_P11=P1^1; //SHCP(11)----------移位寄存器(11)
sbit DS_SE_P12=P1^2; //DS(14)------------串口输入(14)

当 MR 为高电平,OE 为低电平时,数据在 SHCP 上升沿进入移位寄存器,在STCP 上升沿输出到并行端口。
数据的移位:
{
循环8次i
SE_DS=date>>7 //最低位到最高位 1010 1010 --右移-- 0000 0001
date=date<<1 //保证下次Date去掉一位
SHCP=0; //低电平
nop();
nop(); //机器周期
SHCP=1; //上升沿 1位数据进入移位寄存器
跳出循环
STCP=0; //低电平,放到存储器(数据到并口)
nop();
nop(); //机器周期
STCP=1; //数据由寄存器传入并行端口
}
中断系统
中断源
/INT0 (IE0) 0003H 外部中断0 P3.2引脚低电平或下降沿信号 0 高
T0 (TF0) 000BH 定时器0中断 定时/计数器0计数回溢出 1 |
/INT1 (IE1) 0013H 外部中断1 P3.3引脚低电平或下降沿信号 2 |
T1 (TF1) 001BH 定时器1中断 定时/计数器1计数回0溢出 3 |
TI,RI (RI和TI)0023H 串口完成一帧数据发送或接收引起的中断 4 低

中断相应条件
中断院有中断请求
此中断源的中断允许位为1;
CPU开中断(即EA=1)
以上三条同时满足,CPU才可能相应中断。  例:	void 函数名() interrupt 0 using 1
{}
解释  
void 函数名() interrupt 0(中断号) using 1(using 1 可省略)

配置
IT0的配置
void open_ZD_PIN(){
//配置INT0
IT0=1; //触发方式(下降沿)
EX0=1;//是否允许中断
EA=1;//打开总中断
}
IT1的配置
void open_ZD_PIN(){
//配置INT1
IT1=1; //触发方式(下降沿)
EX1=1;//是否允许中断
EA=1;//打开总中断

}

CPU时序有关知识
震荡周期(1/12us):单片机提供定时信号的震荡源的周期—12MHZ晶振 震荡周期=12 的 倒数
状态周期(1/6us):2个振荡周期为1个状态周期,用S表示。震荡周期又称S周期或时钟周期
机器周期(1us):1个机器周期含6个状态周期,12个震荡周期。
指令周期(1~4us):完成1条指令所占用的全部时间,它以机器周期为单位

1个机器周期(1us--1微秒)=6个状态周期=12个震荡周期
定时器/计数器0计数回溢出时:计数器值-计数初始值=计数值TCON--控制寄存器控制T0,T1的启动和停止设置溢出标志
GATE--门控位,GATE=0
C/T--模式选择:为0时为定时模式,为1时为计数模式
TMOD--工作方式寄存器(工作方式和功能)
初值计算:X=65536-N  使用定时器,该做哪些工作
1.对TMOD赋值,以确定T0和T1的工作方式
2.计算器初值,并将其写入TH0,TL0或TH1,TL1
3.中断方式时,对EA赋值,开放定时器中断
4.使TR0或TR1置为,启动定时/计数器定时或计数

TMOD配置
89H寄存器 低四位 T0; 高四位 T1

CATE:门控位
GATE=0 (软控TR0或TR1为1,可)※
GATE=1 (软控TR0或TR1为1,且INT0/1为高电平,可)C/T:定时/计数器模式选择位
C/T=0为定时模式※  C/T=1为计数模式
M1 和 M0 位
00  方式0  13位定时/计数器
01  方式1  16位定时/计数器  	※
10  方式2  8自动重装位定时/计数器
11  方式3  T0分成两个独立的8位定时/计数器,T1方式停止计数
常用配置:TMOD|=0x01	(或运算,不影响其他位)TH0 TL0 位
初值计算:X=65536-N  
例子:x=65536-1000(1s)=64536=0xfc18
分解为4位2对 8个
TH0=0xfc
TL0=0x18

计时器配置
定时器1(中断编号1):
{
TMOD|=0x01; //T0和T1的工作方式(方式1)
TH0=0XFC; //延时1秒
TL0=0X18; //延时1秒 1s=0xfc18
ET0=1; //打开定时器中断开关
EA=1; //总中断
TR0=1; //打开定时器
}
定时器2(中断编号3):
{
TMOD|=0x01; //T0和T1的工作方式(方式1)
TH1=0XFC; //延时1秒
TL1=0X18; //延时1秒 1s=0xfc18
ET1=1; //打开定时器中断开关
EA=1; //总中断
TR1=1; //打开定时器
}
串口通信
设置串口
void UsartInit()
{
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //计数器初始值设置,注意波特率是4800的
TL1=0XF3;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}
串口中断: 传入:1.SBUF传入变量 2.清空RI=0接受中断
传出:1.变量传入SBUF 2.等待while(!TI)数据发送完成 3.清除TI=0发送完成标志位
void Usart() interrupt 4
{
u8 receiveData; //数据寄存
receiveData=SBUF; //出去接收到的数据
RI = 0; //清除接收中断标志位
SBUF=receiveData; //将接收到的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
}

RS485通信: 1.A→A B→B
2.DIR端口位定义://RS485DIR=0为接收状态 RS485DIR=1为发送状态
void Usart() interrupt 4
{
u8 receiveData;
receiveData=SBUF; //出去接收到的数据
RI = 0; //清除接收中断标志位
delay(100); //保证接受数据完整
RS485DIR=1; //端口置1;进入发送数据
SBUF=receiveData; //将接收到的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
RS485DIR=0; //端口置0;进入接受数据
}
I^2C串行总线
I^2C总线,单中线,SPI 等待while
I^2C总线进行数据传递时,
时钟信号位高电平期间,数据线上的数据必须保持稳定
时钟信号位低电平期间,高低电平允许变化

a,主机向从机发送数据,数据方向在整个过程中不变
A表示应答	A非表示非应答(高电平)	S表示起始信号	P表示终止信号
S(→)	从机地址(→)  0(→)	A(←)	数据(→)  A(←)	数据(→)   A/A(←)	P(→)
A表示应答	A非表示非应答(高电平),S表示起信号,P表示终止信号I^2C总线协议,采用7位寻址字节(寻址字节是起始信号的后一个字节)
1.寻址字节的位定义7	6	5	4	3	2	1	0←--------从机地址-------→	R/WD7-D1 从机地址	D0 是数据传输方向(0:主 向 从写数据,1:主 向 从读数据)void ZD_DSQ() interrupt 1
{TH0=0X0D8;  //延时1秒  TL0=0X0F0;  //延时1秒  1s=0xfc18  count++;  if(count<40)LED=1;else LED=0;if(count=100)count=0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/457223.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode_231. 2 的幂_java

1、题目 231. 2 的幂https://leetcode.cn/problems/power-of-two/ 给你一个整数 n&#xff0c;请你判断该整数是否是 2 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果存在一个整数 x 使得 n &#xff0c;则认为 n 是 2 的幂次方…

ComfyUI初体验

ComfyUI 我就不过多介绍了&#xff0c;安装和基础使用可以看下面大佬的视频&#xff0c;感觉自己靠图文描述的效果不一定好&#xff0c;大家看视频比较方便。 ComfyUI全球爆红&#xff0c;AI绘画进入“工作流时代”&#xff1f;做最好懂的Comfy UI入门教程&#xff1a;Stable D…

ArcGIS001:ArcGIS10.2安装教程

摘要&#xff1a;本文详细介绍arcgis10.2的安装、破解、汉化过程。 一、软件下载 安装包链接&#xff1a;https://pan.baidu.com/s/1T3UJ7t_ELZ73TH2wGOcfpg?pwd08zk 提取码&#xff1a;08zk 二、安装NET Framework 3.5 双击打开控制面板&#xff0c;点击【卸载程序】&…

dbt-codegen: dbt自动生成模板代码

dbt项目采用工程化思维&#xff0c;数据模型分层实现&#xff0c;支持描述模型文档和测试&#xff0c;非常适合大型数据工程项目。但也需要用户编写大量yaml描述文件&#xff0c;这个过程非常容易出错且无聊。主要表现&#xff1a; 手工为dbt模型编写yaml文件&#xff0c;这过…

STM32传感器模块编程实践(十一) ADC模数转换模块ADS1115简介及驱动源码

文章目录 一.概要二.ADS1115芯片介绍三.ADS1115芯片主要特性四.ADS1115模块接线说明五.ADS1115参考原理图六.通讯协议介绍七.STM32单片机与ADS1115模块实现电压采集实验1.硬件准备2.软件工程3.软件主要代码4.实验效果 八.源代码工程下载九.小结 一.概要 ADC&#xff0c;全称为…

认识和使用 Vite 环境变量配置,优化定制化开发体验

Vite 官方中文文档&#xff1a;https://cn.vitejs.dev/ 环境变量 Vite 内置的环境变量如下&#xff1a; {"MODE": "development", // 应用的运行环境"BASE_URL": "/", // 部署应用时使用的 URL 前缀"PROD": false, //应用…

JavaScript完整笔记

JS引入 JavaScript 程序不能独立运行&#xff0c;它需要被嵌入 HTML 中&#xff0c;然后浏览器才能执行 JavaScript 代码。 通过 script 标签将 JavaScript 代码引入到 HTML 中&#xff0c;有两种方式&#xff1a; 内部方式 通过 script 标签包裹 JavaScript 代码 我们将 &…

使用FRP搭建内网穿透服务(新版toml配置文件,搭配反向代理方便内网网站访问)【使用frp搭建内网穿透】

FRP&#xff08;Fast Reverse Proxy&#xff09;是一个高性能的反向代理应用程序&#xff0c;主要用于内网穿透。它允许用户将内部网络服务暴露到外部网络&#xff0c;适用于 NAT 或防火墙环境下的服务访问。 他是一个开源的 服务 如果大家不想用 花生壳 软件&#xff0c;可以尝…

卷积神经网络评价指标

1.评价指标的作用 1. 性能评估&#xff1a;评价指标提供了一种量化的方式来衡量CNN模型的性能。通过这些指标&#xff0c;我们可以了解模型在特定任务上的表现&#xff0c;比如图像分类、目标检测或图像分割等。 2. 模型比较&#xff1a;不同的模型架构或训练策略可能会产生不…

基于SSM考研助手系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;教学秘书管理&#xff0c;考研资讯管理&#xff0c;考研名师管理&#xff0c;考研信息管理&#xff0c;系统管理 教学秘书账号功能包括&#xff1a;系统首页&#xff0c;个人中心…

如何快速解决游戏提示系统中的emp.dll缺失问题

emp.dll是一个动态链接库&#xff08;Dynamic Link Library, DLL&#xff09;文件&#xff0c;这类文件在Windows操作系统中扮演着至关重要的角色。它们包含了可由多个程序同时使用的代码和数据&#xff0c;其主要目的是实现模块化&#xff0c;以便于程序的更新和动态链接。emp…

es实现自动补全

目录 自动补全 拼音分词器 安装拼音分词器 第一步&#xff1a;下载zip包&#xff0c;并解压缩 第二步&#xff1a;去docker找到es-plugins数据卷挂载的位置&#xff0c;并进入这个目录 第三步&#xff1a;把拼音分词器的安装包拖到这个目录下 第四步&#xff1a;重启es 第…

RV1126音视频学习(二)-----VI模块

文章目录 前言2.RV1126的视频输入vi模块2.1什么是VI模块2.3RV1126VI模块主要APIRK_MPI_SYS_Init()RK_MPI_VI_SetChnAttrRK_MPI_VI_EnableChnRK_S32 RK_MPI_VI_DisableChnRK_MPI_VI_StartStreamRK_MPI_SYS_GetMediaBufferRK_MPI_MB_GetPtrRK_MPI_MB_GetSizeRK_MPI_MB_ReleaseBuf…

【NOIP提高组】加分二叉树

【NOIP提高组】加分二叉树 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 设一个n个节点的二叉树tree的中序遍历为&#xff08;l,2,3,…,n&#xff09;&#xff0c;其中数字1,2,3,…,n为节点编号。每个节点都有一个分数&#xff08;均为正整…

读《认知觉醒》:浅谈费曼技巧

最近在阅读《认知觉醒》这本书&#xff0c;封面如下&#xff1a; 读到了里面对于费曼技巧的介绍&#xff08;在第八章&#xff09;&#xff0c;感觉受到了一些启发&#xff0c;在这里分享给大家。 其实之前很早就接触过了费曼技巧&#xff0c;但是并没有很好的应用起来&#x…

零代码快速开发智能体 |甘肃旅游通

零代码快速开发智能体 &#xff5c;甘肃旅游通 本文仅用于文心智能体的活动征文 参与人&#xff1a;mengbei_admin 文心智能体平台是人工智能领域的佼佼者。它拥有强大的语言理解与生成能力&#xff0c;能精准回应各种问题&#xff0c;出色完成文本创作、知识问答和翻译等任…

线性表之双向链表

链表花里胡哨&#xff0c;一应俱全 前言 在这之前&#xff0c;我们已经学习了单链表。我们发现这些链表都是一个接一个朝一个方向接下去&#xff0c;有时&#xff0c;我们想要查找某个结点的时候还得从头开始遍历查找&#xff0c;尽管我们已经学习了顺序表&#xff0c;查找某个…

免费PDF页面提取小工具

下载地址 https://download.csdn.net/download/woshichenpi/89922797 使用说明&#xff1a;PDF页面提取工具 1. 启动应用程序 双击程序的启动图标或者通过命令行运行程序。 2. 选择PDF文件 在应用程序窗口中找到“选择PDF”按钮并点击它。在弹出的文件选择对话框中&#x…

Windows server 2003服务器的安装

Windows server 2003服务器的安装 安装前的准备&#xff1a; 1.镜像SN序列号 图1-1 Windows server 2003的安装包非常人性化 2.指定一个安装位置 图1-2 选择好安装位置 3.启动虚拟机打开安装向导 图1-3 打开VMware17安装向导 图1-4 给虚拟光驱插入光盘镜像 图1-5 输入SN并…

Linux系统安装Redis详细操作步骤(二进制发布包安装方式)

安装方式介绍 在Linux系统中&#xff0c;安装软件的方式主要有四种&#xff0c;这四种安装方式的特点如下&#xff1a; 安装方式特点二进制发布包安装软件已经针对具体平台编译打包发布&#xff0c;只要解压&#xff0c;修改配置即可rpm安装软件已经按照redhat的包管理规范进…