该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
硬件电路:AT89C2051为原型的STC系列微控制芯片,6MHz晶振(STC可以省略), P1口分别接8个LED的阴极,同时串入220欧的限流电阻,阳极接电源+5V。按键接P3.2口,利用外部中断来判断按键。
实现简单功能:点亮的LED可以从左到右再从右到左不断循环,按键用来调节速度。
问题:
1、用了太多的存储空间,整段程序框架能否进一步优化,比如运用进栈、出栈指令,或别的写法。
2、最不满意地方在于给定时器赋初值,中断程序与主干程序都用了一样的指令,这部分是否存在更好的写法。
3、在6MHz晶振下,定时器最大定时为131072微秒,保持原有功能不变,如何修改程序实现更长时间的速度调节。
4、这个简单功能如果用C会比汇编更高效、更节省存储么。
5、会有视觉暂留效果么,如果有在哪个时间点出现。
ORG 000H
SJMP 030H
ORG 003H
SJMP BTN
ORG 030H
MOV TMOD,#01H
MOV IE,#81H
T: MOV R2,#00H
MOV R4,#0EH
J: MOV DPTR,#500H
MOV TL0,30H
MOV TH0,31H
MOV A,R2
MOVC A,@A+DPTR
INC R2
MOV P1,A
JNB TF0,$
CLR TF0
DJNZ R4,J
SJMP T
BTN: CLR TR0
MOV DPTR,#400H
MOV A,R3
MOVC A,@A+DPTR
MOV TL0,A
MOV 30H,A
INC R3
MOV A,R3
MOVC A,@A+DPTR
MOV TH0,A
MOV 31H,A
INC R3
JNB P3.2,$
CJNE A,#02H,I
MOV R3,#00H
I: SETB TR0
RETI
ORG 400H
;TL0TL0
DW 0CFEH ;1ms
DW 18FCH ;2ms
DW 24FAH ;3ms
DW 3CF6H ;5ms
DW 60F0H ;8ms
DW 9CE6H ;13ms
DW 0FCD6H ;21ms
DW 98BDH ;34ms
DW 9494H ;55ms
DW 0D08AH ;60ms
DW 0C81H ;65ms
DW 4877H ;70ms
DW 846DH ;75ms
DW 0C063H ;80ms
DW 3850H ;90ms
DW 0B03CH ;100ms
DW 641FH ;115ms
DW 1802H ;130ms
ORG 500H
DB 7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH
DB 0FDH,0FBH,0F7H,0EFH,0DFH,0BFH
END