是可以详细给解释一下这个单片机汇编语言?

供稿:hz-xin.com     日期:2024-05-22
谁能给我解释一下下面的这个单片机汇编程序是什么意思?

说的简单点就是,数学运算用单片机的汇编语言来实现

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;猜测该程序通过按键加1,并在两位静态共阳数码管上显示
;初始值为98,加1到99,然后加1变成100又回到98从98开始显示
;P3.7按按键端口
;P0接数码管,显示十位数
;P2接数码管,显示个位数
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
COUNT EQU 30H ;声明变量count
SP1 BIT P3.7 ;P3.7端口,猜测为外部按键
ORG 0 ;0地址
START:MOV COUNT,#98 ;START标号:count = 98
NEXT:MOV A,COUNT ;NEXT标号:A = count
MOV B,#10 ;B=10
DIV AB ;A/B 结果A=商,B=余数,A=98时,A=9,B=8
MOV DPTR,#TABLE ;查表,
MOVC A,@A+DPTR ;先查得两位数count的十位的数码管编码,存在A里
CPL A ;取反A,表格中是共阴数码管编码,取反估计数码管就是共阳的
MOV P0,A ;P0 = A,即显示十位数
MOV A,B ;A = B,把个位数存到A里
MOVC A,@A+DPTR ;查表的个位数数码管编码,存到A里
CPL A ;一样取反
MOV P2,A ;P2 = A,即显示个位数
WT:JNB SP1,WT ;SP1为0则一直在此处等待,为1则继续向下运行
WAIT:JB SP1,WAIT ;SP1为1则一直在此处等待,为0则继续向下运行
LCALL DELY10MS ;延时10毫秒,若是按键,应该是用于按键消抖
JB SP1,WAIT ;SP1为1(按键抖动)则跳到WAIT标号处运行,为0(有按键)则向下继续运行
INC COUNT ;COUNT加1
MOV A,COUNT ;A = COUNT
CJNE A,#100,NEXT ;若A不等于100,则跳到NEXT处运行,若等于则向下继续运行
LJMP START ;跳到START处运行
DELY10MS:MOV R6,#20 ;延时10毫秒子函数,R6 = 20
D1:MOV R7,#248 ;R7 = 248
DJNZ R7,$ ;R7减1,不为0则继续减1,直到为0向下运行
DJNZ R6,D1 ;R6减1,不为0则跳到D1处运行,为0向下运行
RET ;子函数返回
TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;共阴数码管编码,分别表示0-9
END ;结束

这是个AD转换控制程序,并将结果在LCD上显示的程序。不过程序比较罗嗦,个人觉得有些程序没用。
说明的部分用“////”标注了,应该比较清楚了。你自己看吧。
LED_0 EQU 30H ;
LED_1 EQU 31H
LED_2 EQU 32H ;存放段码
ADC EQU 35H ;/////////AD转换结果存储单元
CLOCK BIT P2.4 ;定义ADC0808时钟位
ST BIT P2.5
EOC BIT P2.6
OE BIT P2.7
ORG 00H
SJMP START
ORG 0BH
LJMP INT_T0

START: MOV LED_0,#00H
MOV LED_1,#00H
MOV LED_2,#00H
MOV DPTR,#TABLE ;段码表首地址
MOV TMOD,#02H
MOV TH0,#245
MOV TL0,#00H
MOV IE,#82H
SETB TR0
////////////启动AD转换//////////////////
WAIT: CLR ST
SETB ST
CLR ST ;启动AD转换
JNB EOC,$ ;等待转换结束
SETB OE
MOV ADC,P1 ;读取AD转换结果
CLR OE
MOV A,ADC
/////////////////分别取AD结果的个/十/百/位/////////////////////////////
MOV B,#100 ;AD转换结果转换成BCD码
DIV AB
MOV LED_2,A
MOV A,B
MOV B,#10
DIV AB
MOV LED_1,A
MOV LED_0,B
/////////////LCD显示///////////////////////
LCALL DISP
SJMP WAIT

INT_T0: CPL CLOCK ;提供ADC0808时钟信号
RETI

///////送LCD显控制的子程序//////////////
DISP: mov dptr,#table
MOV A,LED_0 ;数码显示子程序
MOVC A,@A+DPTR
CLR P2.3
MOV P0,A
LCALL DELAY
SETB P2.3
mov dptr,#table
MOV A,LED_1
MOVC A,@A+DPTR
CLR P2.2
MOV P0,A
LCALL DELAY
SETB P2.2
mov dptr,#table
MOV A,LED_2
MOVC A,@A+DPTR
setb acc.7
CLR P2.1
MOV P0,A
LCALL DELAY
SETB P2.1
RET
/////////这段程序,比较怪,因为你没说具体功能,我没看明白//////////
/////////只知道是对AD结果按TAB表进行处理,也是取个/十/百/位/////////
DELAY: MOV R6,#10 ;延时5毫秒
D1: MOV R7,#250
DJNZ R7,$
DJNZ R6,D1
ntov:
mov dptr,#tab
mov a,adc
movc a,@a+dptr
mov b,#2
div ab
mov r1,b
mov r1,b
mov b,#10
div ab
mov led_2,a
mov led_1,b
cjne r1,#01,kk1
mov led_0,#05
back: ret

kk1: mov led_0,#00
ajmp back
RET

TABLE: DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH

tab:
db 0, 0 , 0 , 1, 0, 2, 0, 0, 3, 0
db 4, 0, 0, 5, 0, 6, 0, 0, 7, 0
db 8, 0, 0, 9, 0, 0, 10, 0, 11, 0
db 0, 12, 0, 13, 0, 0, 14, 0, 15, 0
db 0, 16, 0, 17, 0, 0, 18, 0, 19, 0
db 0, 20, 0, 0, 21, 0, 22, 0, 0, 23
db 0, 24, 0, 0, 25, 0, 26, 0, 0, 27
db 0, 28, 0, 0, 29, 0, 0, 30, 0, 31
db 0, 0, 32, 0, 33, 0, 0, 34, 0, 35
db 0, 0, 36, 0, 37, 0, 0, 38, 0, 39
db 0, 0, 40, 0, 0, 41, 0, 42, 0, 0
db 43, 0, 44, 0, 0, 45, 0, 46, 0, 0
db 47, 0, 48, 0, 0, 49, 0, 50, 0, 0
db 51, 0, 0, 52, 0, 53, 0, 0, 54, 0
db 55, 0, 0, 56, 0, 57, 0, 0, 58, 0
db 59, 0, 0, 60, 0, 0, 61, 0, 62, 0
db 0, 63, 0, 64, 0, 0, 65, 0, 66, 0
db 0, 67, 0, 68, 0, 0, 69, 0, 70, 0
db 0, 71, 0, 0, 72, 0, 73, 0, 0, 74
db 0, 75, 0, 0, 76, 0, 77, 0, 0, 78
db 0, 79, 0, 0, 80, 0, 0, 81, 0, 82
db 0, 0, 83, 0, 84, 0, 0, 85, 0, 86
db 0, 0, 87, 0, 88, 0, 0, 89, 0, 90
db 0, 0, 91, 0, 0, 92, 0, 93, 0, 0
db 94, 0, 95, 0, 0, 96, 0, 97, 0, 0
db 98, 0, 99, 0, 0, 100, 0, 0, 0
END

这个程序看起来应该是个A/D转换程序,表头显示的数字在程序中是直接看不出来的,跟实际运行的外界环境有关系,比如A/D输入端的模拟量决定了这个数值,就是A/D转换完成后,程序根据查表程序输出了相应的数值。

是可以详细给解释一下这个单片机汇编语言?
答:这是个AD转换控制程序,并将结果在LCD上显示的程序。不过程序比较罗嗦,个人觉得有些程序没用。说明的部分用“///”标注了,应该比较清楚了。你自己看吧。LED_0 EQU 30H ;LED_1 EQU 31H LED_2 EQU 32H ;存放段码 ADC EQU 35H ;///AD转换结果存储单元 CLOCK BIT P2....

单片机的流水灯汇编程序怎么解释?
答:D1轮流亮\x0d\x0a\x0d\x0a//下面是延时程序,决定每调用一次延时多长时间\x0d\x0a ORG 07A0H //定位,将下面的程序(延时程序段)放在07A0H处\x0d\x0aSE19: MOV R6,#0A0H //更改#0A0H值\x0d\x0aL036: MOV R7,#0FFH //或更改#0FFH值就可以改变其每次调用延时的...

谁能给我解释一下下面的这个单片机汇编程序是什么意思?请服具体些...
答:应该是个液晶显示的程序,这里最主要的不是读程序,而是首先要很好的了解你使用的液晶的硬件资料,然后再根据自己的理解去写程序,,,现在的朋友都已经很好了,一般网上都会有相关的参考程序或者购买LCD时有附带的演示代码,,想当初我在搞这些东西的时候,就只有一份器件资料,只能靠自己的理解在那里反复...

单片机汇编语言,求大神帮忙看下程序什么意思
答:;这是一个P1口发送周期为2秒脉冲的程序。

一段单片机汇编程序看不懂,哪位能帮忙分析下,谢谢!
答:ORG 0100H ;声明现在的是地址0100H,之前没用到的保留。编译器认为是内容是00H MAIN: MOV SP,#60H ;设堆栈指针.复位时是07H。系统中如用不到堆栈将占用的寄存器可以不重新设置。例如在这个程序中可以不设置堆栈指针。MOV TMOD,#01H ;设T0为方式1 ACALL PT0M0 ;调用子程序 PT0M0 HERE: AJMP...

哪位大神可以帮忙把这个汇编语言解释一下,单片机的
答:CPL A ;一样取反 MOV P2,A ;P2 = A,即显示个位数 WT:JNB SP1,WT ;SP1为0则一直在此处等待,为1则继续向下运行 WAIT:JB SP1,WAIT ;SP1为1则一直在此处等待,为0则继续向下运行 LCALL DELY10MS ;延时10毫秒,若是按键,应该是用于按键消抖 JB SP1,WAIT ;SP1为1(按键...

单片机计算定时的汇编程序解析说明。
答:AJMP MAIN ;程序跳转到MAIN ORG 0030H ;51单片机程序一般要从地址0030H开始往下执行 MAIN: MOV P1,#0FFH ;初始化,将P1,P3口都置为高电平(这和单片机I/O口的保护有关);将SP指向60H MOV P3,#0FFH ;MOV SP,#60H ;CLR EA ;关总中断 CLR ES ;禁止串口中断 MOV R6,#10 ...

跪求大神帮忙解释一下这一段单片机汇编程序的每一句详细解释!!!万分感...
答:LJMP SUM 进入中断 ORG 1000H GW EQU 20H 用GW 表示20H SW EQU 21H 如上 BW EQU 22H 如上 MAIN:CLR P1.0 进入主函数。将P1.0位清0 MOV GW,#FFH 给GW 即20H赋初值,,这是立即寻址,你可以百度一下寻址方式 MOV SW,#00H MOV DPTR,#8002H MOV A,#0FFH MOVX @...

单片机汇编语言,求大神帮忙看下程序什么意思
答:程序很简单,就是让P1口全高电平一小段时间(执行DELAY延时子程序所需时间)后,再让P1口全低电平持续20倍的时间,不断重复上述过程。ORG 0000H START: MOV P1,#0FFH ;让P1口全高电平 ACALL DELAY ;一小段时间(调用一次DELAY延时子程序)MOV R2,#14H ;20倍 MOV P1,#00H ;再...

请问这段单片机汇编语言程序(关于定时器延时)是什么意思
答:R3,#14H ;循环20次 MOV TMOD,#10H ;定时器1工作于模式1(16位定时器)MOV TH1,#3CH ;赋初值,50毫秒溢出一次 MOV TL1,#0B0H SETB TR1 ;启动定时器1 LP1:JBC TF1,LP2 ;溢出位为1,则清0后转移到LP2 SJMP LP1 ;否则等待TF1置1 LP2 :MOV TH1,#3CH ;重新赋初值 MOV TL1,#0B0H ...