关闭窗口Word文件下载.docx
《关闭窗口Word文件下载.docx》由会员分享,可在线阅读,更多相关《关闭窗口Word文件下载.docx(61页珍藏版)》请在冰豆网上搜索。
![关闭窗口Word文件下载.docx](https://file1.bdocx.com/fileroot1/2022-12/7/49432d55-6d7d-4154-80cc-a609a6848020/49432d55-6d7d-4154-80cc-a609a68480201.gif)
{
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