当执行一条指令时,首先需要根据PC中存放的指令地址,将指令由内存取到指令寄存器中,此过程称为“取指令”。与此同时,PC中的地址或自动加1或由转移指针给出下一条指令的地址。此后经过分析指令,执行指令。完成第一条指令的执行,而后根据PC取出第二条指令的地址,如此循环,执行每一条指令。
程序计数器是计算机处理器中的寄存器,它包含当前正在执行的指令的地址(位置)。当每个指令被获取,程序计数器的存储地址加一。在每个指令被获取之后,程序计数器指向顺序中的下一个指令。当计算机重启或复位时,程序计数器通常恢复到零。
特点
为了保证程序(在 *** 作系统中理解为进程)能够连续地执行下去,处理器必须具有某些手段来确定下一条指令的地址。而程序计数器正是起到这种作用,所以通常又称为指令计数器。在程序开始执行前,必须将它的起始地址,即程序的第一条指令所在的内存单元地址送入程序计数器,因此程序计数器的内容即是从内存提取的一条指令的地址。当执行指令时,处理器将自动修改PC的内容,即每执行一条指令PC增加一个量,这个量等于指令所含的字节数,以便使其保持的总是将要执行的下一条指令的地址。由于大多数指令都是按顺序来执行的,所以修改的过程通常只是简单的对PC加1。
但是,当遇到转移指令如JMP(跳转、外语全称:JUMP)指令时,后继指令的地址(即PC的内容)必须从指令寄存器中的地址字段取得。在这种情况下,下一条从内存取出的指令将由转移指令来规定,而不像通常一样按顺序来取得。因此程序计数器的结构应当是具有寄存信息和计数两种功能的结构。
这个以前做过,给:
#include <AT89X51H>
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char Count;
void delay10ms(void)
{
unsigned char i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
void main(void)
{
Count=0;
P0=table[Count/10];
P2=table[Count%10];
while(1)
{
if(P3_7==0)
{
delay10ms();
if(P3_7==0)
{
Count++;
if(Count==100)
{
Count=0;
}
P0=table[Count/10];
P2=table[Count%10];
while(P3_7==0);
}
}
}
}
while(1)
{
th1=TH0;
tl=TL0;
th2=TL0;
if(th1==th2)
break;
}
你的程序在这里死循环了,TH0 和TL0 相等的时候才能跳出死循环,不知道你这里为什么这么写~把这里改改吧~
使用步骤:
1、开机回零,按设定或计数键进入计数程序。(数一定数量产品,如五或十)
2、放在秤上再按设定或计数键进入计数。(计数显示最大量因秤而定)
3、再按设定或计数键退出计数系统。
电子计数秤是一种自动计数机械装置,具有自动计数功能,现被广泛应用于工业生产中。
简介:
电子计数秤即是一种具有计数功能的电子秤,多用于零件工厂、工艺品加工厂等领域。这种电子秤可以精确测算一堆零件的数量,因此极大的提高了工厂仓储人员的工作效率,为企业节省了大量开支。
区别:
我们都知道电子秤按功能分可以分为电子计数秤、电子计价秤和电子计重秤,那么电子计数秤和后者又有什么区别呢
首先电子计重秤是一种功能最为简单的电子秤,只具有电子秤最基本的计重等功能;其次电子计价秤则在此基础上加入了计价功能,多用于超市、便利店、和菜市场等场合;而电子计数秤则是在计重秤的基础上加入了计数功能,比如上海亚津计数秤,具有一键自动校准技术,便于用户日后用户校准。
电子称称重计数的步骤:
1、计数电子秤开机预热10分钟;
2、单重取样:人工数出100个单重相同的元件,然后把数好的元件放在称盘的中心位置,利用数字按键输入数量值(如100),然后按“单重设定”键,这时计数电子秤的单重窗口显示此批次元件的单重值;
3、单重储存:按住“单重设定”键约2秒钟在输入0-9任意数字键,此时的单重值已经存入电子秤中(不会因正常关机而丢失数据),这样就可以进行计数称称重了;
4、单重调处:每次重新开机时可以随时调用(按相应的数字键,然后双击“单重设定”键就可以调处已存的单重数据),随时可以进行计数称重;
5、正常计数:随意取出若干未知数量的同类元件防在秤盘上,计数电子秤迅速的显示出计算结果,然后人工验证显示结果的准确性,验证结果为100%正确,误差为0。
看不见你接线图,先来一个C语言的,汇编确实没C语言方便
#include<reg52h>
#define uchar unsigned char
#define uint unsigned int
uchar a , b=0;
sbit wei1=P10;
sbit wei2=P11;
//共阴数码管七段码
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77};
void Delay1ms(uint i) //1ms延时程序
{
uint j;
for(;i>0;i--)
{
for(j=0;j<164;j++)
{;}
}
}
void display( uchar a)) //显示程序
{
P0= table[a/10];//十位
wei1=1;
Delay1ms(2) ;
wei1=0;
P0= table[a%10];//个位
wei2=1;
Delay1ms(2) ;
wei2=0;
}
void main(void )//主程序
{
TMOD=0x01;// 定时器0工作方式一
ET0=1;
EA=1;
TH0=(65536-50000)/256;//定时50ms
TL0=(65536-50000)%256;
TR0=1;
while(1)
{
display(b);
}
}
//中断子程序
void Timer0(void) interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
if(a==20)//20次是1 秒
{ a=0;b++;}
if(b==100)
{ b=0;}
}
以上就是关于程序计数器是什么东西全部的内容,包括:程序计数器是什么东西、用单片机c51,c语言编00-99计数器程序!谢谢!!、90C516RD+的一个计数器程序如下:等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)