返回信息流刚自学Pic单片机,我用PIC16F877单片机,LCD1602液晶显示屏,DHT11温湿度传感器,做一个测量湿度,并显示湿度的程序,但是在运行时出现一直接受高电平信号的情况,不知道为什么,求助大神,我是用A1口作为数据传输口,D口连接液晶显示屏,代码如下
INCLUDE<P16F877.INC>
#DEFINE DATA1 PORTA,1 ;数据口
#DEFINE DIR TRISA,1 ;方向口
#DEFINE RS PORTC,0 ;命令/数据选择
#DEFINE RW PORTC,1 ;读/写选择
#DEFINE E PORTC,2;使能信号
TATUS equ 03h ;状态寄存器在体0中的地址(状态寄存器中有8位,bit0为C,bit2为Z,bit5为rp0)
RP0 equ 5h ;状态寄存器中的页选位rp0位地址为5(RAM数据存储器体选位,仅用于直接寻址)
RP1 equ 6h
C equ 0h ;进位/借位标志位C在STATUS中的位地址为0,执行加法:1=进位,0=不进位;执行减法:1=不借位,0=借位
ADCON1 EQU 9FH
CBLOCK 20H
COUNT
COUNT1
VALUE
DL1
DL2
SHI
GE
TEMP
TEMP1
TEMP_CHAR
BIN_L
ENDC
ORG 00H
NOP
GOTO MAIN ;入口地址
;**************************主程序******************************
MAIN
BSF STATUS,RP0
CLRF TRISA ;A口所有先设置为输出
CLRF TRISD
MOVLW 01H
MOVWF TRISB ;B0口为输入,其他为输出
MOVLW 07H
MOVWF ADCON1 ;关闭所有A/D口
BCF STATUS,RP0
CLRF PORTA
CLRF PORTB
CLRF TEMP
CALL RESET_DHT11 ;调用复位18B20子程序
MOVLW 1BH
MOVWF COUNT
DECFSZ COUNT,1
GOTO $-1 ;等待81us
CALL READ_DHT11
MOVF TEMP,0
MOVWF BIN_L ;把高8位的低4位和低8位的高4位组合起来
CALL INITIAL
CALL DISPLAY
LOOP GOTO LOOP
;********************************初始化屏幕***********************************
INITIAL BSF STATUS,5
CLRF TRISC
CLRF TRISD
BCF STATUS,5
MOVLW B'00000001' ;清屏
CALL SEND_I
MOVLW B'00000010' ;归位(home)
CALL SEND_I
MOVLW B'00000110' ;06H指定在写入或读取时,光标的移动方向
CALL SEND_I
MOVLW B'00001111' ;0CH开显示,光标,闪烁
CALL SEND_I
MOVLW B'00111000' ;8位字长,2行字符,5*7点位
CALL SEND_I
;*********************复位DHT11子程序**************************
RESET_DHT11
BSF STATUS,RP0
BCF DIR
BCF STATUS,RP0
BCF DATA1
CALL DELAY10MS
CALL DELAY10MS
BSF DATA1 ;释放总线
MOVLW 0AH
MOVWF COUNT
DECFSZ COUNT,1
GOTO $-1 ;等待30us
BSF STATUS,RP0
BSF DIR ;DQ设置为输入
BCF STATUS,RP0
BTFSC DATA1 ;数据线是否为低
GOTO RESET_DHT11 ;否则继续复位
MOVLW 1BH
MOVWF COUNT
DECFSZ COUNT,1
GOTO $-1 ;等81us
BTFSS DATA1 ;数据线是否为高
GOTO RESET_DHT11
RETURN
;**********************读DHT11子程序****************************
READ_DHT11
MOVLW 8H
MOVWF COUNT
BSF STATUS,RP0
BSF DIR
BCF STATUS,RP0
BTFSS DATA1
GOTO $-1
BCF STATUS,C
GOTO RE_1
BCF STATUS,C
re_end RRF TEMP,1
DECFSZ COUNT,1 ;是否读完8位
GOTO READ_DHT11
RETURN
RE_1 MOVLW 0AH
MOVWF COUNT1
DECFSZ COUNT1,1 ;24us
GOTO $-1
BTFSC DATA1
BSF STATUS,C
BTFSC DATA1
GOTO $-1
GOTO re_end
;**********************显示程序****************************
DISPLAY
MOVLW 80H
CALL SEND_I
CALL _BCD
MOVF SHI,W
ADDLW 30H
MOVWF TEMP_CHAR ;把w寄存器中变量送入tempchar
CALL SENDCHAR ;显示十位段码
MOVLW 81H
CALL SEND_I
MOVF GE,W
ADDLW 30H
MOVWF TEMP_CHAR
CALL SENDCHAR ;显示个位段码
MOVLW 82H
CALL SEND_I
MOVLW 25H ;显示摄氏度符号
MOVWF TEMP_CHAR
CALL SENDCHAR
RETLW 00H
;******************************************** 输送命令*************************************************
SEND_I MOVWF TEMP1 ;暂存命令
CALL CHK_BUSY ;判断总线是否忙
NOP
NOP
BCF RS
NOP
NOP
BCF RW
MOVFW TEMP1
MOVWF PORTD ;送命令
NOP
NOP
BSF E
NOP
NOP
NOP
NOP
NOP
NOP
BCF E
RETURN
;-----------------------判断总线是否忙--------------------
;测忙碌子程序
;RS=0,RW=1,E=H,D0-D7=状态字
;---------------------------------------------------------
CHK_BUSY MOVLW 0FFH
MOVWF PORTD
BSF STATUS,5
MOVLW 0FFH
MOVWF TRISD ;D口设置为输入
BCF STATUS,5
BCF RS
BSF RW
CHECK_BUSY_1 NOP
NOP
NOP
BSF E
NOP
NOP
NOP
NOP
BTFSS PORTD,7 ;D7为高表示总线忙,为低表示总线空闲
GOTO $+7
NOP
NOP
NOP
NOP
BCF E
GOTO CHECK_BUSY_1
BCF E
NOP
NOP
BSF STATUS,5
CLRF TRISD ;D口设置为输入
BCF STATUS,5 ;恢复D口为输出
RETURN
;-----------------------温度的二进制转BCD码------------------------------
_BCD CLRF SHI ;保存地址清零
CLRF GE
MOVF BIN_L,F ;组合码自己给自己赋值,测试是否为0
SKPNZ ;不为0则跳到下一步
RETURN
SHI_ MOVLW 0AH
SUBWF BIN_L,W ;BIN_L减10,结果存到W寄存器
BTFSS STATUS,C ;执行减法后,如果无借位
GOTO GE_
MOVWF BIN_L
INCF SHI,1
GOTO SHI_
GE_ MOVF BIN_L,W
MOVWF GE
RETURN
;*********************************************显示字符*************************************************7
SENDCHAR CALL CHK_BUSY
BSF RS
BCF RW
MOVFW TEMP_CHAR
MOVWF PORTD
BSF E
NOP
NOP
NOP
NOP
NOP
NOP
BCF E
RETURN
;**************************延时1ms******************************
DELAY1MS MOVLW D'125'
MOVWF DL1
LOOP4M nop
nop
nop
nop
nop
DECFSZ DL1,F
GOTO LOOP4M
RETURN
;**************************延时9us******************************
DELAYS9US MOVLW D'3'
MOVWF DL1
DECFSZ DL1,1
GOTO $-1
RETURN
;*****************10ms延时程序**********************************
DELAY10MS MOVLW D'133'
MOVWF DL1
LP2 MOVLW D'251'
MOVWF DL2
LP3 DECFSZ DL2,F
GOTO LP3
DECFSZ DL1,F
GOTO LP2
RETURN
END
这是一条镜像帖。来源:北邮人论坛 / cpp / #95776同步于 2017/7/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
汇编语言单片机求助~(小学期饱受折磨的信通狗)
ys0928
2017/7/15镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。