BitCntbitcnt翻译

大家好,今天来为大家分享BitCnt的一些知识点,和bitcnt翻译的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!

本文目录

51单片机I2C总线读一个字节if(SDA==1)retc=retc+1;是什么意思求单片机程序:汇编语言数字钟翻译这段代码一个51单片机电子钟程序,求详细的解释啊急急急!!!51单片机I2C总线读一个字节if(SDA==1)retc=retc+1;是什么意思retc=0;//变量retc归零

retc=retc<<1;//变量向左移位

if(SDA==1)retc=retc+1;//这句话,其实就是接收一个位,因为上一句向左移位了,所以这句话就要接收下一位了,向左移位,最低位为0,如果接收管脚为0,那么就是0,如果为1,那么rec变量应该最低位变为1,程序里+1,其实就是变最低为1,以完成数据位的正确接收

求单片机程序:汇编语言数字钟用DS1302+单片机比较简单;DS1302程序(51汇编)

;推荐

;1.每次上电,必须把秒寄存器高位(第7位)设置为0,时钟才能走时。

;2.如果需要写入数据和时钟日历信息,必须把“写保护”寄存器设置成为0

;内存数据定义

BitCntdata3Ch;数据位计数器

ByteCntdata3Dh;数据字节计数器

Commanddata3Eh;命令字节地址

RcvDatDATA40H;接收数据缓冲区

XmtDatDATA50H;发送数据缓冲区

;端口位定义

IO_DATAbitP1.6;数据传送总线

SCLKbitP1.5;时钟控制总线

RSTbitP1.7;复位总线

RSBITP3.5

RWBITP3.6

ENBITP3.7

ORG0000H

ORG0013H

LCALLJKS

AJMPKS

;****************************;mainprogram

ORG0030H

KS:CLRRST

MOVSP,#2AH

;----LCD初始化----

CLREN;使能端为0,液晶执行命令

INIT_LCD:

MOVA,#38H;双列显示,字形5*7点阵

ACALLWCOM

ACALLDELAY1

MOVA,#38H;双列显示,字形5*7点阵

ACALLWCOM

ACALLDELAY1

MOVA,#38H;双列显示,字形5*7点阵

ACALLWCOM

ACALLDELAY1

MOVA,#0CH;开显示,关光标

ACALLWCOM

ACALLDELAY1

MOVA,#01H;清除LCD显示屏

ACALLWCOM

ACALLDELAY1

MOVA,#06H;地址加1

ACALLWCOM

ACALLDELAY1

;------------------------------------初始化1302-------------------------

SET1302:

LCALLWrite_Enable;写允许

LCALLOsc_Disable

LCALLWrite_Multiplebyte;初始化1302,将我们要设定的数据写入

LCALLRead_Multiplebyte;将我们设定的数据读出来

LCALLOsc_Enable

START:

ACALLLCD

LCALLRead_Multiplebyte

AJMPSTART

;---------------------LCD显示-------------------------

LCD:

MOVA,#11001000B

LCALLWCOM

MOVA,#0;显示时间

MOVA,42H

LCALLSSH2

MOVA,#00111010B

LCALLWDATA

MOVA,41H

LCALLSSH2

MOVA,#00111010B

LCALLWDATA

MOVA,40H

LCALLSSH2

MOVA,#11000000B

LCALLWCOM

MOVA,#0;显示日期字符

MOVA,46H

LCALLSSH2

MOVA,#00101101B

LCALLWDATA

MOVA,44H

LCALLSSH2

MOVA,#00101101B

LCALLWDATA

MOVA,43H

LCALLSSH2

RET

SSH2:

MOVB,#16

DIVAB

MOV58H,B

MOV59H,A

MOVA,59H

MOVDPTR,#TAB

MOVCA,@A+DPTR

ACALLWDATA

MOVA,58H

MOVDPTR,#TAB

MOVCA,@A+DPTR

ACALLWDATA

RET

;-----------------------------------------------------

;写指令、数据使能子程序

;-----------------------------------------------------

WCOM:;写指令使能

ACALLDELAY0

MOVP0,A

CLRRS

CLRRW

CLREN

CLREN

CLREN

SETBEN

RET

WDATA:;写数据使能

ACALLDELAY0

MOVP0,A

SETBRS;RS=H,RW=L,D0-D7=数据,E=高脉冲

CLRRW

CLREN

CLREN

CLREN

SETBEN

RET

;****判忙音****

DELAY0:

MOVP0,#0FFH

CLRRS

SETBRW

CLREN

NOP

SETBEN

JBP0.7,DELAY0

RET

TAB:DB00110000B,00110001B,00110010B,00110011B

DB00110100B,00110101B,00110110B,00110111B

DB00111000B,00111001B

;********************************************************************************************

;发送数据程序

;名称:Send_Byte

;描述:发送ByteCnt个字节给被控器DS1302

;命令字节地址在Command中

;所发送数据的字节数在ByteCnt中发送的数据在XmtDat缓冲区中

;********************************************************************************************

Send_Byte:

CLRRST;复位引脚为低电平所有数据传送终止

NOP

CLRSCLK;清时钟总线

NOP

SETBRST;复位引脚为高电平逻辑控制有效

NOP

MOVA,Command;准备发送命令字节

MOVBitCnt,#08h;传送位数为8

S_Byte0:

RRCA;将最低位传送给进位位C

MOVIO_DATA,C;位传送至数据总线

NOP

SETBSCLK;时钟上升沿发送数据有效

NOP

CLRSCLK;清时钟总线

DJNZBitCnt,S_Byte0;位传送未完毕则继续

NOP

S_Byte1:;准备发送数据

MOVA,@R0;传送数据过程与传送命令相同

MOVBitCnt,#08h

S_Byte2:

RRCA

MOVIO_DATA,C

NOP

SETBSCLK

NOP

CLRSCLK

DJNZBitCnt,S_Byte2

INCR0;发送数据的内存地址加1

DJNZByteCnt,S_Byte1;字节传送未完毕则继续

NOP

CLRRST;逻辑操作完毕清RST

RET

;***************************************************************************************

;接收数据程序;

;名称:Receive_Byte

;描述:从被控器DS1302接收ByteCnt个字节数据

;命令字节地址在Command中

;所接收数据的字节数在ByteCnt中接收的数据在RcvDat缓冲区中

;***********************************************************************************

Receive_Byte:

CLRRST;复位引脚为低电平所有数据传送终止

NOP

CLRSCLK;清时钟总线

NOP

SETBRST;复位引脚为高电平逻辑控制有效

MOVA,Command;准备发送命令字节

MOVBitCnt,#08h;传送位数为8

R_Byte0:

RRCA;将最低位传送给进位位C

MOVIO_DATA,C;位传送至数据总线

NOP

SETBSCLK;时钟上升沿发送数据有效

NOP

CLRSCLK;清时钟总线

DJNZBitCnt,R_Byte0;位传送未完毕则继续

NOP

R_Byte1:;准备接收数据

CLRA;清类加器

CLRC;清进位位C

MOVBitCnt,#08h;接收位数为8

R_Byte2:

NOP

MOVC,IO_DATA;数据总线上的数据传送给C

RRCA;从最低位接收数据

SETBSCLK;时钟总线置高

NOP

CLRSCLK;时钟下降沿接收数据有效

DJNZBitCnt,R_Byte2;位接收未完毕则继续

MOV@R1,A;接收到的完整数据字节放入接收内存缓冲区

INCR1;接收数据的内存地址加1

DJNZByteCnt,R_Byte1;字节接收未完毕则继续

NOP

CLRRST;逻辑操作完毕清RST

RET

;--写保护寄存器操作------------------------------------------

Write_Enable:

MOVCommand,#8Eh;命令字节为8E

MOVByteCnt,#1;单字节传送模式

MOVR0,#XmtDat;数据地址覆给R0

MOVXmtDat,#00h;数据内容为0写入允许

ACALLSend_Byte;调用写入数据子程序

RET

;当写保护寄存器的最高位为1时禁止数据写入寄存器---------------

Write_Disable:

MOVCommand,#8Eh;命令字节为8E

MOVByteCnt,#1;单字节传送模式

MOVR0,#XmtDat;数据地址覆给R0

MOVXmtDat,#80h;数据内容为80h禁止写入

ACALLSend_Byte;调用写入数据子程序

RET;返回调用本子程序处

;当把秒寄存器的第7位时钟停止位设置为0时起动时钟开始---------

Osc_Enable:

MOVCommand,#80h;命令字节为80

MOVByteCnt,#1;单字节传送模式

MOVR0,#XmtDat;数据地址覆给R0

MOVXmtDat,#00h;数据内容为0振荡器工作允许

ACALLSend_Byte;调用写入数据子程序

RET;返回调用本子程序处

;当把秒寄存器的第7位时钟停止位设置为1时时钟振荡器停止HT1380进入低功耗方式---------------

Osc_Disable:

MOVCommand,#80h;命令字节为80

MOVByteCnt,#1;单字节传送模式

MOVR0,#XmtDat;数据地址覆给R0

MOVXmtDat,#80h;数据内容为80h振荡器停止

ACALLSend_Byte;调用写入数据子程序

RET;返回调用本子程序处

;写入00年6月21日星期三13时59分59---------------------

Write_Multiplebyte:

MOVCommand,#0BEh;命令字节为BEh

MOVByteCnt,#8;多字节写入模式此模块为8个

MOVR0,#XmtDat;数据地址覆给R0

MOVXmtDat,#59h;秒单元内容为59h

MOVXmtDat+1,#59h;分单元内容为59h

MOVXmtDat+2,#13h;时单元内容为13h

MOVXmtDat+3,#21h;日期单元内容为21h

MOVXmtDat+4,#06h;月单元内容为06h

MOVXmtDat+5,#03h;星期单元内容为03h

MOVXmtDat+6,#0;年单元内容为00h

MOVXmtDat+7,#0;写保护单元内容为00h

ACALLSend_Byte;调用写入数据子程序

RET;返回调用本子程序处

;读出寄存器0-7的内容程序设置如下

Read_Multiplebyte:

MOVCommand,#0BFh;命令字节为BFh

MOVByteCnt,#8;多字节读出模式此模块为8个

MOVR1,#RcvDat;数据地址覆给R1

ACALLReceive_Byte;调用读出数据子程序

RET;返回调用本子程序处

DELAY1:;延时10MS

MOV21H,#75

D2:MOV22H,#100

DJNZ22H,$

DJNZ21H,D2

RET

;=============================================================================================

END

翻译这段代码简单来说,就是一个电机驱动+共阳数码管+5按键的小demo。

5按键控制正转、反转、停止、加速、减速。

数码管显示方向和占空比。

一个51单片机电子钟程序,求详细的解释啊急急急!!!#include<AT89X51.H>

unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};//定义显示用的段码

unsignedchardispbitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//定义显示用的位码

unsignedchardispbuf[8]={0,0,16,0,0,16,0,0};//定义显示缓冲区

unsignedchardispbitcnt;//定义显示的位

unsignedcharsecond;//定义秒

unsignedcharminite;//定义分钟

unsignedcharhour;//定义小时

unsignedinttcnt;//定义定时累加器

unsignedcharmstcnt;//定义毫秒累加器

unsignedchari,j;

voidmain(void)//主函数

{

TMOD=0x02;//设置定时器工作模式

TH0=0x06;//设置初值

TL0=0x06;

TR0=1;//开定时器

ET0=1;//开定时器中断

EA=1;//开总中断

while(1)

{

if(P0_0==0)//判断P00口的按键是否按下

{

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

for(j=248;j>0;j--);//延时消抖

if(P0_0==0)//判断按键真的按下了

{

second++;//秒加1

if(second==60)//秒加到60?

{

second=0;//秒清零

}

dispbuf[0]=second;//取秒的个位放在显示缓冲

dispbuf[1]=second/10;//取秒的十位放在显示缓冲

while(P0_0==0);//等待,知道按键松开

}

}

if(P0_1==0)//p01的按键按下,设置分钟,请参考秒的程序,一样的

{

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

for(j=248;j>0;j--);

if(P0_1==0)

{

minite++;

if(minite==60)

{

minite=0;

}

dispbuf[3]=minite;

dispbuf[4]=minite/10;

while(P0_1==0);

}

}

if(P0_2==0)//p02的按键按下,设置小时,请参考秒的程序,一样的

{

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

for(j=248;j>0;j--);

if(P0_2==0)

{

hour++;

if(hour==24)

{

hour=0;

}

dispbuf[6]=hour;

dispbuf[7]=hour/10;

while(P0_2==0);

}

}

}

}

voidt0(void)interrupt1using0//定时器中断函数

{

mstcnt++;//累加器加一

if(mstcnt==8)//计时满8毫秒?

{

mstcnt=0;//累加器清零

P1=dispcode[dispbuf[dispbitcnt]];//送显示段码

P3=dispbitcode[dispbitcnt];//送显示位码

dispbitcnt++;//显示位加1

if(dispbitcnt==8)//8位都显示完了?

{

dispbitcnt=0;//从第一位开始显示

}

}

tcnt++;//累加器加一

if(tcnt==4000)//记满1秒

{

tcnt=0;//累加器清零

second++;//秒加一

if(second==60)//秒满60?

{

second=0;//秒清零

minite++;//分钟加一

if(minite==60)//分钟满60

{

minite=0;//分钟清零

hour++;//小时加1

if(hour==24)//小时满24

{

hour=0;//小时清零

}

}

}

dispbuf[0]=second;//将时分秒的个位与十位分开,装在显示区

dispbuf[1]=second/10;

dispbuf[3]=minite;

dispbuf[4]=minite/10;

dispbuf[6]=hour;

dispbuf[7]=hour/10;

}

}

其实这个程序不难,仔细想想,有不懂的再问我吧

关于BitCnt,bitcnt翻译的介绍到此结束,希望对大家有所帮助。

股市

考研复试已公布

ibm人工智能最新广告

股市二级市场交易规则

本文地址:http://www.cj8845.cn/13556.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 931614094@qq.com 举报,一经查实,本站将立刻删除。

上一篇: bitcnbitcny
下一篇: bitcoincore挖矿bitcoincore挖矿命令