⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 灯.asm

📁 我学单片机89C51时编的大部分程序都在里面
💻 ASM
字号:
        ORG 0000H
        LJMP START
        ORG 001BH          ;T1的中断入口地址
        LJMP DELAY
        ORG 0030H
START:  MOV A,#00H
        MOV B,#0AH         ;循环次数
        MOV TMOD,#10H      ;定时器1工作于模式1
        MOV TH1,#3CH       ;每次中断50ms
        MOV TL1,#0B0H
        SETB TR1           ;启动定时器1
        SETB ET1           ;允许T1中断
        SETB EA            ;允许CPU中断
        MOV P1,A           ;输出,对灯初始化
        SJMP $             ;等待中断,执行DELAY里的语句

DELAY:  MOV TH1,#3CH       ;重新装入初值  ;中断服务程序
        MOV TL1,#0B0H
        DJNZ B,LOOP1       ;中断10次,为0.5s
        MOV B,#0AH         ;重设B的值
        JB F0,ALLOFF       ;若已经全亮过一次,则转向全灭
        
        ;下面两个标号Loop,Allon都没有用到,Alloff只是因为设定了用户标志位
        ;才用到.因为每次LJMP LOOP1都要从DELAY开始顺序执行,可见中断服务程序
        ;还是相当麻烦的。
LOOP:   RR A               ;对灯的操作,右移首位取反
        CPL ACC.7
        MOV P1,A
        JZ ALLON           ;有缺陷,A为全零状态没有输出,可能需要添加一个用户标志位来添加一个状态,这样也需要四个状态
        LJMP LOOP1
ALLON:  MOV A,#0FFH
        MOV P1,A
        SETB F0             ;自定义用户标志位,标志灯是否全亮过,全亮过F0=1
        SJMP LOOP1
ALLOFF: CLR F0       ;必须靠用用户标志位来添加状态,一旦状态多了,很难控制
        MOV A,#00H
        MOV P1,A
        SJMP LOOP1
LOOP1:  RETI               ;中断返回,到“SJMP $”




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -