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

📄 tlc549cp.asm

📁 ADC549模数转换单元采集程序
💻 ASM
字号:
;***************************************************************************
;    TLC549CP 采样16次取平均值输出
;  30H     : 中断次数
;  31H     : 采样平均值
;  32H     : 采样值十分位百分位*100寄存器
;  33H     : 采样值个位显缓
;  34H     : 采样值十分位显缓
;  35H     : 采样值百分位显缓
;  40H-4FH : 采样值寄存器
;  R0      : 显缓地址寄存器
;  R1      : 采样存放地址(40H-4FH)
;  R2      : 移位计数器
;  R4      : 累加和高位
;  R5      : 累加和低位 (最终平均值)
;***************************************************************************

RS        BIT    P3.4
R_W       BIT    P3.5
ENABLE    BIT    P3.3
DB0_DB7   DATA   P1


     ORG    0000H
	  LJMP   MAIN
	  ORG    000BH
	  LJMP   SAMPLE
	  ORG    0040H
MAIN:
     MOV    SP,#6fh
     MOV    IE,#82H
     MOV    TH0,#4CH
     MOV    TL0,#0H
     MOV    TMOD,#1
     MOV    30H,#0AH  ; 0.5秒中断
	  MOV    31H,#0
	  MOV    32H,#0
	  MOV    33H,#20H
	  MOV    34H,#20H
	  MOV    35H,#20H
     SETB   TR0

HERE:
     LCALL  DISP
     SJMP   HERE    

;*****************************************************************
SAMPLE:
     ORL    TL0,#0
     MOV    TH0,#4CH
     DJNZ   30H,RETS
     MOV    30H,#0AH
     PUSH   ACC
     LCALL  AD
	  LCALL  DATA_PRO
	  LCALL  DIS_BUF
     POP    ACC
RETS:
     RETI

;*****************************************************************
AD:
     MOV    R1,#40H
     SETB   P1.2     ; 置CS为1
     CLR    P1.0
LOOP:
     MOV    R2,#0    ; 移位计数器置零
     CLR    P1.2
     NOP
NXT:
     SETB   P1.0
     MOV    C, P1.1
     RLC    A
     CLR    P1.0
     INC    R2
     CJNE   R2,#8,NXT
     MOV    R2,#0
     SETB   P1.2
     MOV    @R1,A 
	  INC    R1
	  CJNE   R1,#50H,LOOP
     RET

;*****************************************************************
DATA_PRO:                     ; 十六数据累加求平均 放R5
     MOV    R1,#40H
     MOV    R4,#0
     MOV    R5,#0
LOP: MOV    A,R5
     ADD    A,@R1
     MOV    R5,A
     CLR    A
     ADDC   A,R4
     MOV    R4,A
     INC    R1
     CJNE   R1,#50H,LOP   
AVR: MOV    A,R5
     SWAP   A
     ANL    A,#0FH
     MOV    R5,A
     MOV    A,R4
     ANL    A,#0FH
     SWAP   A
     ORL    A,R5
     MOV    R5,A
	  RET

;*****************************************************************
DIS_BUF:               	; 对数字信号处理,转换为实际电压值存显缓
     MOV    A,R5
	  SUBB   A,#33H
	  JNC    L1
	  MOV    33H,#30H
	  MOV    A,R5
     LCALL  TH
	  LJMP   RETDB
L1:  
     SUBB   A,#33H
	  JNC    L2
	  MOV    33H,#31H
	  LCALL  TH
	  LJMP   RETDB
L2:  
     SUBB   A,#33H
	  JNC    L3
	  MOV    33H,#32H
	  LCALL  TH
	  LJMP   RETDB
L3:  
     SUBB   A,#33H
	  JNC    L4
	  MOV    33H,#33H
	  LCALL  TH
	  LJMP   RETDB
L4:  
     SUBB   A,#33H
	  JNC    E5
	  MOV    33H,#34H
	  LCALL  TH
	  LJMP   RETDB
E5:
     MOV    33H,#35H
RETDB:
     MOV    A,32H
     ADD    A,#1EH    ; 模入:0.3--Vcc+0.3 
     MOV    32H,A     ; 以十六进制存储完毕

CONV:                 ; 十六进制转十进制 送显缓
       MOV    R0,#35H
LOOP1: MOV    A,32H
       MOV    B,#10
       DIV    AB
       MOV    32H,A
       MOV    A,B
       ADD    A,#30H
       MOV    @R0,A
       DEC    R0
       CJNE   R0,#33H,LOOP1
     RET

;*****************************************************************
TH:                  ; 最小分辨电压:0.02V * 100 = 2
     JZ     RETT
	  INC    32H
	  INC    32H
	  DEC    A
	  SJMP   TH
RETT:
     RET

;*****************************************************************
DISP:
     LCALL   Initial
     LCALL   CLS
     MOV    A,#10000000B        
     LCALL  Write_instruction
     MOV    DPTR,#LINE1
     LCALL  PR_STRING   
     MOV    A,#11000110B        
     LCALL  Write_instruction
     MOV    A,33H
     LCALL  WriteLCDData   
	  MOV    A,#2EH
     LCALL  WriteLCDData   
     MOV    A,34H
     LCALL  WriteLCDData
     MOV    A,35H
     LCALL  WriteLCDData
     MOV    A,#56H
     LCALL  WriteLCDData
     RET

LINE1:  DB  'Voltage:',00H

;*****************************************************************
Initial:
        MOV A,#00111000B
        LCALL   Write_instruction
        MOV A,#00001100B
        LCALL   Write_instruction
        MOV A,#00000110B
        LCALL   Write_instruction
        RET

;*****************************************************************
CheckBusy:
        PUSH    ACC
CheckBusyLoop:
        CLR RS
        SETB    R_W
        CLR ENABLE  
        SETB    ENABLE
        MOV A,DB0_DB7
        CLR ENABLE
        JB  ACC.7,CheckBusyLoop
        POP ACC
        LCALL   DELAY
        RET
        
;*****************************************************************
Write_instruction:
        LCALL   CheckBusy
        CLR ENABLE
        CLR RS
        CLR R_W
        SETB    ENABLE
        MOV DB0_DB7,A
        CLR ENABLE
        RET
        
;*****************************************************************
WriteLCDData:
        LCALL   CheckBusy
        CLR ENABLE
        SETB    RS
        CLR R_W
        SETB    ENABLE
        MOV DB0_DB7,A
        CLR ENABLE
        RET
;*****************************************************************
CLS:
        MOV A,#01H
        LCALL   Write_instruction
        RET
        
;*****************************************************************
PR_STRING:
        PUSH    ACC
PR_LOOP:
        CLR A
        MOVC    A,@A+DPTR
        JZ  END_PR
        LCALL   WriteLCDData
        INC DPTR
        JMP PR_LOOP
END_PR:
        POP ACC
        RET
;*****************************************************************
DELAY:
		  MOV	R6,#5
D1:	  MOV	R7,#248
	     DJNZ	R7,$
        DJNZ	R6,D1
        RET
	  END

⌨️ 快捷键说明

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