导航:首页 > 操作系统 > 51单片机求

51单片机求

发布时间:2023-06-02 12:56:21

Ⅰ 51单片机,求用汇编语言编写延时1小时的子程序,要精确到秒级别

这个可以做到,如果晶振是12M的话,一下方法可以实现延时1小时,精确度在秒级别。
DELAY1H:
MOV R7,#180 ;1/1000000
DLY1H:
LCALL DELAY_20S ;180*19.960603s +2*180
DJNZ R7,DLY1H ;2*180/1000000
RET 2/1000000
共延时时间:3592.9s误差为7.1秒,如果再精确的话,再加一点延时就可以了。

DELAY_20S: ;Total=19.960603s
MOV R2,# ;1
DLY1:
MOV R3,#200 ;1*200
DLY2:
MOV R4,#248 ;1**200*200
DJNZ R4,$ ;2**248*200*200
DJNZ R3,DLY2 ;2*200*200
DJNZ R2,DLY1 ;2*200
RET ;2

Ⅱ 51单片机编程求指导。。。

嘿嘿 楼上的老兄给出的程序也不对呀 看上去挺工整的,错误好几出啊,是得不到正确结果的。
其实算法很简单,只要熟悉一下单片机的加法指令和循环移位指令,自己就可以编写出来。
1 算法:
就是使用指针 连续对20H开始的连续4个单字节二进制数相加,结果存入31H单元,要考虑进位,(进位部分存入31H单元)
求平均值 就是对和除4,可以使用循环右移指令 每移一次 相当于除2 总共2次就行了。

2 楼上的错误: 使用指令 ADD A,31H 求的和在累加器A里,并没有存入31H
使用指令 MOV A,31H ;低位送A
RRC A ;带进位循环右移完成一次除2
同样没有将结果回送给31H单元(保存)

呵呵 满意就选满意回答 (想要正确程序 可以发消息给我)

Ⅲ 51单片机求这个时钟的c语言程序

以下是四位数码管可调时带秒闪烁的c51单片机电子钟程序(c语言)。

/**** 本程序中,晶振为12MHz, ****/
/**** 时间控制采用定时中断控制方式。 ****/
/**** 模式和时间调整采用查询方式。 ****/

#include<reg52.h>

sbit P20=P2^0; //分个位控制端
sbit P21=P2^1; //分十位控制端
sbit P22=P2^2; //时个位控制端
sbit P23=P2^3; //时十位控制端
sbit led=P2^7; //second display led

sbit key0=P3^0; //模式设置
sbit key1=P3^1; //加
sbit key2=P3^2; //减

unsigned char hour,min,sec,T50ms;
unsigned char modstate; //模式状态

unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//段码

void init(); //初始化子程序声明
void delay500us(unsigned char X); //延时子程序声明
void display(); //显示子程序声明
void display001(); //显示子程序声明
void display002(); //显示子程序声明
void keyscan(); //按键识别子程序声明

void main()
{
init();
while(1)
{
keyscan();
}
}

void init() //初始化子程序
{
TMOD=0x01;
TH0=(65536-49990)/256;
TL0=(65536-49990)%256;
ET0=1;
EA=1;
TR0=1;
}

void delay500us(unsigned char X)
{
unsigned char i,j;
for(i=X;i>0;i--)
for(j=248;j>0;j--);
}

void timer0() interrupt 1 //timer0中断服务子程序,定时时间为50ms,本程序加了10us的时间修正量
{
TMOD=0x01;
TH0=(65536-49990)/256;
TL0=(65536-49990)%256;

T50ms++;
if(T50ms>=20)
{
T50ms=0;
sec++;
if(sec>=60)
{
sec=0;
min++;
if(min>=60)
{
min=0;
hour++;
if(hour>=24)hour=0;
}
}
}
}

void display()
{
P20=1;
P21=1;
P22=1;
P23=1;
P0=table[hour/10];
P23=0;
delay500us(5);

P20=1;
P21=1;
P22=1;
P23=1;
P0=table[hour%10];
P22=0;
delay500us(5);

P20=1;
P21=1;
P22=1;
P23=1;
P0=table[min/10];
P21=0;
delay500us(5);

P20=1;
P21=1;
P22=1;
P23=1;
P0=table[min%10];
P20=0;
delay500us(5);

if(T50ms<=10)led=0;
if(T50ms>10)led=1;
}

void display001()
{
P20=1;
P21=1;
P22=1;
P23=1;
P0=table[hour/10];
P23=0;
delay500us(10);

P20=1;
P21=1;
P22=1;
P23=1;
P0=table[hour%10];
P22=0;
delay500us(10);
}

void display002()
{
P20=1;
P21=1;
P22=1;
P23=1;
P0=table[min/10];
P21=0;
delay500us(10);

P20=1;
P21=1;
P22=1;
P23=1;
P0=table[min%10];
P20=0;
delay500us(10);
}

void keyscan() //按键识别钟程序
{
while(modstate==0)
{
display();
if(key0==0)
{
display();
if(key0==0)modstate++; //这两句加在一起为延时10ms软件防抖设计。
while(key0==0)display001(); //等待按键释放。
}
}
//****************************************************************************//
while(modstate==1)
{
display001();
if(key0==0)
{
display001();
if(key0==0)modstate++; //这两句加在一起为延时10ms软件防抖设计。
while(key0==0)display002(); //等待按键释放。
}

if(key1==0)
{
display001();
if(key1==0)
{
hour++;
if(hour>=24)hour=0;
while(key1==0)display001();
}
}
if(key2==0)
{
display001();
if(key2==0)
{
hour--;
if(hour>=24)hour=0;
while(key2==0)display001();
}
}
}
//****************************************************************************//
while(modstate==2)
{
display002();
if(key0==0)
{
display002();
if(key0==0)modstate=0; //这两句加在一起为延时10ms软件防抖设计。
while(key0==0)display(); //等待按键释放。
}

if(key1==0)
{
display002();
if(key1==0)
{
min++;
if(min>=60)min=0;
while(key1==0)display002();
}
}
if(key2==0)
{
display002();
if(key2==0)
{
min--;
if(min>=60)min=0;
while(key2==0)display002();
}
}
}
}

Ⅳ 求个51单片机开平方的汇编程序

汇编程序:用减奇数法开平方(16位)

命题:从 1 开始,把连续 n 项奇数的等差数列,求和,可以得到 n^2。

证明:1 + 3 + 5 + ... + (2n-1) = (1 + (2n-1)) * (n/2) = n^2。


那么,对于任意正整数 M,都会有:

M = 1 + 3 + 5 + … + ( 2n - 1 ) + ε

= n^2 + ε

= N + ε

式中 N 是完全平方数,N = n^2。

式中 ε 是小于 2n - 1 的误差。


由此,可推出“减奇数开平方”的算法。

即:在 M 中依次减去 1、3、5、...,直到不够减为止;

够减的次数 n,即为 N 的平方根。

程序可见:

这种求平方根的方法,效率很高,远远高于牛顿迭代法。

Ⅳ 51单片机用定时器计时应该如何计算求大神支招

这个其实很简单的,你只需要知道一个条件即可:晶振频率。
因为51单片机的机器周期计算公式是12/晶振频率MHz,若晶振为12MHz,则机器周期就是12/(12×10^6)=1us,也就是说计数器没1us计数一次。
那么有了这个条件就好办多了,一般来说,12MHz晶振下,16位定时器满计数是65536次,每次1us,最大就能计时65.536ms,则65536减去多少就是定时多少,如(65536-X)/256,就是定时X微秒。
那么如果晶振不是12MHz,就要把上述的X乘以12/晶振,得到的值就是定时时长。原理相同。
有不懂的地方随时回复我。
希望我的回答能帮助到你。

Ⅵ 求51单片机的c语言程序

#include<stc89.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x00};
uchar led[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0x00,0xFF};
sbit adrd=P3^7;
sbit adwr=P3^6;
sbit la=P2^6;
sbit wela=P2^7;

uchar date1=0;
uchar date2=50;
uchar date3=100;
uchar date4=150;
uchar date5=200;
uchar date6=255;

uchar a,sz;

void init();
void delay(uint z);
uchar adchushihua();
void shumaguan(uint shu);
void processing();
void main()
{
init();

while(1)
{

sz=adchushihua();
for(a=10;a>0;a--)
{
shumaguan(sz);
processing();
}
}
}

void init()
{

P0=0x7f;

}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

uchar adchushihua()
{
uchar shu;
adwr=1;
_nop_();
adwr=0;
_nop_();
adwr=1;

P1=0xff;

adrd=1;
_nop_();
adrd=0;
_nop_();
shu=P1;
adrd=1;

return shu;
}
void shumaguan(uint shu)
{
uchar ,shi,ge;
=shu/100;
shi=shu%100/10;
ge=shu%10;

la=1;
P0=table[];
la=0;
P0=0xff;
wela=1;
P0=0x7e;
wela=0;
delay(5);

la=1;
P0=table[shi];
la=0;
P0=0xff;
wela=1;
P0=0x7d;
wela=0;
delay(5);

la=1;
P0=table[ge];
la=0;
P0=0xff;
wela=1;
P0=0x7b;
wela=0;
delay(5);

}

void processing()
{
if((sz>=date1)&&(sz<=date2))
{
P1=0xfe;
}
else if((sz>=date2)&&(sz<=date3))
{
P1=0xfd;
}
else if((sz>=date3)&&(sz<=date4))
{
P1=0xfb;
}
else if((sz>=date4)&&(sz<=date5))
{
P1=0xf7;
}
else if((sz>=date5)&&(sz<date6))
{
P1=0xef;
}
else if(sz==date6)
{
P1=~P1;
delay(20);

}

}

这个是我刚刚写的 根据你的需要 反正闲来无事 我写的比较笼统 需要你自己根据 自己的实际情况来判断确定 我只是利用AD简单的处理 成数码管显示的数字 你要是 转换成电压 那就把里面的变量 修改一下 我写的那个控制LED灯亮就不要动了 只是修改一下他前面定义的数字就可以 最后那个是我自己加上去的有点趣味性 希望对你有帮助

Ⅶ 求51单片机代码详细注释/解释

首先,这代码不全……
其次,你需要解释哪些东西?这程序主体包含读卡头初始化、液晶初始化、显示时间/字符串等多种功能,基本上就是做个带液晶显示的读卡器。

阅读全文

与51单片机求相关的资料

热点内容
加密思维币 浏览:688
魅族访客文件夹 浏览:50
添加的文件夹怎么找 浏览:615
程序员涉黄 浏览:698
maven编译resources下的js 浏览:519
ubuntu文件移动命令 浏览:227
安卓i怎么查找苹果手机 浏览:949
云服务器宕机概率 浏览:229
在线买药用什么app知乎 浏览:813
ubuntu解压xz文件 浏览:674
宏杰加密时电脑关机 浏览:388
自己写单片机编译器 浏览:598
单片机按键闪烁 浏览:380
为什么icloud总是显连接服务器失败 浏览:888
如何设置域控服务器 浏览:738
想在上海租房子什么app好 浏览:186
编译程序各部分是必不可少的吗 浏览:887
编程不超过十行 浏览:765
数电编译器的作用 浏览:339
时间算法与现在有什么区别 浏览:164