可预置数计数器32位计数器的程序

可预置的8位计数器程序的主要部分分析-班级网站
文章分类:||
可预置的8位计数器程序的主要部分分析
13:00:17&& 阅读:载入中... 关键词:
可预置的8位计数器程序的主要部分分析
可预置的8位计数器程序的主要部分分析#include //器件配置文件#define uchar unsigned char //变量类型的宏定义#define uint unsigned intuchar code SEG7[10]={0x03,0x9f,0x25,0x0d,0x99, //0~9的数码管段码0x49,0x41,0x1f,0x01,0x09};uchar data cnt[8]; //在data区定义8位长度的数组,用来存放计数值uchar data pre_cnt[8]; //在data区定义8位长度的数组,用来存放预置值sbit drv=P3^4; //定义输出驱动端bit set_ //定义工作标志bit out_ //定义输出标志bit keydown_ //键按下标志
/****************************************************************/void scan_key(void) //扫描S1~S8键子程序开始{uchar i,m=0x01; //定义两个字符型局部变量,并赋值0x01给mP3_6=0;P3_7=1; //禁止发送给显示器,消隐有效for(i=0;i&8;i++) //循环8次{SBUF=255-m;while(!TI);TI=0; //依次发送数据使IC2的输出从右至左的列线为0if(!P3_5)pre_cnt++; //若检测到P3.5为0,说明某列线送出0时与连接//该列线的按键被按下,数组中对应的存放单元加1m&&=1; //m的取值使从右向左的下一条列线为0} //扫描S1~S8键子程序结束//----------------------------------------------------------------------------------------for(i=0;i&8;i++) //循环8次{if(pre_cnt&9)pre_cnt=0;} //对数组中的8个单元进行调整,其范围为0~9}
/*************************************************************/void dis_cnter(void) //显示计数器值子程序开始{ //定义字符型局部变量iP3_7=1;P3_6=1; //消隐有效,允许显示for(i=0;i&8;i++) //循环8次{SBUF=SEG7[cnt];while(!TI);TI=0;} //根据8个单元的计数值查表发送显示P3_7=0; //关闭消隐,正常显示} //显示计数器值子程序结束
/****************************************************************/void cnter(void) //计数转换子程序开始{ //定义字符型局部变量ifor(i=0;i&7;i++) //循环8次{if(cnt&9){cnt=0;cnt[i+1]++;}}//若计数器某位值大于9,则该位回0,//而高位被进位加1//------------------------------------if(cnt[7]&9){for(i=0;i&8;i++)cnt=0;}// 若计数器最高位值大于9,则计数器全清0} //计数转换子程序结束
/******************************************************************/void pt_cnt(void) //输出控制子程序开始{ if((cnt[0]==pre_cnt[0])&&(cnt[1]==pre_cnt[1])&&\(cnt[2]==pre_cnt[2])&&(cnt[3]==pre_cnt[3])&&\(cnt[4]==pre_cnt[4])&&(cnt[5]==pre_cnt[5])&&\(cnt[6]==pre_cnt[6])&&(cnt[7]==pre_cnt[7])) //若计数值等于预置值out_flag=1; //输出标志置1else out_flag=0; //否则输出标志置0//=================================================if(out_flag)drv=0; //若输出标志为1,输出端(P3.4)置0,驱动光耦U2else drv=1; //否则输出端(P3.4)置1} //输出控制子程序结束
/**********************************************************/void main(void) //主程序开始{ IE=0x84; //开放CPU中断,开放外中断1的中断IT1=1; //置外中断1为边沿触发while(1) //无限循环{P3_6=0;P3_7=1; //禁止发送给显示器,消隐有效SBUF=0x00;while(!TI);TI=0; //向IC2发送0x00,使IC2输出为全0if((P3&0x24)!=0x24)keydown_flag=1; //检测P3.2、P3.5是否为高电平。//若不为高电平,说明有键按下,键被按下标志置1else keydown_flag=0; //否则,键被按下标志置0//-------------------------------------------------------------------------------SBUF=0while(!TI);TI=0; //向IC2发送0xfeif(!P3_2)set_flag=!set_ //若P3.2为0,说明S9键按下,标志set_flag取反//==================================================if(!set_flag){cnter();dis_cnter();pt_cnt();delay(100);}//若标志set_flag为0,调用计数、显示计数、输出控制的子程序else {scan_key();dis_pre_cnter();delay(10);}否则标志set_flag为1,调用扫描S1~S8键、显示预置值的子程序//=====================================================if(keydown_flag)delay(300); //因有键按下,调用延时300mS子程序,//以免调整键值的速度过快}} //主程序结束
/***************************************************************/void extern_int1(void) interrupt 2 using 1 //外中断1服务子程序{cnt[0]++; //计数器的最低位加1}
原文网址:
相关链接:
( 21:34:41)
( 14:11:06)
( 13:35:33)
( 14:08:53)
( 19:46:49)
[我来说几句]
评论人姓名:
个人网站:
评论内容:
(127字符以内)
尚能输入:
  发表评论请自觉遵守和维护《》,也请不要发表威胁本站生存和声誉(如政治敏感、非法传销)的言论,如发表不良言论,文责自负,谢谢合作。
  一、一旦违犯法律法规,您将承担一切因您的行为而直接或间接导致的民事或刑事法律责任,本站工作人员有义务配合相关部门,提供必要的技术资料(如IP地址等)。
  二、自觉遵守爱国、守法、自律、真实、文明的原则,严禁发表有人身攻击倾向、有造谣生事嫌疑的言论,严禁发表虚假广告、色情、网络传销性质的内容,管理人员有权删除违反规定的内容或取消违规网友的发文权限甚至删除其ID。
志斌电子 版权所有&
Copyright& All Rights Reserved999天以内可预置倒计天数计数器的电路制作(1)_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
999天以内可预置倒计天数计数器的电路制作(1)
上传于||文档简介
&&倒​计​时​计​时​器​的​设​计
阅读已结束,如果下载本文需要使用
想免费下载本文?
你可能喜欢11-S7-200可编程序控制器_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
11-S7-200可编程序控制器
上传于||文档简介
&&西​门​子​S 0介​绍​以​及​扩​展​模​块
大小:1.19MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢PLC高速计数器计数值的读取与预设
添加时间:
来源: | 阅读量:144
1.计数值的读取 高速计数器的当前计数值都保存在HC存储单元中,高速计数器HSC0~HSC5的当前值分别保存在HC0~HC5单元中,这些单元中的数据为只读类型,即不能向这些单元写入数据。 高速计数器计数值的读取如图5-43所示。当I0.0触点由断开转为闭合时,上升沿P触点接通一个扫描周期,MOV_DW指令执行.将高速计数器HSC0当前的
&&& 1.计数值的读取
&&& 高速计数器的当前计数值都保存在HC存储单元中,高速计数器HSC0~HSC5的当前值分别保存在HC0~HC5单元中,这些单元中的数据为只读类型,即不能向这些单元写入数据。
&&& 高速计数器计数值的读取如图5-43所示。当I0.0触点由断开转为闭合时,上升沿P触点接通一个扫描周期,MOV_DW指令执行.将高速计数器HSC0当前的计数值(保存HC0单元中)读入并保存在VD200单元。
&&& 图5-43&&& 高速计数器计数值的读取
&&& 2.计数值的设置
&&& 每个高速计数器都用两个单元分别存放当前计数值( CV)和预设计数值(PV),这两个值都是32位。在高速计数器工作时,当CV=PV时会触发一个中断。当前计数值可从HC单元中读取,预设值则无法直接读取。要将新的CV值或PV值载入高速计数器,必须先设置相应的控制字节和特殊存储双字单元,再执行HSC指令以将新值传送到高速计数器。
&&& 各高速计数器存放CV值和PV值的存储单元见表5-15,例如,高速计数器HSC0采用SMD38双字单元存放CV值,采用SMD42双字单元存放PV值。
&&& 表5-15&&& 各高速计数器存放CV值和PV值的存储单元
&&& 高速计数器计数值的设置程序如图5-44所示。当I0.2触点由断开转为闭合时,上升沿P触点接通一个扫描周期,首先第1个MOV_DW指令执行,将新CV值(当前计数值)&100&送入SMD38单元,然后第2个MOV_DW指令执行,将新PV值(预设计数值)&200&送入SMD42单元,接着高速计数器HSC0的控制字节中的SM37.5、SM37.6两位得电为1,允许HSC0更新CV值和PV值,最后HSC指令执行,将新CV值和PV值载入高速计数器HSC0。
&&& 图5-44&&& 高速计数器计数值的设置程序
&&& 在执行HSC指令前,设置控制字节和修改SMD单元中的新CV值、PV值不影响高速计数器的运行,执行HSC指令后,高速计数器才按设置的值工作。
(责任编辑: 佚名 )
本文关键字:
免责声明:本文章仅代表作者个人观点,与艾特贸易网无关。本站大部分技术资料均为原创文章,文章仅作为读者参考使用,请自行核实相关内容,如若转载请注明来源:
1.静态特性 IGBT的静态特性...
1.阳极伏安特性 GTO晶闸管的...
激光雕刻凹版是利用激光凹版...
逆变电路是PWM控制技术最为重...
新闻热点排行

我要回帖

更多关于 程序计数器 的文章

 

随机推荐