关闭窗口.docx

上传人:b****5 文档编号:4704411 上传时间:2022-12-07 格式:DOCX 页数:61 大小:310.88KB
下载 相关 举报
关闭窗口.docx_第1页
第1页 / 共61页
关闭窗口.docx_第2页
第2页 / 共61页
关闭窗口.docx_第3页
第3页 / 共61页
关闭窗口.docx_第4页
第4页 / 共61页
关闭窗口.docx_第5页
第5页 / 共61页
点击查看更多>>
下载资源
资源描述

关闭窗口.docx

《关闭窗口.docx》由会员分享,可在线阅读,更多相关《关闭窗口.docx(61页珍藏版)》请在冰豆网上搜索。

关闭窗口.docx

关闭窗口

文章编号:

346----加入日期:

02-9-15

『关闭窗口』

实时时钟芯片DS1302的C51程序列子 

实时时钟模DS1302程序列子

    /*********************************************************************/

/*实时时钟模块时钟芯片型号:

DS1302*/

/*/

/*********************************************************************/

sbitT_CLK=P2^7;/*实时时钟时钟线引脚*/

sbitT_IO=P1^4;/*实时时钟数据线引脚*/

sbitT_RST=P1^5;/*实时时钟复位线引脚*/

/********************************************************************

*

*名称:

v_RTInputByte

*说明:

*功能:

往DS1302写入1Byte数据

*调用:

*输入:

ucDa写入的数据

*返回值:

***********************************************************************/

voidv_RTInputByte(ucharucDa)

{

uchari;

ACC=ucDa;

for(i=8;i>0;i--)

{

T_IO=ACC0;/*相当于汇编中的RRC*/

T_CLK=1;

T_CLK=0;

ACC=ACC>>1;

}

}

/********************************************************************

*

*名称:

ucharuc_RTOutputByte

*说明:

*功能:

从DS1302读取1Byte数据

*调用:

*输入:

*返回值:

ACC

***********************************************************************/

ucharuc_RTOutputByte(void)

{

uchari;

for(i=8;i>0;i--)

{

ACC=ACC>>1;/*相当于汇编中的RRC*/

ACC7=T_IO;

T_CLK=1;

T_CLK=0;

}

return(ACC);

}

/********************************************************************

*

*名称:

v_W1302

*说明:

先写地址,后写命令/数据

*功能:

往DS1302写入数据

*调用:

v_RTInputByte()

*输入:

ucAddr:

DS1302地址,ucDa:

要写的数据

*返回值:

***********************************************************************/

voidv_W1302(ucharucAddr,ucharucDa)

{

T_RST=0;

T_CLK=0;

T_RST=1;

v_RTInputByte(ucAddr);/*地址,命令*/

v_RTInputByte(ucDa);/*写1Byte数据*/

T_CLK=1;

T_RST=0;

}

/********************************************************************

*

*名称:

uc_R1302

*说明:

先写地址,后读命令/数据

*功能:

读取DS1302某地址的数据

*调用:

v_RTInputByte(),uc_RTOutputByte()

*输入:

ucAddr:

DS1302地址

*返回值:

ucDa:

读取的数据

***********************************************************************/

ucharuc_R1302(ucharucAddr)

{

ucharucDa;

T_RST=0;

T_CLK=0;

T_RST=1;

v_RTInputByte(ucAddr);/*地址,命令*/

ucDa=uc_RTOutputByte();/*读1Byte数据*/

T_CLK=1;

T_RST=0;

return(ucDa);

}

/********************************************************************

*

*名称:

v_BurstW1302T

*说明:

先写地址,后写数据(时钟多字节方式)

*功能:

往DS1302写入时钟数据(多字节方式)

*调用:

v_RTInputByte()

*输入:

pSecDa:

时钟数据地址格式为:

秒分时日月星期年控制

*8Byte(BCD码)1B1B1B1B1B1B1B1B

*返回值:

***********************************************************************/

voidv_BurstW1302T(uchar*pSecDa)

{

uchari;

v_W1302(0x8e,0x00);/*控制命令,WP=0,写操作?

*/

T_RST=0;

T_CLK=0;

T_RST=1;

v_RTInputByte(0xbe);/*0xbe:

时钟多字节写命令*/

for(i=8;i>0;i--)/*8Byte=7Byte时钟数据+1Byte控制*/

{

v_RTInputByte(*pSecDa);/*写1Byte数据*/

pSecDa++;

}

T_CLK=1;

T_RST=0;

}

/********************************************************************

*

*名称:

v_BurstR1302T

*说明:

先写地址,后读命令/数据(时钟多字节方式)

*功能:

读取DS1302时钟数据

*调用:

v_RTInputByte(),uc_RTOutputByte()

*输入:

pSecDa:

时钟数据地址格式为:

秒分时日月星期年

*7Byte(BCD码)1B1B1B1B1B1B1B

*返回值:

ucDa:

读取的数据

***********************************************************************/

voidv_BurstR1302T(uchar*pSecDa)

{

uchari;

T_RST=0;

T_CLK=0;

T_RST=1;

v_RTInputByte(0xbf);/*0xbf:

时钟多字节读命令*/

for(i=8;i>0;i--)

{

*pSecDa=uc_RTOutputByte();/*读1Byte数据*/

pSecDa++;

}

T_CLK=1;

T_RST=0;

}

/********************************************************************

*

*名称:

v_BurstW1302R

*说明:

先写地址,后写数据(寄存器多字节方式)

*功能:

往DS1302寄存器数写入数据(多字节方式)

*调用:

v_RTInputByte()

*输入:

pReDa:

寄存器数据地址

*返回值:

***********************************************************************/

voidv_BurstW1302R(uchar*pReDa)

{

uchari;

v_W1302(0x8e,0x00);/*控制命令,WP=0,写操作?

*/

T_RST=0;

T_CLK=0;

T_RST=1;

v_RTInputByte(0xfe);/*0xbe:

时钟多字节写命令*/

for(i=31;i>0;i--)/*31Byte寄存器数据*/

{

v_RTInputByte(*pReDa);/*写1Byte数据*/

pReDa++;

}

T_CLK=1;

T_RST=0;

}

/********************************************************************

*

*名称:

uc_BurstR1302R

*说明:

先写地址,后读命令/数据(寄存器多字节方式)

*功能:

读取DS1302寄存器数据

*调用:

v_RTInputByte(),uc_RTOutputByte()

*输入:

pReDa:

寄存器数据地址

*返回值:

***********************************************************************/

voidv_BurstR1302R(uchar*pReDa)

{

uchari;

T_RST=0;

T_CLK=0;

T_RST=1;

v_RTInputByte(0xff);/*0xbf:

时钟多字节读命令*/

for(i=31;i>0;i--)/*31Byte寄存器数据*/

{

*pReDa=uc_RTOutputByte();/*读1Byte数据*/

pReDa++;

}

T_CLK=1;

T_RST=0;

}

/********************************************************************

*

*名称:

v_Set1302

*说明:

*功能:

设置初始时间

*调用:

v_W1302()

*输入:

pSecDa:

初始时间地址。

初始时间格式为:

秒分时日月星期年

*7Byte(BCD码)1B1B1B1B1B1B1B

*返回值:

***********************************************************************/

voidv_Set1302(uchar*pSecDa)

{

uchari;

ucharucAddr=0x80;

v_W1302(0x8e,0x00);/*控制命令,WP=0,写操作?

*/

for(i=7;i>0;i--)

{

v_W1302(ucAddr,*pSecDa);/*秒分时日月星期年*/

pSecDa++;

ucAddr+=2;

}

v_W1302(0x8e,0x80);/*控制命令,WP=1,写保护?

*/

}

/********************************************************************

*

*名称:

v_Get1302

*说明:

*功能:

读取DS1302当前时间

*调用:

uc_R1302()

*输入:

ucCurtime:

保存当前时间地址。

当前时间格式为:

秒分时日月星期年

*7Byte(BCD码)1B1B1B1B1B1B1B

*返回值:

***********************************************************************/

voidv_Get1302(ucharucCurtime[])

{

uchari;

ucharucAddr=0x81;

for(i=0;i<7;i++)

{

ucCurtime[i]=uc_R1302(ucAddr);/*格式为:

秒分时日月

星期年*/

ucAddr+=2;

}

}

对于PDF文件,建议您用“右键/目标另存为”下载到本地查看。

欢迎您到51虾坛欢迎您对本文提出您的见解。

如果本文侵犯了您的权益,请及时通知版主删除,谢谢!

文章编号:

322----加入日期:

02-9-30

『关闭窗口』

DS1820,一线数据传输,仅三条腿的单芯片温度测量,C51程序.

//芯片资料请到查找

//DS1820C51子程序

//这里以11.0592M晶体为例,不同的晶体速度可能需要调整延时的时间

//sbitDQ=P2^1;//根据实际情况定义端口

typedefunsignedcharbyte;

typedefunsignedint  word;

//延时

voiddelay(worduseconds)

{

  for(;useconds>0;useconds--);

}

//复位

byteow_reset(void)

{

  bytepresence;

  DQ=0;//pullDQlinelow

  delay(29);//leaveitlowfor480us

  DQ=1;//allowlinetoreturnhigh

  delay(3);//waitforpresence

  presence=DQ;//getpresencesignal

  delay(25);//waitforendoftimeslot

  return(presence);//presencesignalreturned

}     //0=presence,1=nopart

//从1-wire总线上读取一个字节

byteread_byte(void)

{

  bytei;

  bytevalue=0;

  for(i=8;i>0;i--)

  {

    value>>=1;

    DQ=0;//pullDQlowtostarttimeslot

    DQ=1;//thenreturnhigh

    delay

(1);  //for(i=0;i<3;i++);

    if(DQ)value|=0x80;

    delay(6);//waitforrestoftimeslot

  }

  return(value);

}

//向1-WIRE总线上写一个字节

voidwrite_byte(charval)

{

  bytei;

  for(i=8;i>0;i--)//writesbyte,onebitatatime

  {

    DQ=0;//pullDQlowtostarttimeslot

    DQ=val&0x01;

    delay(5);//holdvalueforremainderoftimeslot

    DQ=1;

    val=val/2;

  }

  delay(5);

}

//读取温度

charRead_Temperature(void)

{

  union{

    bytec[2];

    intx;

  }temp;

  ow_reset();

  write_byte(0xCC);//SkipROM

  write_byte(0xBE);//ReadScratchPad

  temp.c[1]=read_byte();

  temp.c[0]=read_byte();

  ow_reset();

  write_byte(0xCC);//SkipROM

  write_byte(0x44);//StartConversion

  returntemp.x/2;

}

对于PDF文件,建议您用“右键/目标另存为”下载到本地查看。

欢迎您到51虾坛欢迎您对本文提出您的见解。

如果本文侵犯了您的权益,请及时通知版主删除,谢谢!

文章编号:

320----加入日期:

02-9-30

『关闭窗口』

keilc6.20c直接嵌入汇编的方法!

(C51BBS网友cuiwei)

上此站以来,得到大家的很多的帮助,感谢大家!

特此奉上"点心"一块供大家品尝。

希望

能增加你营养。

//

#ifdefASM

         unsignedlongshiftR1(registerunsignedlong);

#else    

         externunsignedlongshiftR1(registerunsignedlong);

#endif

//endofasm.h

//

#defineASM

#include

#include

#pragmaOT(4,speed)

unsignedlong    shiftR1(registerunsignedlong    x)

{

    #pragmaasm

    clrc

    mova,r4

    rrca

    movr4,a

    mova,r5

    rrca

    movr5,a

    mova,r6

    rrca

    movr6,a

    mova,r7

    rrca

    movr7,a

    

    #pragmaendasm

    return(x);

}

//endofasm.c

将此源文件加入要编译的工程文件,

将光标指向此文件,选择右键菜单“optionforfile'asm.c'”,

将属性单“properties”中的“GenerateAssemblerSRCFile”“AssembleSRCFile”

两项设置成黑体的“√”将“LinkPublicOnly”的“√”去掉,再编译即可。

用此方法可以在c源代码的任意位置用#pragmaasm和#pragmaendasm嵌入汇编语句。

但要注意的是在直接使用形参时要小心,在不同的优化级别下产生的汇编代码有所不同,

可以察看对应的.lst文件看一看,得到正确的优化级别后,#pragmaOT(x,speed)锁定

优化级别(这里的值是0-9)。

如有别的问题给我发个邮件。

对于PDF文件,建议您用“右键/目标另存为”下载到本地查看。

欢迎您到51虾坛欢迎您对本文提出您的见解。

如果本文侵犯了您的权益,请及时通知版主删除,谢谢!

文章编号:

301----加入日期:

02-4-10

『关闭窗口』

CRC16-STANDARD的快速算法,51汇编。

本人在赤壁车站的系统设计中就利用CRC16-STANDARD算法,以保证信息的真确发送,该系统采用了485半双工通讯本人在赤壁车站的系统设计中就利用CRC16-STANDARD算法,以保证信息的真确发送,该系统采用了485半双工通讯。

效果很好!

(注:

CRC16算法包括有好几种算法,如:

CRC16_STANDARD

CRC16-NORMAL,大家小心了)

CRC16-STANDARD的快速算法

 

;入口:

R0-原CRC结果高位R1-原CRC结果低位R2-下个参与计算的字节值

;(最开始可设置R0=0,R1=0,R2=第一字节值)

;出口:

R0-CRC结果高位R1-CRC结果低位

 

影响:

A,DPH,DPL

CRC16:

PUSHDPH

PUSHDPL

PUSHACC

MOVA,R1

XRLA,R2

MOVDPH,#20h

MOVDPL,A

CLRA

MOVCA,@A+DPTR

XRLA,R0

MOVR1,A

INCDPH

CLRA

MOVCA,@A+DPTR

MOVR0,A

POPACC

POPDPL

POPDPh

RET

NOP

NOP

LJMPMAIN

ORG2000H;(根据你的实际情况而定)

CRCTABLE:

DB

000H,0C1H,081H,040H,001H,0C0H,080H,041H,001H,0C0H,080H,041H,000H,0C1H,081H,040H

DB

001H,0C0H,080H,041H,000H,0C1H,081H,040H,000H,0C1H,081H,040H,001H,0C0H,080H,041H

DB

001H,0C0H,080H,041H,000H,0C1H,081H,040H,000H,0C1H,081H,040H,001H,0C0H,080H,041H

DB

000H,0C1H,081H,040H,001H,0C0H,080H,041H,001H,0C0H,080H,041H,000H,0C1H,081H,040H

DB

001H,0C0H,080H,041H,000H,0C1H,081H,040H,000H,0C1H,081H,040H,001H,0C0H,080H,041H

DB

000H,0C1H,081H,040H,001H,0C0H,080H,041H,001H,0C0H,080H,041H,000H,0C1H,081H,040H

DB

000H,0C1H,081H,040H,001H,0C0H,080H,041H,001H,0C0H,080H,041H,000H,0C1H,081H,040H

DB

001H,0C0H,080H,041H,000H,0C1H,081H,040H,000H,0C1H,081H,040H,001H,0C0H,080H,041H

DB

001H,0C0H,080H,041H,000H,0C1H,081H,040H,000H,0C1H,081H,040H,001H,0C0H,080H,041H

DB

000H,0C1H,081H,040H,001H,0C0H,080H,041H,001H,0C0H,080H,041H,000H,0C1H,081H,040H

DB

00

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 中医中药

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1