📄 shf1.asm
字号:
;****************************************
;*********** 密实度计2004.10.26**********
;****************************************
CH375HM_INDEX XDATA 1000H ;CH375模块的索引端口的I/O地址
CH375HM_DATA XDATA 1201H ;CH375模块的数据端口的I/O地址
CH375HM_INT BIT INT0 ;假定CH375模块CH375HM_INDEX的INT#引脚连接到单片机的INT0引脚
CH375HM_STA BIT P1.7 ;假定CH375模块的STA#引脚连接到单片机的P15引脚
LED_OUT BIT P3.0 ;P3.0 低电平驱动LED显示,用于监控演示程序的进度
;命令参数结构,长度为20到60字节
mCmdParam DATA 40H ;默认情况下该结构将占用64字节的RAM,可以修改MAX_PATH_LEN常量,当修改为32时,只占用32字节的RAM
din bit p1.0 ;7219 DIN
load bit p1.1 ;7219 LOAD
clk bit p1.2 ;7219 CLK
sclk bit p1.3 ;
sdin bit p1.4 ;
sstrb bit p1.5 ;p1.3-p1.7 use A/D
dout bit p1.6 ;
adcs bit p3.5 ;
cdx bit 00h ;超低限
cgx bit 01h ;超高限
fmq bit 02h ;蜂鸣器
caiy bit 03h ;采样结束标志
gclk bit 04h ;改时钟设置标志
biaoz bit 05h ;秒中断标志
uljie bit 06h ;u盘连接成功标志
; MANDH EQU 11H
; MANDL EQU 12H
ADZHI EQU 30H ;30h-33h 2路A/D值存放
MAX10 EQU 26H ;第一路最大值
MAX11 EQU 27H ;
MIN10 EQU 28H ;第一路最小值
MIN11 EQU 29H ;
MAX20 EQU 2AH ;第二路最大值
MAX21 EQU 2BH ;
MIN20 EQU 2CH ;第二路最小值
MIN21 EQU 2DH ;
;zuix1 equ 2eh
;zuix2 equ 2fh
USE1 EQU 10H ;input for use
USE2 EQU 11H ;input for use
USE3 EQU 12H ;input for use
USE4 EQU 13H ;input for use
USE5 EQU 14H ;display for use
USE6 EQU 15H ;for use
USE7 EQU 16H ;for use
USE8 EQU 17H ;for use
BUFF0 EQU 30H
xhjs1 equ 6ch
xhjs2 equ 6bh
ramh equ 6eh ;保存6264当前地址高8位
raml equ 6fh ;6264地址低8位
XIANH1 EQU 70H ;70h-77h,显示缓冲区
XIANH2 EQU 71H ;
XIANH3 EQU 72H ;
XIANH4 EQU 73H ;
XIANH5 EQU 74H ;
XIANH6 EQU 75H ;
XIANH7 EQU 76H ;
XIANH8 EQU 77H ;
XIANH9 EQU 78H ;发送数据次数计数单元50 )
XIANHA EQU 79H ;
;TDBC EQU 7AH ;A/D通道保持单元
;XHJS EQU 7BH ;采样次数计数单元
ZUIDA1 EQU 7CH ;
ZUIDA2 EQU 7DH ;
ZUIX1 EQU 7EH ;
ZUIX2 EQU 7FH ;
zt8155 xdata 8100h;4100h
pa8155 xdata 8101h;4101h
pb8155 xdata 8102h;4102h
pc8155 xdata 8103h;4103h
r08155 xdata 8000h;4000h
;**********************************
;**********************************
ORG 0000H
ljmp start
ORG 000bH ;t0 1ms中断
ljmp zdcy
ORG 0013H
ljmp shuaxin ;12887秒中断刷新
ORG 0100H
STR_FILE_NAME1: DB '\密实度1.TXT',00H ;新文件名,在根目录下
START:
MOV A,#0FFH
MOV P0,A
MOV P1,A
MOV P2,A
MOV P3,A
MOV PSW,#00H
MOV SP,#07H
MOV R0,#20H ;清内存20h-7fh
MOV R7,#96
clr a
CLEAR: MOV @R0,A
INC R0
djnz r7,clear
CLR LED_OUT ;开机后LED亮一下以示工作
LCALL mDelay100mS ;延时100毫秒,CH375模块上电后需要100毫秒左右的复位时间
SETB LED_OUT
LCALL mDelay100mS
mov r3,#3
ucsh: MOV R5,#00H ;没有命令参数
MOV R7,#060H ;使用查询方式看U盘是否连接
LCALL ExecCommand ;查询当前模块的状态
LCALL mStopIfError ;错误则停机
;INC mCmdParam
MOV r0,#mCmdParam ;Status.mDiskStatus
INC r0
mov a,@r0
CLR C
SUBB A,#002H
JNC MAIN_CONNECT ;U盘已经连接
LCALL mDelay100mS ;可以让单片机做其它事,没事可做就延时等待一会再查询
LCALL mDelay100mS
djnz r3,ucsh
clr uljie
SJMP xian7219
MAIN_CONNECT: setb uljie
LCALL mDelay100mS ;U盘已经连接,延时,可选操作,有的USB存储器需要几十毫秒的延时
LCALL mDelay100mS
CLR LED_OUT ;LED亮说明U盘连接
; 检查U盘是否准备好,大多数U盘不需要这一步,但是某些U盘必须要执行这一步才能工作
WAIT_READY: LCALL mDelay100mS
MOV R5,#00H
MOV R7,#071H
LCALL ExecCommand ;查询磁盘是否准备好
MOV A,R7
setb LED_OUT
LCALL mDelay100mS
LCALL mDelay100mS
JNZ WAIT_READY ;U盘尚未准备好
DISK_READY_WR: MOV DPTR,#STR_FILE_NAME1
MOV R0,#mCmdParam ;Open.mPathName
LCALL CopyString ;复制文件名
MOV A,R7
MOV R5,A ;参数长度为文件名长度
MOV R7,#064H
; MOV R7,#CMD_FileOpen ;打开文件
LCALL ExecCommand ;执行打开文件操作
MOV A,R7
XRL A,#042H
; XRL A,#ERR_MISS_FILE
JZ FILE_NOT_FOUND ;ERR_MISS_FILE说明没有找到文件
LCALL mStopIfError
MOV 40H,#0FFH
MOV 41H,#0FFH
MOV 42H,#0FFH
MOV 43H,#0FFH
MOV R5,#04H ;参数长度
MOV R7,#06AH
; MOV R7,#CMD_FileLocate ;移动文件指针
LCALL ExecCommand ;指向文件末尾
LCALL mStopIfError
LJMP FILE_OPEN_OK
;原文件不存在则新建
FILE_NOT_FOUND: MOV DPTR,#STR_FILE_NAME1
MOV R0,#mCmdParam ;Create.mPathName
LCALL CopyString ;复制文件名
MOV A,R7
MOV R5,A ;参数长度为文件名长度
MOV R7,#065H
;MOV R7,#CMD_FileCreate ;新建文件
LCALL ExecCommand ;执行新建文件操作
LCALL mStopIfError
FILE_OPEN_OK: nop
; 以上u盘初始化完成
xian7219: MOV XIANH1,#0FH ;7219初始化
MOV XIANH2,#00H
MOV XIANH3,#0CH
MOV XIANH4,#01H
MOV XIANH5,#09H
MOV XIANH6,#0FFH
MOV XIANH7,#0AH
MOV XIANH8,#0CH
MOV XIANH9,#0BH
MOV XIANHA,#07H
MOV R1,#XIANH1
MOV R7,#5
d_set: lcall ddispb
djnz r7,d_set
lcall display
zijian: clr a ;0-9循环显示
mov r7,a
jj3: mov a,r7
inc r7
mov r0,#XIANH1
mov r1,#8
jj2: cjne a,#10,jj1
clr a
jj1: mov @r0,a
inc a
inc r0
djnz r1,jj2
lcall display
lcall dela
cjne r7,#10,jj3
lcall dela
clr11: mov r0,#60h
mov r7,#8
clr a
clear1: mov @r0,a
inc r0
djnz r7,clear1
lcall display
lcall dela
mov r6,#8
clr7219: clr a ;显示00000000等待键盘操作
mov r0,#XIANH1
clrxian: mov @r0,a
inc r0
djnz r6,clrxian
lcall display
RES8155: MOV DPTR,#ZT8155 ;8155 设置
MOV A,#0CH ;PA INT FOR KEY,PB NO
movx @dptr,a ;PC OUT( ALARM)不用中断.定时
mov dptr,#pc8155
mov a,00h
movx @dptr,a
clr cdx
clr cgx
MOV SCON,#40H ;方式1
MOV TMOD,#21H ;定时器T1方式2,T0方式1
mov th1,#0e8h ;波特率为1200bps
mov tl1,#0e8h ;波特率为1200bps
MOV TH0,#0fCH ;t0 1ms
MOV TL0,#65H
SETB IT0 ;外中断0请求信号为电平方式
SETB IT1 ;外中断1请求信号为电平方式
MOV IE,#07H ;允许INT0,T0,INT1中断
SETB TR1 ;允许T1计数
clr gclk
jnb uljie,main
MOV A,#01H ;请求模块自动计算文件长度
MOV mCmdParam,A ;Close.mUpdateLen
MOV R5,#01H ;只有一个输入参数
MOV R7,#067H ;关闭文件
LCALL ExecCommand ;关闭文件
LCALL mStopIfError
SETB LED_OUT ;LED灭
lcall mdelay100ms
;*********************************
;****** 主程序 *******
;*********************************
main: lcall rdclk
lcall dell
lcall keyset
lcall dell
lcall csyd ;将(四字节BCD码)从12887-2010H移到81C55-4010H中12个
lcall bcd_hex ;将四字节BCD转换成双字节十六进制4000-4005H6个
SETB EA
JNB BIAOZ,$
Clr biaoz
jnb uljie,main0
lcall dakaiu
lcall delay
lcall sshijian
MAIN0: SETB TR0
MAIN1: JNB CAIY,MAIN1 ;采样结束?
clr tr0
clr caiy
lcall adcy ;30h31h放1#数据,32h33h放2#数据
mov max10,30h
mov max11,31h
mov min10,30h
mov min11,31h
mov max20,32h
mov max21,33h
mov min20,32h
mov min21,33h
main0b: mov xhjs2,#4 ;每秒钟采800个数,0c8h为200个数
main00: mov xhjs1,#0d8h
main00a: setb tr0
main11: jnb caiy, main11
clr tr0
clr caiy
lcall adcy
jnb uljie,max
mov r1,#50h
mov @r1,#20h
mov r1,#55h
mov @r1,#20h
mov r0,#31h
mov r1,#51h
mov r2,#2
lcall hexascii ;ad数据转化为ascii码
mov r0,#33h
mov r1,#56h
mov r2,#2
lcall hexascii
mov r0,#41h ;数据倒入u盘传输缓存40h-47h
mov r1,#59h
mov r5,#10
loop1: mov a,@r1
mov @r0,a
inc r0
dec r1
djnz r5,loop1
MOV mCmdParam,#10
MOV R5,#11
MOV R7,#07CH
LCALL ExecCommand1 ;向文件写入数据,如果文件比较大,一次写不完,可以再用命令CMD_ByteWrite继续写入,文件指针自动向后移动
LCALL mStopIfError
max: lcall SJCL1 ;挑出每一路最大和最小放在max10,max11,min10,min11,max20,max21,min20,min21
lcall SJCL2
djnz xhjs1,main00a
djnz xhjs2,main00
lcall pjz ;把两路信号求平均放到22h,23h,24h,25h
lcall ad_msd ;A/D转换为密实度
lcall wxh ;写显缓
lcall display ;显示
lcall cxpd ;判断超限标志状态
lcall baojing ;报警
mov dptr,#pa8155 ;判断是否停止键按下
movx a,@dptr
cpl a
cjne a,#01h,jixu
lcall DELL ;判断stop键肖抖处理
mov dptr,#pa8155
movx a,@dptr
CPL A
cjne a,#01h,jixu
lcall rdclk
lcall csyd
lcall dell
jnb uljie,tuichu
lcall sshijian
lcall delay
lcall clrx
; jb ch375hm_int,$
; lcall closeu
tuichu: ljmp clr11
jixu:
JNB BIAOZ,$
clr biaoz
ljmp main0 ;返回
;*****************************************
closeu: mov a,#01h
mov mcmdparam,a
mov r5,#01h
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -