关于微原什么时候要加BYTE PTR

本文档为优快云博客的一个示例链接,具体内容未给出,通常包含编程技术、开发经验分享等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

A8255 EQU 0000H ;8255各端口地址 B8255 EQU 0002H C8255 EQU 0004H Q8255 EQU 0006H CODE SEGMENT 'CODE' ;代码段 ASSUME DS:DATA,CS:CODE,SS:STACK START: ;程序起始点 MOV AX,STACK ;初始化堆栈段 MOV SS,AX MOV AX,TOP MOV SP,AX MOV AX,DATA ;初始化数据段 MOV DS,AX MOV AL,80H ;8255初始化 MOV DX,Q8255 OUT DX,AL RUN: CALL DIGIT ;数位分离 CALL DISP ;数码管显示 INC COUNT CMP COUNT,100 JB RUN MOV COUNT,0 CALL READ_DHT11 ;读取DHT11数据 CALL BIJIAO JMP RUN READ_DHT11 PROC ;读取DHT11数据 PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI MOV AL,80H ;8255初始化 MOV DX,Q8255 OUT DX,AL MOV DX,C8255 ;DHT11开始信号 MOV AL,1 OUT DX,AL MOV AL,0 OUT DX,AL CALL DELAY_18MS MOV AL,1 OUT DX,AL MOV AL,89H ;8255C口输入 MOV DX,Q8255 OUT DX,AL MOV DX,C8255 MOV CX,1000 WAIT_LOW: IN AL,DX TEST AL,1 ;是否到80us低电平 JZ LOW_DET LOOP WAIT_LOW JMP TIMEOUT_ERROR LOW_DET: MOV CX,1000 WAIT_HIGH: IN AL,DX TEST AL,1 ;是否到80us高电平 JNZ HIGH_DET LOOP WAIT_HIGH JMP TIMEOUT_ERROR HIGH_DET: LEA DI,DATA_BUF MOV CX,5 ;5个字节数据 READ_BYTE: MOV BH,8 ;8位 MOV BL,0 ;临时储存 WAIT_START: IN AL,DX TEST AL,1 JNZ WAIT_START READ_BIT: MOV AH,0 WAIT_H: ;数据发送前50秒低电平 IN AL,DX TEST AL,1 JZ WAIT_H CNT_HIGH: INC AH ;记录脉冲宽度 IN AL,DX TEST AL,1 JZ HIGH_END CMP AH,16 JB CNT_HIGH HIGH_END: CMP AH,6 ;短于40秒为0,长于则为1 JB BIT_0 STC JMP BIT_END BIT_0: CLC BIT_END: RCL BL,1 DEC BH JNZ READ_BIT MOV [DI],BL INC DI LOOP READ_BYTE MOV AL,[DATA_BUF] ADD AL,[DATA_BUF+1] ADD AL,[DATA_BUF+2] ADD AL,[DATA_BUF+3] CMP AL,[DATA_BUF+4] JNZ CRC_ERROR CLC ;CF清零 JMP FIN TIMEOUT_ERROR: MOV ERROR,0FFH STC JMP FIN CRC_ERROR: MOV ERROR,0FEH STC FIN: POP DI POP DX POP CX POP BX POP AX RET READ_DHT11 ENDP DISP PROC ;显示温湿度 PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI LEA BX,LED_TAB LEA SI,LED_BUF MOV CX,4 MOV AH,11111110B LOP0: MOV AL,[SI] XLAT ADD BYTE PTR AL,BUZZER MOV DX,A8255 OUT DX,AL ;段码值送8255A口 MOV AL,AH MOV DX,B8255 OUT DX,AL ;LED位选送8255B口 CALL DELAY_50US MOV AL,0FFH OUT DX,AL INC SI ROL AH,1 LOOP LOP0 POP SI POP DX POP CX POP BX POP AX RET DISP ENDP DIGIT PROC ;分离出个位和十位并存入数位暂存区 PUSH AX PUSH BX PUSH SI PUSH DI MOV BL,2 LEA DI,LED_BUF LEA SI,DATA_BUF NEXT: MOV AL,[SI] ADD SI,2 MOV AH,0 MOV BH,10 DIV BH MOV BYTE PTR [DI],AH INC DI MOV BYTE PTR [DI],AL INC DI DEC BL JNZ NEXT POP DI POP SI POP BX POP AX RET DIGIT ENDP BIJIAO PROC PUSH SI PUSH AX LEA SI,DATA_BUF MOV AL,RH CMP BYTE PTR [SI],AL JA JING ADD SI,2 MOV AL,RT CMP BYTE PTR [SI],AL JA JING MOV BUZZER,0 JMP FIN0 JING: MOV BUZZER,80H FIN0: POP AX POP SI RET BIJIAO ENDP DELAY_50US PROC ;50秒延时 PUSH CX MOV CX,10 WAIT0: LOOP WAIT0 POP CX RET DELAY_50US ENDP DELAY_18MS PROC ;18毫秒延时 PUSH CX MOV CX,5000 WAIT0: LOOP WAIT0 POP CX RET DELAY_18MS ENDP CODE ENDS DATA SEGMENT ;定义数据段 ;LED段码 LED_TAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH DATA_BUF DB 0,0,0,0,0 ;湿度整数&小数、温度整数&小数、校验码 LED_BUF DB 0,0,0,0 ;数位暂存区 RH DB 50 RT DB 20 BUZZER DB 0 ERROR DB 0 ;错误码 COUNT DB 0 DATA ENDS STACK SEGMENT 'STACK' ;定义堆栈段 SSF DB 1000 DUP(?) TOP EQU LENGTH SSF STACK ENDS END START
最新发布
06-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值