📄 xiaoqi.asm
字号:
;*************************************************************************************************
;*************************************************************************************************
;程序名称: H.ASM
;程序功能: 采集湿度信号
;************************************************************************************************
;*************************************************************************************************
; I/O分配
;*************************************************************************************************
;*******************************************************
; MAX7219管脚定义
;*******************************************************
CLK BIT P2.7
LOAD BIT P2.6
DIN BIT P2.5
;*************************************************************
; TLC0831 PIN DEFINE
;*************************************************************
CS BIT P2.2 ;WHICH PIN THE CS(1) CONNECT TO
SCLK BIT P2.3 ;WHICH PIN THE SCLK(7) CONNECT TO
DOUT BIT P2.4 ;WHICH PIN THE DOUT(6) CONNECT TO
;*************************************************************************************************
; RAM空间分配
;*************************************************************************************************
;*******************************************************
; TLC0831的数据接口
;*******************************************************
RH8 DATA 31H ;THE EIGHT BITS OF THE TLC0831
;*******************************************************
; MAX7219的数据接口
;*******************************************************
TEMP EQU 32H
ADDRESS EQU 33H
VALUE EQU 34H
;*******************************************************
; MAX7219用于显示的8位数据
;*******************************************************
GEWEI EQU 35H
SHIWEI EQU 36H
;**********************************
; USED IN DELAY SUBROUTINE
; 本程序具有两个DELAY,公用此三个RAM空间
;**********************************
DL1 DATA 40H
DL2 DATA 41H
DL3 DATA 42H
;***********************************
; HUMIDITY RESULT
;***********************************
HUMTEN DATA 43H
HUMBIT DATA 44H
;***********************************************************************************
;***********************************************************************************
; 主程序开始
;***********************************************************************************
;***********************************************************************************
ORG 0000H
JMP MAIN
ORG 0030H
MAIN:
;*******************************************************
; 串口初始化
;*******************************************************
MOV TMOD,#20H ;设置定时器1工作方式2
MOV TL1,#0F4H ;定时器1计数初值,#0E8=BAUD:1200bps;#0F4=BAUD:2400bps
MOV TH1,#0F4H ;计数器reload值
;BAUD:1200=#0E8@11.0592MHz
;BAUD:2400=#0F4@11.0592MHz
;BAUD:4800=#0FA@11.0592MHz
;BAUD:9600=#0FD@11.0592MHz
CLR ES ;禁止串行中断
MOV PCON,#00H ;波特率不倍增
SETB TR1 ;启动定时器1
MOV SCON,#50H ;设置串行口方式1,REN=1
SETB EA ;使能中断
;****************************************************************
; 程序循环部分,发送湿度数据到串行口,通过MAX7219显示
;****************************************************************
LOOP:
;*******************************************************
; MAX7219初始化
;*******************************************************
LCALL DELAY ;延时
SETB CS
CLR SCLK
SETB SCLK
NOP
CLR SCLK
CLR CS
NOP ;MAKE SURE THAT THERE IS 8.5US
NOP ;FOR THE TO CONVERT
NOP
NOP
NOP ;ONE NOP STAND FOR A MACHINE CYCLE
NOP ;IF THE CRYSTALL FREQ IS 12MHZ,
NOP ;there should be about 10 NOPS.
NOP
NOP
NOP
NOP
CLR A
CLR C
SETB SCLK
NOP
CLR SCLK
NOP
SETB DOUT
NOP
MOV C,DOUT ;D07
RLC A
SETB SCLK
NOP
CLR SCLK
NOP
SETB DOUT
NOP
MOV C,DOUT ;D06
RLC A
SETB SCLK
NOP
CLR SCLK
NOP
SETB DOUT
NOP
MOV C,DOUT ;D05
RLC A
SETB SCLK
NOP
CLR SCLK
NOP
SETB DOUT
NOP
MOV C,DOUT ;D04
RLC A
SETB SCLK
NOP
CLR SCLK
NOP
SETB DOUT
NOP
MOV C,DOUT ;D03
RLC A
SETB SCLK
NOP
CLR SCLK
NOP
SETB DOUT
NOP
MOV C,DOUT ;D02
RLC A
SETB SCLK
NOP
CLR SCLK
NOP
SETB DOUT
NOP
MOV C,DOUT ;D01
RLC A
SETB SCLK
NOP
CLR SCLK
NOP
SETB DOUT
NOP
MOV C,DOUT ;D00
RLC A
MOV RH8,A
CLR SCLK
SETB CS
CLR C
MOV A,RH8
MOV DPTR,#TAB
SUBB A,#70H
MOVC A,@A+DPTR
MOV 20H,A
MOV R1,#00H ;变换成十进制
CLR C
MOV A,20H
CHAN: SUBB A,#0AH
JC CHAN1
INC R1
AJMP CHAN
CHAN1: ADD A,#0AH
MOV SHIWEI,R1 ;送MAX7219显示
MOV GEWEI,A
MOV ADDRESS,#0CH ;开始初始化7219
MOV VALUE,#01H ;使能7219
CLR LOAD
NOP
NOP
MOV A,ADDRESS
MOV TEMP,#08
SEND1:
RLC A
MOV DIN,C
NOP
CLR CLK
SETB CLK
DJNZ TEMP,SEND1
MOV A,VALUE
MOV TEMP,#08
SEND2:
RLC A
MOV DIN,C
NOP
CLR CLK
SETB CLK
DJNZ TEMP,SEND2
SETB LOAD
MOV ADDRESS,#0BH ;显示位数控制
MOV VALUE,#03H ;显示4个数码管
CLR LOAD
NOP
NOP
MOV A,ADDRESS
MOV TEMP,#08
SEND11:
RLC A
MOV DIN,C
NOP
CLR CLK
SETB CLK
DJNZ TEMP,SEND11
MOV A,VALUE
MOV TEMP,#08
SEND21:
RLC A
MOV DIN,C
NOP
CLR CLK
SETB CLK
DJNZ TEMP,SEND21
SETB LOAD
MOV ADDRESS,#0AH ;亮度控制
MOV VALUE,#03H ;共16个等级,X0-XF
CLR LOAD
NOP
NOP
MOV A,ADDRESS
MOV TEMP,#08
SEND13:
RLC A
MOV DIN,C
NOP
CLR CLK
SETB CLK
DJNZ TEMP,SEND13
MOV A,VALUE
MOV TEMP,#08
SEND23:
RLC A
MOV DIN,C
NOP
CLR CLK
SETB CLK
DJNZ TEMP,SEND23
SETB LOAD
MOV ADDRESS,#09H ;译码方式
MOV VALUE,#0FFH
CLR LOAD
NOP
NOP
MOV A,ADDRESS
MOV TEMP,#08
SEND14:
RLC A
MOV DIN,C
NOP
CLR CLK
SETB CLK
DJNZ TEMP,SEND14
MOV A,VALUE
MOV TEMP,#08
SEND24:
RLC A
MOV DIN,C
NOP
CLR CLK
SETB CLK
DJNZ TEMP,SEND24
SETB LOAD
MOV ADDRESS,#01H ;数码管0:个位
MOV A,GEWEI
MOV VALUE,A
CLR LOAD
NOP
NOP
MOV A,ADDRESS
MOV TEMP,#08
SEND15:
RLC A
MOV DIN,C
NOP
CLR CLK
SETB CLK
DJNZ TEMP,SEND15
MOV A,VALUE
MOV TEMP,#08
SEND25:
RLC A
MOV DIN,C
NOP
CLR CLK
SETB CLK
DJNZ TEMP,SEND25
SETB LOAD
MOV ADDRESS,#02H ;数码管6:十位
MOV A,SHIWEI
MOV VALUE,A
CLR LOAD
NOP
NOP
MOV A,ADDRESS
MOV TEMP,#08
SEND16:
RLC A
MOV DIN,C
NOP
CLR CLK
SETB CLK
DJNZ TEMP,SEND16
MOV A,VALUE
MOV TEMP,#08
SEND26:
RLC A
MOV DIN,C
NOP
CLR CLK
SETB CLK
DJNZ TEMP,SEND26
SETB LOAD
MOV ADDRESS,#03H ;数码管7:百位
MOV A,#0AH
MOV VALUE,A
CLR LOAD
NOP
NOP
MOV A,ADDRESS
MOV TEMP,#08
SEND17:
RLC A
MOV DIN,C
NOP
CLR CLK
SETB CLK
DJNZ TEMP,SEND18
MOV A,VALUE
MOV TEMP,#08
SEND27:
RLC A
MOV DIN,C
NOP
CLR CLK
SETB CLK
DJNZ TEMP,SEND28
SETB LOAD
MOV ADDRESS,#04H ;数码管8:千位
MOV A,#0CH
MOV VALUE,A
CLR LOAD
NOP
NOP
MOV A,ADDRESS
MOV TEMP,#08
SEND18:
RLC A
MOV DIN,C
NOP
CLR CLK
SETB CLK
DJNZ TEMP,SEND18
MOV A,VALUE
MOV TEMP,#08
SEND28:
RLC A
MOV DIN,C
NOP
CLR CLK
SETB CLK
DJNZ TEMP,SEND28
SETB LOAD
;***************************************
; DELAY FOR SOME TIME
;***************************************
DELAY:
MOV DL1,#25
D10:
MOV DL2,#255
D11:
MOV DL3,#20
D12:
NOP
DJNZ DL3,D12
DJNZ DL2,D11
DJNZ DL1,D10
RET
TAB:DB 64H,60H,5CH,57H,53H
DB 4EH,4AH,46H,41H,3DH
DB 39H,35H,31H,2DH,29H
DB 26H,22H,1EH,1AH,17H
DB 13H,10H,0CH,09H,06H
DB 02H,00H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -