电路设计,软件开发,专业项目团队承接电子产品开发!


ISPRO下载型编程器
火爆销售中

RS232/TTL转换器
全IC串口窃电

RS232/TTL转换线
全IC串口窃电

ByteBlasterMV Cable
CPLD/FPGA并口下载线

ByteBlaster II Cable ISPRO下载型编程器
支持S51/AVR/PIC
超级51开发板套件
前卫实用超值

PC/MCU/CPLD
三合一学习套件

全新万年历方案
AVR单片机开发板
 

Min51单片机仿真机
迷你型

ARM7开发板
仅售260元!
 

RS-232/RS-485双向接口电平转换器  

51单片机升级STM32
火爆销售中
MPLAB-ICD2
火爆销售中
LED51开发板
玩具又名图文显示棒

面板模块/开发板
经济危机明智决择

       

GSM MODEM GSM猫

SMS短信模块 工业级/全自动
火爆销售中

大功率数传电台

高速数传电台

您当前位置:电子技术资料 -> 外围驱动 -> 温度芯片驱动 ->

祝您阅读愉快!

ISPRO下载型编程器

RS232 TO TTL转换器
↑↑本文相关产品介绍↑↑

在C中调用汇编程序实现的8051和DS1820接口程序


类别:技术文章
来源:未知
作者:未知
关键字:DS1820
加入日期:2010-8-3

在C中调用汇编程序实现的8051和DS1820接口程序

/*中国电子网www.ec66.com*/
#include <reg51.h>

#include <stdio.h>

#include <math.h>

extern WDS1820(unsigned char x);

/* 写DS1820命令外部函数声明 */

extern RDS1820(unsigned char *pt);

/* 读DS1820数据外部函数声明 */

extern bit RTDS1820(void);

/* 复位DS1820外部函数声明 */

extern Delay15(unsigned char n);

/* 延时15μs外部函数声明 */

sbit P1_0=P1^0; /* sbit对象P1.0声明 */

void main (void) /* 主函数 */

{

unsigned data int i;

float data tempF;

unsigned char data temp[10],disbuf[10];

/* 存放温度数据和显示数据的局部数组变量声明 */

if(RTDS1820()!=1) error(0x3);

/* 复位并判DS1820是否存在 */

Delay15(0xff); /* 延时约15×255μs */

WDS1820(0xcc); WDS1820(0x44);

/* 向DS1820发跳读ROM和启动温度变换命令 */

P1_0=1; /* P1.0口置线高电平 */

do{ Delay15(0xff);i++;}while(i<=400);

/* 延时约1.5秒钟 */

if(RTDS1820()!=1) error(0x3);

/* 复位并判DS1820是否存在 */

Delay15(0xff); /* 延时约15×255μs */

WDS1820(0xcc); WDS1820(0xbe);

/* 向DS1820发跳读ROM和读9字节数据命令 */

RDS1820(&temp);

/* 9字节数据读入数组temp */

tempF=(((temp[1]<<8)+temp[0])>>1)-0.25

+((temp[7]-temp[6])/temp[7]);

/* 温度值修正计算 */

sprintf(&disbuf,"T=%+4.1f%c",tempF,'C');

/* 按T=±XXX.X C格式组织数据送disbuf */

display(&temp); /* 数据送LCD显示 */

}

以下是用A51宏汇编编写的DS1820接口源程序清单,共有4个子程序,其中 RTDS 1820无参数
传递,但具有bit对象的返回值,DELAY15和WDS1820带有一个经R7传递的无符号char类参
数,RDS1820带有一个经R7传递的1字节指针类参数。

NAME RW1820 ;定义模块名

?PR?RDS1820?RW1820 SEGMENT CODE

;RDS1820子程序代码段声明

?PR?WDS1820?RW1820 SEGMENT CODE

;WDS1820子程序代码段声明

?PR?RTDS1820?RW1820 SEGMENT CODE

;RTDS1820子程序代码段声明

?PR?DELAY15?RW1820 SEGMENT CODE

;DELAY15子程序代码段声明

PUBLIC RTDS1820,_WDS1820,_RDS1820,_DELAY15

;公开函数名以便C模块可调用它们

RSEG ?PR?RDS1820?RW1820

_RDS1820:

;RDS1820代码段起始,完成9字节温度数据的读取

MOV R1,#9

;置9字节数据计数器初值
MOV A,R7

;取经R7传递的数组temp首址(C中定义)

MOV R0,A

RD18201:MOV R2,#8

;置1字节位移位计数器初值

RD18202:SETB P1.0 ;P1.0置为高电平

NOP

NOP

CLR P1.0 ;P1.0置为低电平

NOP

NOP

SETB P1.0

;P1.0置为高电平,准备输入数据

MOV R7,#1 ;延时15μs

LCALL DELAY15

MOV C,P1.0

;P1.0状态读入位累加器

RRC A ;累加器A右移

DJNZ R2,RD18202

;判一个字节是否读完

MOV @R0,A ;保存结果

INC R0 ;地址指针加1

DJNZ R1,RD18201

;判9字节是否读完

RET ;返回

RSEG ?PR?WDS1820?RW1820

_WDS1820:

;WDS1820代码段起始,完成1字节命令的写入

MOV R1,#8

;置1字节位移位计数器初值

CLR C ;清位累加器

MOV A,R7

;取经R7传递的命令参数

WR18201:CLR P1.0 ;P1.0置为低电平

MOV R7,#1 ;延时15μs

LCALL DELAY15

RRC A

;累加器A右移1位

MOV P1.0,C

;发送1位数据给DS1820

MOV R7,#1 ;延时15μs

LCALL DELAY15

SETB P1.0 ;P1.0置为高电平

NOP

DJNZ R1,WR18201

;判1字节数据是否发送完毕

SETB P1.0 ;P1.0置为高电平

RET ;返回


您可能还会关注的相关技术资料:

中国电子网
www.EC66.com
QQ:34740080 EMAIL:iloveaoe@163.com
最佳浏览:1024*768
Copyright (C) 2001-2010 EC66.COM All Rights Reserved
Aoe/帝国 制作维护
粤ICP备18061901号