单片机电磁炮定时程序设计(定时计数器版)
轻音与二次元2014/12/13电磁炮 IP:浙江
如题,希望各位大神帮我看看有木有错误。。。



#include<reg51.h>
#define unchar unsigned char
unchar mum,a,b,eec;
sbit C1=P0^0;
sbit C2=P0^1;
sbit C3=P0^2;
sbit C4=P0^3;
sbit C5=P0^4;
sbit C6=P0^5;
sbit C7=P0^6;
sbit C8=P0^7;
sbit S1=P1^0;
void main()
{
while(1)//大循环
{
mum=0;
eec=0;
while(S1); //触发按键检测开始
for(a=10;a>0;a--) //延时10ms
for(b=120;b>0;b--);
while(S1); //触发按键检测结束
TMOD=0x01; //开始初始化定时计数器
TH0=(65536-1)/256; //赋初值(注:1不是工作值,填填上去而已)
TL0=(65536-1)%256;
EA=1;
ET0=1; //初始化完毕
TR0=1; //定时计数器开始运行
mum++; //进入定时计数器中断的次数+1
while(eec!=1);//限制程序执行步数,方便控制中断
mum++;
while(eec!=2);
mum++;
while(eec!=3);
mum++;
while(eec!=4);
mum++;
while(eec!=5);
mum++;
while(eec!=6);
mum++;
while(eec!=7);
mum++;
while(eec!=8);
mum++;
while(eec!=9);
mum++;
while(eec!=10);
mum++;
while(eec!=11);
mum++;
while(eec!=12);
mum++;
while(eec!=13);
mum++;
while(eec!=14);
mum++;
while(eec!=15);
mum++;
while(eec!=16);
TR0=0;//把定时器计数器关掉,准备又一次循环(发射)
}
}
void DCP()interrupt 1
{
while(mum==1)     //每一次定时计数器溢出后进入中断程序,都可根据进入次数即mum的值来选择执行那一部分程序
{
TH0=(65536-1)/256;     //这里的1还是填填上去的。。。。具体要看模拟器出来的数值
TL0=(65536-1)%256;
C1=0;
eec++;
}
while(mum==2)
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
C1=1;
eec++;
}
while(mum==3)
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
C2=0;
eec++;
}
while(mum==4)
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
C2=1;
eec++;
}


while(mum==5)
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
C3=0;
eec++;
}
while(mum==6)
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
C3=1;
eec++;
}
while(mum==7)
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
C4=0;
eec++;
}
while(mum==8)
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
C4=1;
eec++;
}
while(mum==9)
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
C5=0;
eec++;
}
while(mum==10)
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
C5=1;
eec++;
}
while(mum==11)
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
C6=0;
eec++;
}
while(mum==12)
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
C6=1;
eec++;
}
while(mum==13)
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
C7=0;
eec++;
}
while(mum==14)
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
C7=1;
eec++;
}
while(mum==15)
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
C8=0;
eec++;
}
while(mum==16)
{
C8=1;//最后一次执行中断程序,不赋定时器初值
eec++;
}
来自:物理高能技术 / 电磁炮
9
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
stc90c516rd
10年1个月前 IP:江苏
735074
看着好口怕……我就想吐槽一句:为什么不用循环?
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
595051294
10年1个月前 IP:广东
735084
就几只接口,你仿真一下看看就知道了,看别人的程序好容易头晕的[s::lol]
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
3.14
10年1个月前 IP:四川
735175
晕 晕[s::sleepy:]
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
轻音与二次元作者
10年1个月前 IP:浙江
735205
引用 stc90c516rd:
看着好口怕……我就想吐槽一句:为什么不用循环?
因为单纯用for循环的话感觉不方便精确定时,而用定时计数器的话很方便,只要把定时数值填填上去就好了
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
轻音与二次元作者
10年1个月前 IP:浙江
735206
引用 595051294:
就几只接口,你仿真一下看看就知道了,看别人的程序好容易头晕的
我不会仿真。。。。我是初学的。。。。求大神帮帮忙。。。。帮我模拟一下看看
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
轻音与二次元作者
10年1个月前 IP:浙江
735209
按照我的设计可以进行半自动发射(没有错误的话。。)
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
stc90c516rd
10年1个月前 IP:江苏
735214
引用 轻音与二次元:
因为单纯用for循环的话感觉不方便精确定时,而用定时计数器的话很方便,只要把定时数值填填上去就好了
不是……我说的是
while(mum==1)     //每一次定时计数器溢出后进入中断程序,都可根据进入次数即mum的值来选择执行那一部分程序
{
TH0=(65536-1)/256;     //这里的1还是填填上去的。。。。具体要看模拟器出来的数值
TL0=(65536-1)%256;
C1=0;
eec++;
}
while(mum==2)
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
C1=1;
eec++;
}
while(mum==3)
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
C2=0;
eec++;
}
while(mum==4)
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
C2=1;
eec++;
}


while(mum==5)
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
C3=0;
eec++;
}
while(mum==6)
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
C3=1;
eec++;
}
while(mum==7)
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
C4=0;
eec++;
}
while(mum==8)
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
C4=1;
eec++;
}
while(mum==9)
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
C5=0;
eec++;
}
while(mum==10)
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
C5=1;
eec++;
}
while(mum==11)
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
C6=0;
eec++;
}
while(mum==12)
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
C6=1;
eec++;
}
while(mum==13)
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
C7=0;
eec++;
}
while(mum==14)
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
C7=1;
eec++;
}
while(mum==15)
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
C8=0;
eec++;
}
while(mum==16)
{
C8=1;//最后一次执行中断程序,不赋定时器初值
eec++;
}
这一段还有上面的完全可以用循环+指针来代替,用不着那么长的
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
轻音与二次元作者
10年1个月前 IP:浙江
735247
引用 stc90c516rd:
不是……我说的是
while(mum==1)     //每一次定时计数器溢出后进入中断程序,都可根据进入次数即mum的值来选择执行那一部分程序
{
TH0=(65536-1)/256;     //这里的1还是填填上去的。。。。具...
我不懂指针。。。[s::Q]。。。麻烦什么的我无所谓,只求解答这个程序能否顺利运行。。。PS:我要驱动的是MOS,可关断的
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

轻音与二次元
笔友
文章
16
回复
95
学术分
0
2014/01/11注册,6年11个月前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:邮箱
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}