11 51 microcontroller compilation: IO output waveform, and use the oscilloscope of the Keil simulator to watch the output waveform [11 of the series of tutorials]

51 microcontroller assembly: IO output waveform, and use the oscilloscope of the Keil simulator to watch the output waveform [11 of the series of tutorials]

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 介绍:	【51单片机汇编】用Keil模拟器查看IO口输出
; NOTE:		File format: UTF-8
; 备注:	1、复位和中断运行起始地址介绍详见STC官方文档《STC89C52系列单片机器件手册》
;			第6章 中断系统;
;			2、CSEG等所有Keil汇编伪指令的含义详见Keil安装目录下的文档
;			Keil_v5\C51\Hlp\a51.chm,文档里支持搜索;
;			3、8051 CPU内核的寄存器含义的介绍可参考大学的单片机原理等课程,也可以看
;			STC官方文档《STC89C52系列单片机器件手册》;只想看原版8051指令集文档,
;			不想看教材的话,可以搜索下载“Atmel 8051 Microcontrollers Hardware Manual”,
;			或者“MCS ® 51 Family of Microcontrollers Architectural Overview”;
;			本Git仓库doc文件夹内有上述文档的下载链接;
;			4、本工程默认使用Keil模拟器运行,无需硬件,按F7编译后,按Ctrl+F5开始
;			运行,在Keil软件的Logic Analyzer模拟示波器窗口中看IO口输出结果;
; 查看方法:
;			1、本工程中已配置好窗口,但软件刚打开时波形太密不好观察,需要将鼠标
;			放在Logic Analyzer窗口的P0波形上,按住电脑键盘的Ctrl键,然后向前滚动
;			鼠标滚轮,放大波形后即可看到P0.0IO口输出的矩形波
;			2、如果你是自己创建的工程,则先按Ctrl+F5开始运行后,点击Keil软件上方菜单
;			的View-->Analysis Windows-->Logic Analyzer(如果是打开本仓库已下载的工程,
;			点一下则会让该示波器窗口消失,再按上述操作一遍则会再出现),
;			点击Logic Analyzer窗口的Setup,在弹出窗口中点击右边X叉叉左边的图标New(Insert)
;			-->在出来的输入栏里输入P0.0并回车,然后鼠标在刚刚出现的P0这一行上点一下,
;			然后在Max:文本输入框内将0xFF改成1,然后点击该弹出窗口的Close,
;			然后按F5运行程序,然后点击Stop按钮停止运行,则能在Keil虚拟示波器
;			的P0栏看到输出的矩形波;
; 作者		将狼才鲸
; 日期		2023-06-10
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  • Part of the source code display:
; 包含寄存器定义头文件,也可以用#include <REGISTERS51.INC>,同样有效
$INCLUDE(REGISTERS51.INC)

	;;
	; 1、ORG的作用和CSEG AT的作用一样,指定后面代码在内存中存放的位置,
	; CSEG等是Keil开发环境的伪指令(其它编译器如开源的SDCC可能有不一样的伪指令);
	; 2、十六进制立即数以H结尾
	ORG		0000H	; RAM的0地址是复位中断执行的入口,后面的一些地址是各中断的入口
	LJMP	RESET	; 长跳转指令可跳64KB内的地址(函数),类似的还有其它短跳的指令

	ORG		0003H	; 外部中断0
	LJMP	DEFAULT_INT

	ORG		000BH	; 定时器0
	LJMP	DEFAULT_INT

	ORG		0013H	; 外部中断1
	LJMP	DEFAULT_INT

	ORG		001BH	; 定时器1
	LJMP	DEFAULT_INT

	ORG		0023H	; 外部中断2
	LJMP	DEFAULT_INT

	ORG		002BH	; 外部中断3
	LJMP	DEFAULT_INT

	; 标号以冒号:结尾,和C语言的函数名类似
RESET:	
	NOP	; 空指令,消耗一个时钟周期的时间,什么也不做

LOOP:	; 汇编函数不遇到RET指令的话会一直往后执行,所以RESET这个主程序会进入下面的死循环
	NOP
	NOP
	SETB P0.0	; 置位,P0.0(P0寄存器的第0位) IO口输出高电平
	NOP
	NOP
	CLR P0.0	; 位清零,P0.0 IO口输出低电平
	LJMP	LOOP

DEFAULT_INT:
	NOP
	RETI

	END ; 汇编文件必须以END结尾
  • 51 MCU uses Keil simulator to view the effect of IO output:

insert image description here

Guess you like

Origin blog.csdn.net/qq582880551/article/details/131147675