单片机程序解释

单片机程序解释,第1张

ORG 000H

AJMP START

ORG 001BH

AJMP TIMEL    定时器1中断服务

ORG 0030H

START:MOV IE,#10000100B    开启总中断和外部1中断(貌似有错误)

MOV SP,#60H    栈顶为60H

MOV P1,#0FFH    

MOV R0,#00000011B    R0=03H 

MOV R1,#14H    R1=20

ANL TMOD,#0FH    TMOD低位四位保持不变

ORL TMOD,#10H    TMOD高四位设置为定时器1工作模式1

MOV TH1,#3CH    初值为65536-50000

MOV TL1,#0B0H

ORL IE,#88H    开启总中断和定时器1中断

SETB TR1    启动定时器1

LOOP:CJNE R1,#00H,DISP    R1不等于0转DISP

MOV R1,#14H    1秒到后重赋值R1

MOV A,R0

ADD A,#03H

MOV R0,A    R0=R0+3

DISP:MOV P1,R0    P1=R0

AJMP LOOP    转到LOOP继续循环

TIMEL:CLR TR1    定时中断,作为1S计时。

DEC R1

MOV TH1,#3CH

MOV TL1,#0B0H

SETB TR1

RETI

END

ORG

0

SJMP

STAR

程序启动跳转到主程序入口

ORG

3

LJMP

INT0S

跳转到外部中断0入口

ORG

0030H

STAR:MOV

IE,#81H

开启外部中断0和总中断

MOV

TCON,#1

外部中断0沿触发

MOV

A,#0FEH

累加器复制为FEH

MOV

P3,#0FEH

P3口初始值为FEH

ST1:MOV

P2,A

累加器送P2

ACALL

DELAY

延时

RL

A

累加器循环左移

SJMP

ST1

转移到ST1

INT0S:PUSH

ACC

累加器入栈

MOV

R2,#8

R2赋值为8

LOOP:CLR

A

A清零

MOV

P2,A

A送P2

ACALL

DELAY

延时

MOV

A,#0FFH

A赋值FFH

MOV

P2,A

A送P2

ACALL

DELAY

延时

DJNZ

R2,LOOP

R2减1不为0转LOOP

POP

ACC

Ad出

RETI

这个中断完成P2口8次00和FF数据变换,应该是LED灯闪烁8次。

DELAY:MOV

R7,#250

R7送250

D1:MOV

R6,#250

R6送250

D2:DJNZ

R6,D2

R6减1不为0循环

DJNZ

R7,D1

R7减1不为0循环

RET

大概延时125毫秒。

END

testb=dat&0x01 这个是什么意思? dat 和0X01进行与运算,也就是清掉DAT上的高七位,保留最后一位。

dat=dat>>1这个是什么意思?DAT右移一位

if(testb) //写1这个是什么意思? 如果TESTB为非0,执行IF语句;

ds=1i++i++这个是什么意思?为什么有两个i++ i++是I=I+1,两个相当于i=i+2

dat=(j<<7)|(dat>>1)这个是什么意思?j左移7位, dat右移一位,然后相与,你的程序好长,而且不完整,没细看J DAT是什么数据,还不知道为何要移位相与,估计这程序的结果是大于8位的。

a=tempread()

b=tempread()

temp=b

temp<<=8这个是什么意思?

temp=temp|a这个是什么意思?

a为读取的低8位

b为高8位

后面两名是把高低8位拼成一个16位数

好长的程序,好长的注释,终于注完了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7794724.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存