STC8H8K系列汇编和C51实战——实现跑马灯(汇编版)

STC8H8K系列汇编和C51实战——实现跑马灯(汇编版)

  • 一、实验名称:
  • 二、实验目的
  • 三、实验内容
  • 四、代码
  • 五、思考题
  • 总结
  • 系列文章——STC8H8K系列汇编51实战

一、实验名称:

汇编语言实现跑马灯

二、实验目的

  1. 学习Keil μVision4集成开发环境的使用;
  2. 读STC实验箱原理图,了解其组成与工作原理,学习掌握STC下载工具的使用方法;
  3. 读懂例程,学习单片机51汇编编程初步知识、软件延时程序的编写和点亮LED的方法。

三、实验内容

在Keil μVision2集成开发环境下分别 用51汇编语言编程实现跑马灯,即控制与实验箱上的P6.0~P6.7引脚相连的8个LED循环点亮(如图),请用参考代码的方法、查表法和循环指令三种方法来实现跑马灯并在实验箱上验证。
STC8H8K系列汇编和C51实战——实现跑马灯(汇编版)_第1张图片

四、代码

Fosc_KHZ    EQU 24000   ;24000KHZ

STACK_POIRTER   EQU     0D0H    ;堆栈开始地址

;*******************************************************************
;*******************************************************************
P4   DATA 0C0H
P5   DATA 0C8H
P6   DATA 0E8H
P7   DATA 0F8H

P0M1    DATA    0x93    ; P0M1.n,P0M0.n     =00--->Standard,    01--->push-pull
P0M0    DATA    0x94    ;                   =10--->pure input,  11--->open drain
P1M1    DATA    0x91    ; P1M1.n,P1M0.n     =00--->Standard,    01--->push-pull
P1M0    DATA    0x92    ;                   =10--->pure input,  11--->open drain
P2M1    DATA    0x95    ; P2M1.n,P2M0.n     =00--->Standard,    01--->push-pull
P2M0    DATA    0x96    ;                   =10--->pure input,  11--->open drain
P3M1    DATA    0xB1    ; P3M1.n,P3M0.n     =00--->Standard,    01--->push-pull
P3M0    DATA    0xB2    ;                   =10--->pure input,  11--->open drain
P4M1    DATA    0xB3    ; P4M1.n,P4M0.n     =00--->Standard,    01--->push-pull
P4M0    DATA    0xB4    ;                   =10--->pure input,  11--->open drain
P5M1    DATA    0xC9    ; P5M1.n,P5M0.n     =00--->Standard,    01--->push-pull
P5M0    DATA    0xCA    ;                   =10--->pure input,  11--->open drain
P6M1    DATA    0xCB    ; P6M1.n,P6M0.n     =00--->Standard,    01--->push-pull
P6M0    DATA    0xCC    ;                   =10--->pure input,  11--->open drain
P7M1    DATA    0xE1    ;
P7M0    DATA    0xE2    ;

;*******************************************************************

ORG     0000H
    LJMP    MAIN
    ORG     0100H
MAIN:;
	;端口初始化
	MOV		P0M1, #0 	;设置P0为准双向口
 	MOV		P0M0, #0
	MOV		P1M1, #0 	;设置P1为准双向口
 	MOV		P1M0, #0
	MOV		P2M1, #0 	;设置P2为准双向口
 	MOV		P2M0, #0
	MOV		P3M1, #0
	MOV		P3M0, #0
	MOV		P4M1, #0
	MOV		P4M0, #0
	MOV		P5M1, #0
	MOV		P5M0, #0
	MOV		P6M1, #0
	MOV		P6M0, #0
	MOV		P7M1, #0
	MOV		P7M0, #0
	MOV	 	P6, #0FFH
	;变量初始化
	CLR		A	;	清空A
	CLR		P4^0;	流水灯总开关打开
	CLR		P0^0;	打开矩阵键盘第一列	
	
	SETB	P0^4;	P0^41
LOOP: ;相当于while(1)
JUDGE:
	JB		P0^4, CONTINUE;P0^41时跳到CONTINUE
	MOV		R3, #01H;记录P0^4是否按下过,只要按下过就一直执行,直到按下其他键
	DJNZ	R3, CONTINUE;当R3不为1时,跳到CONTINUE

	START:
		MOV	A, #0FEH;给P6富初值0x1111 1110
	Output:
		MOV	P6,	A
		RL	A	;每次把A左移循环
		LCALL	DELAY;使用延时函数
		LJMP	Output
	SJMP    JUDGE
CONTINUE:
    SJMP    LOOP

DELAY:;三重循环
    MOV     R0, #20
    MOV     R1, #0
    MOV     R2, #0
DELAY1:
    DJNZ    R2, DELAY1
    DJNZ    R1, DELAY1 
    DJNZ    R0, DELAY1 	
    RET

    END

五、思考题

1、软件延时的原理是什么?能否将例程中延时函数调用改为delay(300)?参数类型定义与实际延时时间有关吗?
软件延时的原理是重复的执行无意义指令,执行次数越多延迟时间自然也就越长。
不能改为300,在定义时用的u8,也就是unsigned char型,只有8位,最多可定义255,若想改为300则需要改为u16,也就是unsigned int型。

2、对照实验一的C51和实验二汇编语言方法,对两种语言在头文件、赋值语句、循环语句、函数声明、调用子程序方法各方面的不同做出归纳总结。
C51的头文件在最开始,汇编的头文件在最末尾,二者均可自己定义。
C51赋值可以直接使用“=”号,而汇编用MOV赋值
C51循环可用while 和for循环,汇编使用CJNE等判断指令,多次跳转实现循环
C51函数在主函数之后时需要声明,汇编不需要声明函数

3、如果增加一个开关(譬如实验箱上SW17,与P3.2相接,如图2所示),用来控制流水灯流动的方向,请用汇编编程实现开关控制流水灯方向的跑马灯。


总结

主页还有多篇STC8H8K和其他语言的学文章,以及原理图和实验报告等多种资源,以后写完的东西也会立马发布的,欢迎各位观看,万分感谢

系列文章——STC8H8K系列汇编51实战

基于ESP8266与STC单片机的天气时钟(包括DS18B20、TFT、串口、外部中断、ESP8266、STC、API等)

STC8H8K系列汇编和C51实战——实现跑马灯(51版)

STC8H8K系列汇编和C51实战——实现跑马灯(汇编版)

STC8H8K系列汇编和C51实战——实现键控不同方式数码管动态显示(C51版与汇编版)

STC8H8K系列汇编和C51实战——开关控制定时器秒表(C51版)

STC8H8K系列汇编和C51实战——开关控制定时器秒表(汇编版)

STC8H8K系列汇编和C51实战——双中断控制定时器流水灯

STC8H8K系列汇编和C51实战——双中断加减计数器

STC8H8K系列汇编和C51实战——简易频率计

STC8H8K系列汇编和C51实战——秒倒计时器(汇编版)

STC8H8K系列汇编和C51实战——秒倒计时器(51版)

STC8H8K系列汇编和C51实战——秒倒计时器(可自行设定初值)(51版)

STC8H8K系列汇编和C51实战——按键允许按键计数(51版)

STC8H8K系列汇编和C51实战——按键允许按键计数(汇编版)

STC8H8K系列汇编和C51实战——按键允许按键计数(定时器去抖动51版)

STC8H8K系列汇编和C51实战——按键允许按键计数(利用下降沿中断控制)

STC8H8K系列汇编和C51实战——计算机串口控制单片机LED

STC8H8K系列汇编和C51实战——串口发送菜单界面选择不同功能

STC8H8K系列汇编和C51实战——数码管显示ADC、串口显示ADC按键与数值

你可能感兴趣的:(STC8H8K系列单片机,51单片机,单片机,mcu)