单片机郭天祥(02)

news2024/11/16 9:50:31

1:解决keil5软件的乱码问题,修改编码为UTF-8
在这里插入图片描述在这里插入图片描述2:打开keil5使用debug对编写好的程序进行调试

在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述给程序打上断点
在这里插入图片描述
在这里插入图片描述使用仿真芯片

在这里插入图片描述更改设备管理器相关设置

在这里插入图片描述在这里插入图片描述接通电源后点击debug连接到51单片机

使用stc-isp获取延时函数
在这里插入图片描述将延时函数添加进入创建好的keil5软件,编译烧录进入51单片机板子实现led灯闪烁延迟
在这里插入图片描述单片机工作的基本时序**

单片机的工作时序可以分为以下几个阶段:

  1. 复位阶段:在上电或复位信号触发时,单片机会进入复位状态。在这个阶段,单片机的内部寄存器和状态会被初始化,以确保系统处于可控状态。
  2. 初始化阶段:完成复位后,单片机会执行初始化操作,包括配置系统时钟、设置I/O口的方向和初始状态、初始化中断等。这些初始化操作会根据具体的单片机型号和应用需求进行配置。
  3. 执行程序阶段:在初始化完成后,单片机会开始执行程序。程序可以是嵌入在单片机内部的固件程序,也可以是通过外部存储器(如闪存、EEPROM)加载的代码。单片机会根据程序计数器(PC)指向的地址,逐条指令地执行程序。
  4. 中断处理阶段:当发生中断事件时,单片机会中断当前的执行,转而执行相应的中断服务程序。中断服务程序会根据中断优先级和中断向量表指定的地址进行处理,并在处理完成后返回到原来的执行位置。
  5. 休眠/低功耗状态:单片机可以根据需要进入低功耗或休眠状态,以降低功耗和延长电池寿命。在这些状态下,单片机的时钟和外设可能会暂停或降低工作频率,以减少能耗。

需要注意的是,不同的单片机在时序和工作模式上可能会有差异,具体的时序要根据单片机型号和数据手册中的描述来确定。此外,单片机的工作时序还受到外部电路和外部信号的影响,例如外部晶振的稳定性和频率、外部输入/输出的响应时间等。

机器周期和指令周期

1:震荡周期,也称之为时钟周期,指的是为单片机提供时钟脉冲信号的震荡源的周期,TX实验板上为11.0592MHZ。

震荡周期是指单片机系统中的时钟震荡周期,通常用来衡量单片机内部操作的速度和时序。

在单片机系统中,通常会使用一个晶体振荡器或者其他时钟源来提供稳定的时钟信号。这个时钟信号会周期性地产生脉冲,驱动单片机内部的操作和数据传输。

震荡周期取决于时钟源的频率以及单片机的内部时钟分频设置。一般情况下,单片机的工作频率会在数MHz到数十MHz之间,对应的震荡周期则在几十纳秒到几微秒之间。

具体的震荡周期可以根据单片机的型号和时钟设置来计算或查阅相关的技术资料。一般来说,单片机的技术手册或者数据手册会提供时钟频率、时钟分频系数、指令周期等信息,通过这些参数可以计算出具体的震荡周期。

2:状态周期,每个状态周期为时钟周期的2倍,是震荡周期经过二分频后得到的。

状态周期是指在一个周期中,系统或者设备经历的不同状态的数量或者变化次数。

在系统或设备工作过程中,会存在多个状态,比如开关状态、运行状态、等待状态等。状态周期指的是系统从一个状态切换到下一个状态所经历的时间或者次数。

状态周期的长度取决于系统或设备的工作方式和设计。例如,在一个开关设备中,状态周期可能是开-关-开-关这样的循环,每个循环的长度就是一个状态周期。在一个周期内,设备从开到关再到开的过程中,经历了两个状态。

状态周期的长度对于系统的性能和正常运行非常重要。较短的状态周期意味着系统可以更快地响应变化,提高效率。而较长的状态周期可能导致系统响应慢,性能下降。

3:机器周期,一个机器周期包含6个状态周期S1-S6,也就是12个时钟周期,在一个机器周期内,CPU可以完后才能一个独立操作。

机器周期是计算机中一个基本的时间周期,它包括了一条指令的执行所需的所有步骤。每个机器周期的长度是固定的,由计算机的时钟频率决定。

机器周期通常包括以下几个步骤:

  1. 取指周期(Fetch):从内存中取出指令并存放到指令寄存器中。
  2. 译码周期(Decode):对取出的指令进行解码,确定指令的操作和操作数。
  3. 执行周期(Execute):根据指令的操作进行相应的操作,比如进行算术运算、逻辑运算、数据传输等。
  4. 存储周期(Memory Access):如果指令需要和内存进行交互,这个周期用于访问内存。
  5. 写回周期(Write Back):将执行结果写回到寄存器或内存。

这些步骤可能会因为不同的指令而有所差异,但通常每个机器周期都是由这些基本步骤组成的。在一个机器周期内,一条指令完成从取指到写回的整个过程。

机器周期的长度对计算机性能和指令执行速度有影响。较短的机器周期意味着计算机可以更快地执行指令,提高处理速度和效率。计算机的时钟频率越高,机器周期越短,计算机的性能越好。

然而,需要注意的是,不同的指令可能会需要不同的机器周期数才能完成执行。一些复杂的指令可能需要多个机器周期,而简单的指令可能只需要一个机器周期。因此,在实际应用中,需要综合考虑指令的类型和需求,确定合适的机器周期长度。

4:指令周期,它是指CPU完成一条操作后所需要的全部时间,每条指令执行时间都是有一个或几个机器周期组成,MCS-51系统中,有单周期指令,双周期指令和四周期指令。

指令周期是计算机执行一条指令所需的时间周期,它包括了取指、译码、执行、存储和写回等各个阶段。每个指令周期的长度取决于计算机的时钟频率和指令的复杂程度。

指令周期的长度可以通过以下公式计算:

指令周期 = 1 / 时钟频率

其中,时钟频率是计算机时钟的周期,表示单位时间内时钟信号的频率。

指令周期的长度决定了计算机每秒钟能够执行的指令数量。较短的指令周期意味着计算机可以更快地执行指令,提高处理速度和效率。但是,指令周期过短可能导致指令无法完全执行完成,造成错误或不完整的结果。

在实际应用中,为了提高计算机的性能,通常会采用流水线技术来同时执行多条指令。流水线技术将指令的执行过程分割成多个阶段,并在每个阶段中同时执行不同指令的相应操作。这样可以在同一个指令周期内执行多条指令,提高计算机的运算速度。但是,流水线技术也会引入一定的延迟和冲突问题,需要进行合理的设计和优化。

需要注意的是,指令周期和机器周期不完全一样。机器周期是执行一条指令所需的所有步骤,包括取指、译码、执行、存储和写回等。而指令周期仅指执行指令的时间周期,不包括其他步骤。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述使用定义变量的当时实现延时

在这里插入图片描述子程序调用

宏定义:   #define uint unsigned int 
         #define uchar unsigned char 

子函数调用程序

#include <REGX52.H>
#include <INTRINS.H>
// c语言中的宏定义,表示编写uint时相当于编写了unsigned int
#define uint unsigned int
#define uchar unsigned char
// 使用位定义的方式控制发光led管,控制第一个发光二级管
sbit L = P1^0;
// 函数的声明,主函数在调用子函数时需要进行函数的声明
// 编写一个子程序,没有参数没有返回值
void delay(){
    // 定义变量
	  uint  x,y;
	  //使用for循环让x的值自减 
	  for(x = 200; x > 0; x--){
			  // 嵌套调用
		    for(y = 2000; y > 0; y--){
				    
				}
		}
}

/*
		含参数子程序设计
*/
void delay02(uint z){
   uint x,y;
	 for(x = 100; x > 0; x --){
	    for(y = z ; y > 0; y --){
			
			}
	 }
}

void main(){
	  while(1){
			 // 点亮led
		   L = 0;
			 //调用子函数 delay02(500)
			 delay();
			 // 熄灭led
			 L = 1;
			 //调用子函数 delay02(500)
			 delay();
		}
   
}

编译执行
在这里插入图片描述

#include <REGX52.H>
#include <INTRINS.H>
// c语言中的宏定义,表示编写uint时相当于编写了unsigned int
#define uint unsigned int
#define uchar unsigned char
// 使用位定义的方式控制发光led管,控制第一个发光二级管
sbit L = P1^0;
// 函数的声明,主函数在调用子函数时需要进行函数的声明

// 编写一个子程序不含参数,没有参数没有返回值
	/*
		void delay(){
			// 定义变量
			uint  x,y;
			//使用for循环让x的值自减 
			for(x = 200; x > 0; x--){
					// 嵌套调用
					for(y = 2000; y > 0; y--){
							

					}
			}

 }


 */

/*
		含参数子程序设计
*/
void delay(uint z){
   uint x,y;
	 for(x = z; x > 0; x --){
	    for(y = 120 ; y > 0; y --){
			

			}
	 }

}
void main(){
	  while(1){
			 // 点亮led
		   L = 0;
			 //调用子函数 ,将参数传递进去
			 delay(100);
			 // 熄灭led
			 L = 1;
			 //调用子函数,将参数传递进去
			 delay(100);
		}

}

使用库函数实现流水灯_crol_
在这里插入图片描述

#include <REGX52.H>
#include <INTRINS.H>
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int
sbit  Led = P1^0;
uchar temp; // 8位

void delay(){
			// 定义变量
			uint  x,y;
			//使用for循环让x的值自减 
			for(x = 200; x > 0; x--){
					// 嵌套调用
					for(y = 2000; y > 0; y--){
							

					}
			}

 }

void main(){
     

	 /*
	       位移函数 1010 0101  --- > 向左边移动三位往左边补0   
	                0010 1101
	       使用循环左移实现流水灯程序
	 */
	 	 
	 temp = 0xfe;
	 P1 = temp;
	 while(1){
	
		  //调用库函数循环左移一位 
		  temp = _crol_(temp,1);
		  // 延时程序
		  delay();
		  P1 = temp;
	 }

}

控制风鸣器
在这里插入图片描述beep表示的是风鸣器口为2.3口,0表示开启
在这里插入图片描述

#include <REGX52.H>
#include <INTRINS.H>
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int
sbit  Led = P1^0;
sbit  beep = P2^3;
uchar temp; // 8位

void delay(){
			// 定义变量
			uint  x,y;
			//使用for循环让x的值自减 
			for(x = 200; x > 0; x--){
					// 嵌套调用
					for(y = 2000; y > 0; y--){
							

					}
			}

 }

void main(){
     

	 /*
	       位移函数 1010 0101  --- > 向左边移动三位往左边补0   
	                0010 1101
	       使用循环左移实现流水灯程序
	 */
	 	 
	 temp = 0xfe;
	 P1 = temp;
	 //控制风鸣器响 
	 beep = 0;
	 
	 while(1){
	
		  //调用库函数循环左移一位 
		  temp = _crol_(temp,1);
		  // 延时程序
		  delay();
		  P1 = temp;
	 }

}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LINUX】1-移植NXP提供的源码

一、在Linux中添加自己的开发板 defconfig配置文件&#xff1a;一个就是imx6ull_alientek_emmc_defconfig默认配置文件 # 复制一份NXP 官方的SDK cd arch/arm/configs cp imx_v7_mfg_defconfig imx_alientek_emmc_defconfig 设备树&#xff1a;imx6ull-alientek-emmc.d…

vulkan SDK安装

文章目录 一. vulcan官网二.安装流程 一. vulcan官网 https://vulkan.lunarg.com/sdk/home#windows 二.安装流程 点击下载 双击下载的*.exe进行安装 点击下一步 点击下一步 选择安装位置&#xff0c;点击下一步 点击全选&#xff0c;选择下一步 勾选同意&#xf…

“编辑微信小程序与后台数据交互与微信小程序wxs的使用“

引言 在现代移动应用开发中&#xff0c;微信小程序已经成为了一个非常流行和广泛使用的平台。为了使小程序能够展示丰富的内容和实现复杂的功能&#xff0c;与后台数据的交互是至关重要的。同时&#xff0c;微信小程序还提供了一种特殊的脚本语言——wxs&#xff0c;用于增强小…

Html -- 文字时钟

Html – 文字时钟 文字时钟&#xff0c;之前在Android上实现了相关效果&#xff0c;闲来无事&#xff0c;弄个网页版的玩玩。。。直接上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><titl…

基于FPGA的图像自适应阈值二值化算法实现,包括tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1Otsu方法 4.2 Adaptive Thresholding方法 4.3、FPGA实现过程 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 Vivado2019.2 matlab2022a 3.部分核心程序 timescale …

Windows系统上安装MySQL 5.7详细步骤

一、下载 MySQL 5.7 首先&#xff0c;需要前往 MySQL 官网下载 MySQL 5.7 的安装文件&#xff0c;选择适合您系统的版本进行下载。 二、安装 MySQL 5.7 1.解压安装文件 将下载的压缩文件解压到指定的目录下&#xff0c;例如&#xff1a;D:\mysql-5.7。 2.配置 my.ini 文件…

skiaSharp linux 生成验码字体显示不出来

一、拷贝windows下的字体如&#xff1a;C:\Windows\Fonts 设置字体的地方&#xff1a; var fontPath Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Fonts", "TAHOMA.TTF");最终效果&#xff1a;

极值点偏移2

已知 f ( x ) ln ⁡ x x f\left(x\right) \frac{\ln x}{x} f(x)xlnx​&#xff0c;若 f ( x ) a f\left(x\right) a f(x)a有两个不用的零点 x 1 , x 2 x_1, x_2 x1​,x2​&#xff0c;且 x 1 < x 2 x_1<x_2 x1​<x2​&#xff0c;求证&#xff1a; &#xff08;1…

【技术分享】RK356X Ubuntu 推流USB摄像头

本文适用与触觉智能所有RK356X ubuntu系统的主板。 IDO-SBC3566基于瑞芯微RK3566研发的一款高性能低功耗的智能主板&#xff0c;采用四核A55,主频高达1.8GHz&#xff0c;专为个人移动互联网设备和AIOT设备而设计&#xff0c;内置了多种功能强大的嵌入式硬件引擎&#xff0c;为…

前端导出数据到Excel(Excel.js导出数据)

库&#xff1a;Excel.js&#xff08;版本4.3.0&#xff09; 和 FileSaver&#xff08;版本2.0.5&#xff09; CDN地址&#xff1a; <script src"https://cdn.bootcdn.net/ajax/libs/exceljs/4.3.0/exceljs.min.js"></script> <script src"http…

RHCE---搭建博客网站

一.实验要求&#xff1a; Server-NFS-DNS主机配置NFS服务器&#xff0c;将博客网站资源文件共享给Server-web主机&#xff0c;Server-NFS-DNS主机配置DNS Server-web主机配置web服务&#xff0c;通过域名www.openlab.com可以访问到自建的博客网站 二.准备工作 创建两台虚拟机…

C++设计模式_09_Abstract Factory 抽象工厂

与上篇介绍的Factory Method工厂方法模式一样&#xff0c;Abstract Factory 抽象工厂模式也属于典型的“对象创建模式”模式&#xff0c;解决的问题也极其相似&#xff0c;在理解了Factory Method工厂方法模式的基础上再去理解Abstract Factory 抽象工厂模式就会变得更加容易。…

飞书-多维文档-计算时间差

1. 选择字段类型 如图所示&#xff0c;字段类型选择 公式 2. 编辑公式 单击 公式编辑器 在弹出的公式编辑框中输入公式 TEXT([终结时间]-[开始时间],"HH:MM") [终结时间] 和 [开始时间] 请替换成你的表格中对应的字段名称HH:MM 表示输出的时间格式为 时:分其中 “…

如何理解TCP/IP协议?

一、是什么 TCP/IP&#xff0c;传输控制协议/网际协议&#xff0c;是指能够在多个不同网络间实现信息传输的协议簇 TCP&#xff08;传输控制协议&#xff09; 一种面向连接的、可靠的、基于字节流的传输层通信协议 IP&#xff08;网际协议&#xff09; 用于封包交换数据网…

npm常用命令与操作篇

npm简介 npm是什么 npm 的英文是&#xff0c;node package manager&#xff0c;是 node 的包管理工具 为什么需要npm 类比建造汽车一样&#xff0c;如果发动机、车身、轮胎、玻璃等等都自己做的话&#xff0c;几十年也做不完。但是如果有不同的厂商&#xff0c;已经帮我们把…

《windows核心编程》第1章 错误处理

一、错误信息的获取 1.1 C库错误信息 1、获取错误信息 #include <stdio.h> #include <stdlib.h> #include <string.h>int main() {fopen("D:\\ASC", "r");printf("%s\n", strerror(errno));getchar();return 0; } 2、设置错…

nodejs+vue 校园通勤车-计算机毕业设计

在此情况下开发一款校园通勤车可视化系统小程序&#xff0c;于是乎变得非常合乎时宜。 经过网上调查和搜集数据,我们可以发现校园通勤车可视化管理方面的小程序在并不是相当普及,同时在校园通勤车可视化管理方面的可以有许多改进。目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪…

Android切换主题生命周期流程与onSaveInstanceState和onRestoreInstanceState,Kotlin

Android切换主题生命周期流程与onSaveInstanceState和onRestoreInstanceState&#xff0c;Kotlin import android.os.Bundle import android.util.Log import androidx.appcompat.app.AppCompatActivityclass MainActivity : AppCompatActivity() {private val TAG "fly&…

基于nodejs+vue 校园通勤车系统

但是管理好校园通勤车可视化又面临很多麻烦需要解决, 信息化已经成为主流,开发一个校园通勤车可视化系统小程序一方面的可能会更合乎时宜,困扰管理层的许多问题当中,校园通勤车 管理也是不敢忽视的一块。另一方面来说也可以提高在校园通勤车可视化管理方面的效率给相关管理人员…

【力扣周赛】第 367 场周赛(⭐二维数组当成一维数组,前后缀分解)

文章目录 竞赛链接Q1&#xff1a;100096. 找出满足差值条件的下标 I竞赛时代码——暴力双循环 Q2&#xff1a;100084. 最短且字典序最小的美丽子字符串竞赛时代码——双指针 Q3&#xff1a;100101. 找出满足差值条件的下标 II竞赛时代码——记录可用最大最小值下标 Q4&#xff…