MCS-51单片机,汇编语言编程对继电器控制,使其每秒取反变化,具体要求如下

作者&投稿:宥雅 (若有异议请与网页底部的电邮联系)
MCS-51单片机汇编语言的SP指令有什么作用?~

MCS-51单片机汇编语言中,没有SP这条指令,只有针对SP操作的指令。51单片机中SP是堆栈指针寄存器,存放着当前堆栈地址。堆栈用于存储子程序调用、中断程序调用时程序返回的地址,或者用来临时保存某一寄存器的值。
除了初始化堆栈时直接给SP赋值,SP显式存在,其它的对SP有影响的指令,对SP的操作都是隐式的,就是说SP并不出现在指令操作数当中。
例如:
MOV SP,#80H ;初始堆栈指针,(SP)=80H
LCALL XXXX;调用XXXX处的子程序,下一条指令PC值压栈,(SP)=(SP)+2
NOP;子程序返回时,RET指令从堆栈中弹出PC值,所以会返回到这里,(SP)=(SP)-2
PUSH ACC;累加器A的内容压栈保存,(SP)=(SP)+1
POP B;堆栈内保存的累加器A的内容弹出到B寄存器中,(SP)=(SP)-1

使用PUSH、POP指令使用堆栈,要注意进出栈的匹配,否则将引起不可预期的后果。

ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H
MOV TH0,#HIGH(65536-250)
MOV TL0,#LOW(65536-250)
SETB TR0
SETB ET0
SETB EA
MOV R2,#0
SJMP $
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-250)
MOV TL0,#LOW(65536-250)
SETB TR0
CPL P1.1
INC R2
CJNE R2,#4,T0E
CPL P1.0
MOV R2,#0
T0E:
RETI
END

#include<reg51.h>
#define uchar unsigned char
uchar times;
void t0isr() interrupt 1
{
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
times++;
}
main()
{
TMOD=0x01;//还是模式1较好,模式2是8为定时,不够用的。
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
times=0;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(times==20)
{
times=0;
P1.0=~P1.0;
}
}
}
以上为中断方式,查询方式,你自己做吧,只不过判断TF0而已。

;每隔一秒,取反P1.0
;11.0592MHz
ORG 0000H
SJMP START
ORG 000BH
MOV TH0, #76
DJNZ R7, E_T0
MOV R7, #160
XRL P1, #255
E_T0:
RETI
START:
MOV TH0, #76
MOV R7, #160
MOV IE, #82H
SETB TR0
SJMP $

END

晶振fosc=11.0592MHz,定时器T0,工作方式0,以中断方式定时1秒。

直接接I/O口是驱动不了的,最好用光耦驱动,程序都懒得写,太简单了

51单片机,使用汇编语言,访问内部数据存储单元时,使用什么指令
答:51单片机访问内部数据存储单元指令是:1、访问内部寄存器 MOV A,direct(比如30H)MOV direct,A MOV direct,direct MOV A,@R0 ADD A,direct ADDC A,dIrect SUBB A,direct 等等 2、访问内部扩展存储器 MOVX A,@R0 MOVX @R0,A MOVX A,@DPTR MOVX @DPTR,A ...

想学好51单片机,是不是要先学习汇编语言?
答:就这些问题我来给你一个合理的解答,如有不对望请见谅!首先,学好单片机不是说学好一门语言(汇编语言)就行的。汇编语言是我们在掌握和了解了单片机的工作原理后,对单片机进行软件开发的工具。想学好51单片机,你必须对单片机的结构和工作原理了如指掌,然后是对特殊功能寄存器的编程(即用汇编语言或C...

汇编语言 下面两种写法究竟有什么不同? 看到很多地方说 IN AX,21H 表...
答:从端口地址22H读取1字节到AH,--对。--这是 80x86 CPU 汇编语言。可按老师讲应该写 IN AX,[21H],IN AX,21H 我们老师说是结果为AX=21H 。--错。--从没有见过这种写法。--也许,又有新出现的 CPU 了 ?还有的说加@、#什么的,凌乱了 --这是 MCS-51 单片机的汇编语言。楼主的...

菜鸟提问,关于51单片机汇编语言
答:51单片机汇编语言, 一般给单个 IO 口赋值, 用 MOV 赋值 会 对其他 位有影响 如给P1.0口一个低电平 MOV P1, #00H 或者 MOV P1, #0FEH 都能 使 P1.0 输出低电平, 但影响 P1.1 ~ P1.7 可以用 位操作指令 如 CLR P1.0 ( SETB P1.0...

51单片机中汇编语言如何调用C的子程序?
答:我的程序是KEIL编译的,如下 先申明 EXTRN CODE (_Send_CRC) ;Send_CRC是C中的函数,汇编中加了_调用的时候 LCALL _Send_CRC 如果要使用C中的变量,那么CODE变成相应的DATA,XDATA等

51单片机和STM32有什么区别?编程语言也可以用汇编语言吗?
答:2.汇编指令集不同,51是mcs51指令集,stm32是arm指令集。指令集内容相似,但是形式上还是有较大差距。3.51更便宜,性价比更高,懂得人也更多。4.仿真环境不一样,仿真器也不一样。5.51没有知识产权问题,专利已经过期了。6.发展节奏不一样,51现在是跟跑,STM32是领跑。相似点:都可以用汇编和...

MCS-51系列单片机原理及接口技术内容提要
答:本书详细阐述了MCS-51系列单片机的核心内容,共分为九个章节。首先,对单片机的基本结构和工作原理进行了全面的介绍,特别重点讲解了MCS-51单片机的指令系统,深入剖析了汇编语言程序设计的方法。这部分内容对于理解单片机的操作机制至关重要。接着,书中详细探讨了常用的系统接口技术,包括数据通信、输入输出...

汇编语言中CJNE语句是怎么判断的?
答:CJNE这个指令是51单片机的汇编指令,是比较两个操作数,如果相等这转移。用法如下:CJNE A,#30H,NXT CJNE R1,#30H,NNN 等等。CJNE是MCS-51系列单片机指令系统中的比较条件转移指令;若两个操作数相等,程序按顺序往下d执行;若两个操作数不相等,则进行转移。由于该指令执行还要影响CY标志,因此在转移...

51单片机,有了c语言的程序,如何把它变换成汇编语言
答:可以实现,但转换的结果不是太理想,跟反汇编差不多,需要自己去整理,其转移的标号需要自己重新定义,转换结果里是用行地址替代的

51单片机汇编语言编程问题(使用Keil uVision4)MCS-51
答:MOV R5,#0MOV R6,#0MOV R7,#0MOV DPTR,#TABMOV R2,#50LOOP: CLR A MOVC A,@A+DPTR CJNE A,#3AH,LP1LP1: JC SUZI CJNE A,#'Z',LP2 SJMP DAXIELP2: JNC,XIAXIEDAXIE: INC R6 SJMP LP3XIAOXIE: INC R7 SJMP LP3SUZI: INC R5LP3: IN...