📄 test.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 + -