关闭窗口Word文件下载.docx

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

关闭窗口Word文件下载.docx

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

关闭窗口Word文件下载.docx

{

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)

1;

ACC7=T_IO;

return(ACC);

v_W1302

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

往DS1302写入数据

v_RTInputByte()

ucAddr:

DS1302地址,ucDa:

要写的数据

voidv_W1302(ucharucAddr,ucharucDa)

T_RST=0;

T_RST=1;

v_RTInputByte(ucAddr);

/*地址,命令*/

v_RTInputByte(ucDa);

/*写1Byte数据*/

T_RST=0;

uc_R1302

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

读取DS1302某地址的数据

v_RTInputByte(),uc_RTOutputByte()

DS1302地址

ucDa:

读取的数据

ucharuc_R1302(ucharucAddr)

ucharucDa;

ucDa=uc_RTOutputByte();

/*读1Byte数据*/

return(ucDa);

v_BurstW1302T

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

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

pSecDa:

时钟数据地址格式为:

秒分时日月星期年控制

*8Byte(BCD码)1B1B1B1B1B1B1B1B

voidv_BurstW1302T(uchar*pSecDa)

v_W1302(0x8e,0x00);

/*控制命令,WP=0,写操作?

*/

v_RTInputByte(0xbe);

/*0xbe:

时钟多字节写命令*/

for(i=8;

i>

i--)/*8Byte=7Byte时钟数据+1Byte控制*/

v_RTInputByte(*pSecDa);

/*写1Byte数据*/

pSecDa++;

v_BurstR1302T

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

读取DS1302时钟数据

秒分时日月星期年

*7Byte(BCD码)1B1B1B1B1B1B1B

voidv_BurstR1302T(uchar*pSecDa)

v_RTInputByte(0xbf);

/*0xbf:

时钟多字节读命令*/

i--)

*pSecDa=uc_RTOutputByte();

v_BurstW1302R

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

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

pReDa:

寄存器数据地址

voidv_BurstW1302R(uchar*pReDa)

v_RTInputByte(0xfe);

for(i=31;

i--)/*31Byte寄存器数据*/

v_RTInputByte(*pReDa);

pReDa++;

uc_BurstR1302R

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

读取DS1302寄存器数据

voidv_BurstR1302R(uchar*pReDa)

v_RTInputByte(0xff);

i--)/*31Byte寄存器数据*/

*pReDa=uc_RTOutputByte();

v_Set1302

设置初始时间

v_W1302()

初始时间地址。

初始时间格式为:

voidv_Set1302(uchar*pSecDa)

ucharucAddr=0x80;

for(i=7;

i--)

v_W1302(ucAddr,*pSecDa);

/*秒分时日月星期年*/

ucAddr+=2;

v_W1302(0x8e,0x80);

/*控制命令,WP=1,写保护?

v_Get1302

读取DS1302当前时间

uc_R1302()

ucCurtime:

保存当前时间地址。

当前时间格式为:

voidv_Get1302(ucharucCurtime[])

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>

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;

value>

=1;

//pullDQlowtostarttimeslot

//thenreturnhigh

delay

(1);

//for(i=0;

i<

3;

i++);

if(DQ)value|=0x80;

delay(6);

//waitforrestoftimeslot

return(value);

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

voidwrite_byte(charval)

i--)//writesbyte,onebitatatime

DQ=val&

0x01;

delay(5);

//holdvalueforremainderoftimeslot

val=val/2;

//读取温度

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();

//SkipROM

write_byte(0x44);

//StartConversion

returntemp.x/2;

320----加入日期:

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

(C51BBS网友cuiwei)

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

特此奉上"

点心"

一块供大家品尝。

希望

能增加你营养。

//<

asm.h>

#ifdefASM

unsignedlongshiftR1(registerunsignedlong);

#else 

externunsignedlongshiftR1(registerunsignedlong);

#endif

//endofasm.h

asm.c>

#defineASM

#include<

reg52.h>

#pragmaOT(4,speed)

unsignedlong 

shiftR1(registerunsignedlong 

x)

#pragmaasm

clrc

mova,r4

rrca

movr4,a

mova,r5

movr5,a

mova,r6

movr6,a

mova,r7

movr7,a

#pragmaendasm

return(x);

//endofasm.c

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

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

asm.c'

”,

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

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

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

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

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

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

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

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

MOVR0,A

POPACC

POPDPL

POPDPh

RET

NOP

LJMPMAIN

ORG2000H;

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

CRCTABLE:

DB

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

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

00

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

当前位置:首页 > 高中教育 > 理化生

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

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