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

📄 zidongsj.txt

📁 可以实现自动升降旗系统功能的汇编源码
💻 TXT
📖 第 1 页 / 共 2 页
字号:
        INC        R7 
        INC        R7 
        INC        R7 
        MOV        A,R2 
        JNB        ACC.3,KND 
        RL        A 
        MOV        R2,A 
        AJMP        LK4 
KND:    AJMP    KEY1                        ;无键按下一直扫描 
;--------------------------------------- 
;--------------------------------------- 
KS1:    MOV     DPTR,#A8255                ;键盘全扫描 
        MOV        A,#00H 
        MOVX        @DPTR,A 
        INC        DPTR 
        INC        DPTR 
        MOVX        A,@DPTR 
        CPL        A 
        ANL        A,#0FFH 
        NOP 
        NOP 
        RET 


;---------------------------------- 
DIS8SHAN:   ;开机自检 8闪现3次 

        MOV     R0,#03 
LP2:    MOV        78H,#08H 
        MOV        79H,#08H 
        MOV        7AH,#08H 
        MOV        7bH,#08H 
        MOV        7CH,#08H 
        MOV        7DH,#08H 
        MOV        7EH,#08H 
        MOV        7FH,#08H 
        LCALL    DIS 
        LCALL    DIS 
        LCALL    DIS 
        LCALL    DIS 
        LCALL    DISLED 
        DJNZ     R0,LP2 
        RET 

;------------------------------------------------------------- 
DIS:        SETB        RS1                                ;显示子程序                                 
                CLR        RS0 
                MOV        R0,#78H 
DS0:    MOV     R3,     #0FEH 
                MOV        A,R3 
DS1:     
                MOV     DPTR,#0FF7CH 
                MOVX        @DPTR,A 
                INC        DPTR 
                MOV        A,@R0 
                ADD        A,#1FH 
                MOVC        A,@A+PC 
                MOVX        @DPTR,A 
                NOP 
                NOP 
                ACALL        DL1 
                ;NOP 
                ;NOP 
                INC        R0 
                MOV        A,R3         
                NOP 
                JNB      ACC.7,LD1         
                NOP 
                RL        A 
                MOV        R3,A 
                ;NOP 
                ;NOP 
                AJMP        DS1 
                ;NOP 
                  ;NOP 
                  AJMP        MAIN                
  LD1:        CLR                RS1 

          MOV                MTD,#10H 
        LCALL                WRE2PROM         
        RET 
                  NOP 
                  NOP 
                  AJMP        MAIN 
        DB      3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH                    ;0,1,2,3,4,5,6,7,8 
        DB      6FH,77H,7CH,39H,5EH,79H,71H,1EH,31H,00H,3EH         ;9,A,B,C,D,E,F,J,R,灭,U 
DL1:    MOV     R7,#04H 
DL:     MOV     R6,#0FFH 
DL0:        DJNZ        R6,DL0 
                DJNZ        R7,DL 
                NOP 
                NOP                 
        RET 
        NOP 
        NOP 
        LJMP    MAIN 

DISLED:MOV                78H,#12H          ;8位灭显 
        MOV                79H,#12H 
        MOV                7AH,#12H 
        MOV                7bH,#12H 
        MOV                7CH,#12H 
        MOV                7DH,#12H 
        MOV                7EH,#12H 
        MOV                7FH,#12H 
        LCALL           DIS 
        LCALL                DELAY 
        RET 

DELAY:  MOV   R1,#03H                      ;延时子程序 
DELAY2:                      
        PUSH  0            ;保存现场 
        PUSH  1 
        MOV   0,#0H 
DELAY1: 
        MOV   1,#0H 
        DJNZ  1,$ 
        DJNZ  0,DELAY1 
        POP   1            ;恢复现场 
        POP   0 
        DJNZ        R1,DELAY2 
        RET 
         
;--------------------------------------- 
;I2C总线使用软件包 
;--------------------------------------- 
WRE2PROM: 
        PUSH          DPH                 
        PUSH          DPL 
        PUSH          ACC    
        MOV         SLA,#SLAW 
        MOV         NUMBYT,#04H 
        LCALL         WRNBYT 
        POP        ACC 
        POP        DPL 
        POP        DPH 
        RET;--------------------------------------- 
RDE2PROM: 
        PUSH          DPH                 
        PUSH          DPL 
        PUSH          ACC         
        MOV         SLA,#SLAW 
        MOV         NUMBYT,#1 
        LCALL         WRNBYT 
        MOV         SLA,#SLAR 
        MOV         NUMBYT,#3 
        LCALL         RDNBYT 
        POP        ACC 
        POP        DPL 
        POP        DPH 
        RET 

STA:        SETB         VSDA                        ;启动 
        SETB         VSCL 
        NOP 
        NOP 
        CLR         VSDA 
        NOP 
        NOP 
        CLR         VSCL 
        RET 
;---------------------------------------- 
STOP:        CLR         VSDA                        ;停止 
        SETB         VSCL 
        NOP 
        NOP 
        SETB         VSDA 
        NOP 
        NOP 
        CLR         VSDA 
        CLR         VSCL 
        RET 
;---------------------------------------- 
MACK:        CLR         VSDA                        ;发送应答位 
        SETB         VSCL 
        NOP 
        NOP 
        CLR         VSCL 
        SETB         VSDA 
        RET 
;---------------------------------------- 
MNACK:        SETB         VSDA                        ;发送非应答位 
        SETB         VSCL 
        NOP 
        NOP 
        CLR         VSCL 
        CLR         VSDA 
        RET 
;----------------------------------------- 
CACK:                                        ;应答位检查        正确F0为0 否则为1 
        SETB         VSDA                        ;置VSDA为输入方式                         
        SETB         VSCL                        ;置VSDA为数据有效 
        CLR         F0                        ;预设F0=0 
        MOV         C,VSDA                        ;输入VSDA引脚状态 
        JNC         CEND                        ;检查VSDA引脚状态,正常应答转CEND,且F0为0 
        SETB         F0                        ;无正常应答,F0为1 
CEND:        CLR         VSCL                        ;子程序结束使VSCL为0 
        RET 

;---------------------------------------- 
WRBYT:                                        ;写一个字节 
        MOV         R0,#08H                        ;8位数据长度送R0 
WLP:        RLC         A                        ;发送数据左移 发送位进C 
        JC         WR1                        ;判断发送1 0 发送1进WR1 
        AJMP         WRO                        ;发送0进WR0 
WLP1:         DJNZ         R0,WLP                        ;8位发送完?未完转WLP 
        RET                                ;8位发送结束 
WR1:        SETB         VSDA                        ;发送1程序段 
        SETB         VSCL 
        NOP 
        NOP 
        CLR         VSCL 
        CLR         VSDA 
        AJMP         WLP1 
WRO:        CLR         VSDA                        ;发送0程序段 
        SETB         VSCL 
        NOP 
        NOP 
        CLR         VSCL 
        AJMP         WLP1 
;---------------------------------------- 
RDBYT:                                        ;读一个字节 
        MOV         R0,#08H                        ;8位数据长度送R0 
RLP:        SETB         VSDA                        ;置VSDA为输入方式 
        SETB         VSCL                        ;置VSDA为数据有效 
        MOV         C,VSDA                        ;读入VSDA状态 
        MOV         A,R2                        ;读入0程序段 由C拼装入R2中 
        RLC         A                         
        MOV         R2,A                         
        CLR         VSCL                        ;使VSCL为零 可继续接收数据位 
        DJNZ         R0,RLP                        ;8位读完否 未读完转RLP 
        RET 
;----------------------------------------- 
;写N个字节数据 MTD:发送数据缓冲区首址 SLA:写入24C02的缓冲区首址 NUMBYT:发送数据个数 
;----------------------------------------- 
WRNBYT:                                  
        MOV         R3,NUMBYT                 
        LCALL         STA                        ;启动I2C总线 
        MOV         A,SLA                        ;发送SLA字节 
        LCALL         WRBYT 
        LCALL         CACK                        ;检查应答位 
        JB         F0,WRNBYT                ;若非应答位,则重发                 
        MOV         R1,#MTD 
WRDA:        MOV         A,@R1 
        LCALL         WRBYT 
        LCALL         CACK 
        JB         F0,WRNBYT 
        INC        R1 
        DJNZ         R3,WRDA 
        LCALL         STOP 
        RET 
;--------------------------------------- 
;读N个字节子程序 MRD:接受数据缓冲区首址 SLA:读入24C02的缓冲区首址 NUMBYT:发送数据个数 
;--------------------------------------- 
RDNBYT:                                        ;读N个字节子程序 
        MOV         R3,NUMBYT 
        LCALL         STA                        ;启动I2C总线 
        MOV         A,SLA                        ;发送寻址字节 
        LCALL         WRBYT 
        LCALL         CACK                        ;检查应答位 
        JB         F0,RDNBYT                ;非正常应答时重新开始 
RDN:        MOV         R1,#MRD                        ;接受数据缓冲区首址入R1 
RDN1:        LCALL         RDBYT                        ;读入一个字节进接受数据缓冲区 
        MOV         @R1,A 
        DJNZ         R3,ACK                        ;N个字节读完否 未完转ACK 
        LCALL         MNACK                        ;N个字节读完 发送非应答位/A 
        LCALL         STOP                        ;发送停止信号 
        RET                                ;子程序结束 
ACK:        LCALL         MACK                        ;发送应答位 
        INC         R1                        ;指向下一个接受数据缓冲区单元 
        SJMP         RDN1                        ;转向下一个字节数据 
;---------------------------------------- 
;I2C总线程序包结束 
;---------------------------------------- 

MUSIC:  
PUSH        ACC 
PUSH        B  
SETB        RS0 
CLR        RS1 
MUSIC0: 
NOP 
MOV DPTR,#DAT ;表头地址送DPTR 
MOV 25H,#00H ;中断计数器清0 
MOV B,#00H ;表序号清0 
MUSIC1: 
NOP 
CLR A 
MOVC A,@A+DPTR ;查表取代码 
JZ END0 ;是00H,则结束 
CJNE A,#0FFH,MUSIC5 
LJMP MUSIC3 
MUSIC5: 
NOP 
MOV R6,A 
INC DPTR 
MOV A,B 
MOVC A,@A+DPTR ;取节拍代码送R7 
CJNE A,#00h,con 
LJMP ED1 
CON:MOV R7,A 
SETB TR0 ;启动计数 
MUSIC2: 
NOP 
CPL P3.2 
MOV A,R6 
MOV R3,A 
LCALL DEL 
MOV A,R7 
CJNE A,25H,MUSIC2 ;中断计数器(20H)=R7否? 
;不等,则继续循环 
MOV 25H,#00H ;等于,则取下一代码 
INC DPTR 
; INC B 
LJMP MUSIC1 
MUSIC3: 
NOP 
CLR TR0 ;休止100毫秒 
MOV R2,#0DH 
MUSIC4: 
NOP 
MOV R3,#0FFH 
LCALL DEL 
DJNZ R2,MUSIC4 
INC DPTR 
LJMP MUSIC1 
END0: 
NOP 
NOP 
DAT: 
db 40h,22h,30h,42h,30h,22h,30h,22h,30h,12h,40h,22h,39h,12h,37h,12h 
db 30h,42h,30h,62h,26h,22h,30h,22h,2bh,12h,26h,12h,20h,42h,20h,42h 
db 26h,22h,26h,12h,30h,22h,26h,12h,20h,22h,26h,12h,2bh,42h,2bh,82h 
db 1ch,42h,20h,42h,2bh,42h,26h,42h,20h,22h,26h,42h,20h,22h,26h,22h 
db 2bh,12h,26h,12h,30h,42h,26h,82h,40h,22h,39h,12h,30h,22h,30h,22h 
db 26h,22h,26h,12h,20h,22h,20h,22h,2bh,22h,2bh,12h,2bh,12h,39h,42h 
db 2bh,42h,40h,22h,30h,42h,30h,22h,26h,42h,26h,22h,20h,82h,30h,22h 
db 26h,12h,20h,22h,20h,22h,1ch,40h,20h,40h,26h,22h,30h,12h,20h,22h 
db 20h,22h,20h,22h,26h,42h,30h,42h,40h,42h,30h,42h,26h,22h,30h,12h 
db 20h,22h,20h,22h,20h,22h,26h,42h,30h,42h,40h,42h,30h,42h,40h,42h 
db 30h,42h,40h,42h,30h,42h,30h,82h,00h 

ED1: 
POP        B 
POP        ACC 
CLR        RS0 
RET 

DEL: 
NOP 
DEL3: 
MOV R4,#02H 
DEL4: 
NOP 
DJNZ R4,DEL4 
NOP 
DJNZ R3,DEL3 
RET 
;------------------------------------ 
;正转调速程序    
ZTIAO:   
        MOV        SPEEDH,#2FH 
        MOV        SPEEDL,#35H 
XHUAN0:  CLR        P1.1 
        SETB        P1.0 
        LCALL        DIS 
        MOV    A,SPEEDH 
        DEC        A 
        MOV        60H,A 
        CJNE    A,#00H,XHUAN0 
XHUAN1:        SETB    P1.1 
        SETB    P1.0 
        LCALL   DIS 
        MOV        A,SPEEDL 
        DEC        A 
        MOV         61H,A 
        CJNE        61H,#00H,XHUAN1 
        RET 

;反转调速程序 
FTIAO: 
        MOV        SPEEDH,#2FH 
        MOV        SPEEDL,#35H 
XHAN3:  CLR        P1.0 
        SETB        P1.1 
        LCALL        DIS 
        MOV        A,SPEEDH 
        DEC        A 
        MOV        60H,A 
        CJNE    A,#00H,XHUN3 
XHUAN4:        SETB    P1.1 
        SETB    P1.0 
        LCALL   DIS 
        MOV        A,SPEEDL 
        DEC        A 
        MOV         61H,A 
        CJNE        61H,#00H,XHUAN4 
        RET 
                END 

⌨️ 快捷键说明

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