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

📄 shf1.asm

📁 usb接口和msc51通信
💻 ASM
📖 第 1 页 / 共 5 页
字号:


;****************************************
;*********** 密实度计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 + -