📄 drv100.asm
字号:
;********************DRV100********************
;本程序实现驱动TMP100实现温度测量,读取当前温度值后,改变TC100测量精度。
;入口参数:下次温度测量精度在SOU中(9~12位)。
;出口参数:9~12位的温度值在SOUH:SOU中(左对齐)。
;占用资源:W,STATUS,024H,025H,028H,SSP模块,1重堆栈。
;说明: 1.同步时钟频率为100KHZ。
; 2.地址选择线ADD0,ADD1均接地。
; 3.精度越低,转换速度越快。
IFNDEF DRV1001
#DEFINE DRV1001
DRV100 DECF SOU,F
SWAPF SOU,F
RLF SOU,W
ANDLW 60H
MOVWF TEMP1 ;由转换位数计算R1/R0
MOVLW 08H ;初始化SSPCON,
MOVWF SSPCON ;IIC主控模式
BCF PIR1,SSPIF
BSF STATUS,RP0
BSF TRISC,3 ;设置SCL为输入
BSF TRISC,4 ;设置SDA为输入
MOVLW 80H ;初始化SSPSTAT寄存器,
MOVWF SSPSTAT ;传送速率为标准模式100KHZ
MOVLW 09H
MOVWF SSPADD ;设定IIC时钟频率
CLRF SSPCON2 ;初始化SSPCON2
BCF PIE1,SSPIE ;SSP中断禁止
BCF STATUS,RP0
BSF SSPCON,SSPEN ;SSP模块使能
BSF STATUS,RP0
BCF TRISC,3 ;设置SCL为输出
BCF TRISC,4
BSF SSPCON2,SEN ;产生IIC启动信号
BCF STATUS,RP0
BTFSS PIR1,SSPIF ;启动信号完成了吗?
GOTO $-1
BCF PIR1,SSPIF
MOVLW 10010000B ;TMP100地址和写信号
MOVWF SSPBUF
BTFSS PIR1,SSPIF ;TMP100地址和写信号发送完了吗?
GOTO $-1
BCF PIR1,SSPIF
CLRF SSPBUF ;寻址温度寄存器
BTFSS PIR1,SSPIF ;寻址字节发送完了吗?
GOTO $-1
BCF PIR1,SSPIF
BSF STATUS,RP0
BSF SSPCON2,RSEN ;产生IIC重启动信号
BCF STATUS,RP0
BTFSS PIR1,SSPIF ;重启动完成了吗?
GOTO $-1
BCF PIR1,SSPIF
MOVLW 10010001B ;重新发送TC100地址
MOVWF SSPBUF
BTFSS PIR1,SSPIF ;地址发送完了吗?
GOTO $-1
BCF PIR1,SSPIF
BSF STATUS,RP0
BSF SSPCON2,RCEN ;使能接收
BTFSC SSPCON2,RCEN ;第一个字节接收完了吗?
GOTO $-1
BCF SSPCON2,ACKDT ;应答
BSF SSPCON2,ACKEN ;应答位使能
BTFSC SSPCON2,ACKEN ;应答完成?
GOTO $-1
BCF STATUS,RP0
MOVF SSPBUF,W
MOVWF SOUH ;存放第一个字节
BSF STATUS,RP0
BSF SSPCON2,RCEN ;使能接收
BTFSC SSPCON2,RCEN ;第二个字节接收完了吗?
GOTO $-1
BSF SSPCON2,ACKDT ;不应答
BSF SSPCON2,ACKEN ;应答位使能
BTFSC SSPCON2,ACKEN ;应答完成?
GOTO $-1
BCF STATUS,RP0
MOVF SSPBUF,W
MOVWF SOU ;存放第二个字节
BSF STATUS,RP0
BSF SSPCON2,RSEN ;重启动位
BCF STATUS,RP0
BCF PIR1,SSPIF
BTFSS PIR1,SSPIF ;重启动位发送完了吗?
GOTO $-1
BCF PIR1,SSPIF
MOVLW 10010000B ;TMP100地址
MOVWF SSPBUF
BTFSS PIR1,SSPIF
GOTO $-1
BCF PIR1,SSPIF
MOVLW 00000001B ;配置寄存器寻址
MOVWF SSPBUF
BTFSS PIR1,SSPIF
GOTO $-1
BCF PIR1,SSPIF
MOVF TEMP1,W
MOVWF SSPBUF ;发送转换精度
BTFSS PIR1,SSPIF
GOTO $-1
BCF PIR1,SSPIF
BSF STATUS,RP0
BSF SSPCON2,PEN ;结束位
BCF STATUS,RP0
BTFSS PIR1,SSPIF ;结束位发送完了吗?
GOTO $-1
BCF PIR1,SSPIF
RETURN
ENDIF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -