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
ORG0
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位数
好长的程序,好长的注释,终于注完了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)