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

📄 test.asm

📁 01单片机网站51单片机开发板全部配套程序
💻 ASM
字号:
;MCS51实验板测试程序 SANYANG 2003/5/17
;依次循环按动 SW1~3,可检验实验板资源状况
;0  鸣响,显示“Good”,等待按下SW1
;1、LED交替测试;显示4个灯,再按显示另4个灯
;2、74HC164及数码管测试 ;显示164
;3、24c02读写测试;显示2401
;4、93c46读写测试;显示9346
;5、RS232闭环收发测试(需短路232口2-3脚);显示232
;6、DA输出2.5V测试;显示dA25
;7、DA输出5V测试;显示dA50
;8、声测试,无显示
;9、返回1循环
;**************************************************************
;开关
SW1 BIT P3.2
SW2 BIT P3.3
SW3 BIT P3.4
SPK BIT P3.7
;93
DIO     BIT P3.6    ;93DIO
CLK     BIT P3.5    ;93CLK
CS      BIT P3.4    ;与+键公用
ADDH    EQU 20H     ;OP指令
ADDL    EQU 21H     ;OP指令+地址
_93DATA EQU 22H    ;数据
_93ADD  EQU 23H    ;地址
;显示
XSDAT BIT P1.4    ;定义驱动74164的数据脚为P1.4
XSCLK BIT P1.5    ;74164的时钟
GW    BIT P1.0    ;个位显示控制脚
SW    BIT P1.1    ;十位
BW    BIT P1.2    ;百位
QW    BIT P1.3    ;千位
SJGW  EQU 30H     ;显示数据存储器
SJSW  EQU 31H
SJBW  EQU 32H
SJQW  EQU 33H
;24
SDA   BIT P1.7
SCL   BIT P1.6
I2CADD EQU 20H     ;I2C的地址
JSTEM  EQU 21H     ;I2C的数据
;RS232
TEMP  EQU 20H

        MOV SP,#50H
;***********************************************
good:  MOV R2,#250    ;响250个周期
       mov r3,#5
goo1:  cLR SPK        ;使V1 9015导通
       ACALL SOUD10MS ;延时
       SETB SPK       ;使V1 9015截止
       ACALL SOUD1MS
       DJNZ R2,goo1
       djnz r3,goo1

goo2:   MOV SJQW,#12h  ;G
        MOV SJBW,#13h  ;o
        MOV SJSW,#13h  ;o
        MOV SJGW,#14h  ;d
        lcall display
        jnb sw1,goo2
gooTEST:SETB SW1
        LCALL DISPLAY
        JB SW1,gooTEST      ;等待,循环
gooKEY: LCALL DISPLAY
        JNB SW1,gooKEY      ;显示消键抖        

;流水测试
LSTEST: MOV R0,#8
        MOV P0,#55H         ;LED灯显示     
        SETB SW1
        JB SW1,$            ;等待 按键,循环
        SETB SW1
        JNB SW1,$
        MOV P0,#0AAH        ;
        SETB SW1
        JB SW1,$
LSKEY:  LCALL D10MS         ;消键抖
        SETB SW1
        JNB SW1,LSKEY
        MOV P0,#0FFH        ;熄灭
;显示数码测试
LED:    MOV SJQW,#11H       ;' '
        MOV SJBW,#1
        MOV SJSW,#6
        MOV SJGW,#4         ;显示8164
DISTEST:SETB SW2
        LCALL DISPLAY
        JB SW2,DISTEST      ;等待,循环
DISKEY: LCALL D10MS
        JNB SW2,DISKEY      ;显示消键抖
;I2C测试:
        MOV JSTEM,#55H      
        MOV I2CADD,#10H     ;在10H写55H
        LCALL I2CWRI
        LCALL I2CREAD
        MOV A,R7 
        CJNE A,JSTEM,I2CERR
        MOV SJQW,#2
        MOV SJBW,#4
        MOV SJSW,#0
        MOV SJGW,#1
        MOV JSTEM,#0FFH
        MOV I2CADD,#10H     ;若正确改写成FFH
        LCALL I2CWRI
I2CTEST:LCALL DISPLAY
        SETB SW3
        JB SW3,I2CTEST       ;等待,循环
I2CKEY: LCALL D10MS          ;I2C-KEY
        JNB SW3,I2CKEY
        LJMP _93TEST
I2CERR: LJMP $
;93测试:
_93TEST: MOV _93ADD,#20H
         MOV _93DATA,#0AAH    ;在20H写#0AAH
         LCALL AT93WRIT
         MOV _93DATA,#0       ;清0以便下面验证
         MOV _93ADD,#20H
         LCALL AT93READ
         MOV A,_93DATA
         CJNE A,#0AAH,_93ERR
         MOV SJQW,#9
         MOV SJBW,#3
         MOV SJSW,#4
         MOV SJGW,#6
_93LO:   LCALL DISPLAY
         SETB SW1
         JB SW1,_93LO
_93KEY:  LCALL D10MS
         JNB SW1,_93KEY
         LJMP RS232TEST
_93ERR:  LJMP $
;232测试
RS232TEST:
         MOV TMOD,#20H      ;
         MOV TH1,#0FDH      ;FAH=9600BPS串口速度
         MOV TL1,#0FDH
         MOV PCON,#00H      ;不加速
         MOV SCON,#50H
         SETB TR1
         MOV A,#55H         ;发送55H
         MOV SBUF,A
         CLR TI
         JNB RI,$
         CLR RI
         MOV R0,SBUF
         MOV A,R0
         CJNE A,#55H,R232ERR
         MOV SJQW,#11H    ;" "
         MOV SJBW,#2
         MOV SJSW,#3
         MOV SJGW,#2
_232LO:  LCALL DISPLAY
         SETB SW2
         JB SW2,_232LO
_232KEY: LCALL D10MS
         JNB SW2,_232KEY
         LJMP DATEST
R232ERR: LJMP $         
         
;DA测试
DATEST:  MOV SJQW,#0DH
         MOV SJBW,#0AH  
         MOV SJSW,#2
         MOV SJGW,#5   ;  显示DA25
         MOV P2,#7FH     ;输出2.5V
         LCALL DISPLAY
         SETB SW3
         JB SW3,DATEST
DAKEY1:  LCALL D10MS
         JNB SW2,DAKEY1         
DATE:    MOV SJQW,#0DH
         MOV SJBW,#0AH  
         MOV SJSW,#5
         MOV SJGW,#0   ;  显示DA50
         MOV P2,#0FFH    ;输出5V
         LCALL DISPLAY
         SETB SW1
         JB SW1,DATE
DAKEY2:  LCALL D10MS
         JNB SW3,DAKEY2
;声测试
SOUND: MOV R2,#250    ;响250个周期
SLOP1: CLR SPK        ;使V1 9015导通
       ACALL SOUD10MS ;延时
       SETB SPK       ;使V1 9015截止
       ACALL SOUD1MS
       DJNZ R2,SLOP1
       SETB SW2
       JB SW2,SOUND   ;结束
SPKKEY: LCALL D10MS
       JNB SW1,SPKKEY
       LJMP good     ;返回
;10MS延时子程序       
SOUD10MS:
        MOV R0,#2   
SDL0OOP:MOV R1,#60  ;改变R0的数值将改变声音频率
        DJNZ R1,$
        DJNZ R0,SDL0OOP
        RET    
SOUD1MS: MOV R7,#110    ;保证与蜂鸣器频率一致
         DJNZ R7,$
         RET         
         

;★★93C46读写子程序★★★★★★★★★★★★★★★★★★★★★★★★
;资源:程序中用到R6,操作地址为_93ADD,收、送数据_93DATA
;      使用8位操作,PRG=0
;2002/5/15调试通过
;定义:
;CS      BIT 
;DIO     BIT 
;ADDH    EQU 
;ADDL    EQU
;_93ADD  EQU
;_93DATA EQU
;调用程序
AT93READ:   ;读
            CLR CS               ;初始
            CLR DIO
            MOV ADDH,#11B        ;读指令110 
            MOV ADDL,#00000000B  ;传送指令和地址
            MOV A,_93ADD
            ORL A,ADDL
            MOV ADDL,A           ;地址加入
            LCALL READDATA       ;读指令
            RET
            
AT93WRIT:   ;写允许
            CLR CS               ;初始
            CLR DIO
            MOV ADDH,#10B
            MOV ADDL,#01100000B  ;9346允许擦除指令
            LCALL WRICOMM        ;写允许擦写指令
            ;写数据
            MOV ADDH,#10B        ;写指令101
            MOV ADDL,#10000000B  ;传送指令和地址
            MOV A,_93ADD
            ORL A,ADDL
            MOV ADDL,A           ;地址合成加入
            LCALL WRIDATA        ;将_93DATA中的数据写到片中
EWEND:      ;写禁止
            MOV ADDH,#10B
            MOV ADDL,#00000000B
            LCALL WRICOMM        ;写禁止
            RET

;******* 9 3公共子程序************************************
;写不含地址的指令,如,写允许、禁止、擦除等
;**************************************************************
WRICOMM:    SETB CS              ;复位
            MOV R6,#8
            MOV ACC,ADDH         ;送出指令字
WCOM:       RLC A
            MOV DIO,C            ;移出到C并送DIO端
              LCALL D15US
              SETB CLK
              LCALL D15US
              CLR CLK
              LCALL D15US
            DJNZ R6,WCOM         
            MOV R6,#8
            MOV ACC,ADDL         ;送出地址
WADD:       RLC A
            MOV DIO,C            ;移出到C并送DIO端
              LCALL D15US
              SETB CLK
              LCALL D15US
              CLR CLK
              LCALL D15US
            DJNZ R6,WADD
            CLR CS
            RET
;******* 9 3公共子程序************************************
;写数据

⌨️ 快捷键说明

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