初级会员

- 积分
- 123
- 金钱
- 123
- 注册时间
- 2020-2-19
- 在线时间
- 10 小时
|
发表于 2020-6-3 15:38:37
|
显示全部楼层
MAX6675与AT89C2051单片机的接口电路如图5所示。
由于AT89C2051不具备SPI总线接口,故这里采用模拟SPI总线的方法来实现与MAX6675的接口。其中P1.0模拟SPI的数据输入端(MISO),P1.1模拟SPI的串行时钟输出端SCK,P1.2模拟SPI的从机选择端SSB。下面给出相应的温度值读取程序及数据转换程序。
;温度值读取程序
;位定义
SO BIT T1.0 ;数据输入
CS BIT P1.1 ;从机选择
SCK BIT P1.2 ;时钟
;数据字节定义
DATAH DATA 30H ;读取数据高位
DATAL DATA 31H ;读取数据低位
TDATAH DATA 32H ;温度高位
TDATAL DATA 33H ;温度低位
;读温度值子程序
READY:CLR CS ;停止转换并输出数据
CLR CLK ;时钟变低
MOV R2,#08H
READH:MOV C,SO
RLC A ;读D15~D8高8位数据
SETB CLK
NOP
CLR CLK
DJNZ R2,READH
MOV DATAH,A;将读取的高8位数据保存
MOV R2,#08H
READL:MOV C,SO ;读D7~D0低8位数据
RLC A
SETB CLK
NOP
CLR CLK
DJNZ R2,READL
MOV DATAL,A;将读取的低8位数据保存
SETB CS
;启动另一次转换过程
RET
;数据转换子程序,将读得的16位数据转换为12位温度值,去掉无用的位。
D16T12:MOV A,DATAL
CLR C
RLC A
MOV DATAL,A
;数据整体右移1位,
MOV A,DATAH;以去掉D15伪志位
RLC A
SWAP A ;将DATAH中的数据高低4位互换
MOV B,A ;数据暂存于B中
MOV A,#0FH ;得到温度值的D11~D8位,并将D15~D12位置0
MOV TDATAH,A;转换后的数据送温度高位
MOV A,B;取出温度值的D7~D4位
ANL A,#0F0H
MOV B,A;暂存B中
MOV A,DATAL
ANL A,#0F0H ;取出温度值的D3~D0
SWAP,A
ORL A,B ;合并成低位字节
MOV TDATAL,A ;转换后的数据送温度高位
RET
|
|