单片机产生方波程序 输出250HZ方波 用中断法 急急急!

单片机 40道选择题_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
喜欢此文档的还喜欢
单片机 40道选择题
阅读已结束,如果下载本文需要使用
想免费下载本文?
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢AT89C51单片机外接晶振频率为24MHz,要求编程从TXD管脚输出一频率为20KHz,占空比为50%的方波信号_百度知道
AT89C51单片机外接晶振频率为24MHz,要求编程从TXD管脚输出一频率为20KHz,占空比为50%的方波信号
求c语言编程,谢谢!
P3_1=~P3_1; 定时器1设为自动重装载;/
EA=1;sbit P3_1 = P3^1;&#47.h&gt,计数器模式 TL1=256-50;
&#47#include&
/void main(){ TMOD=0x20; ET1=1;/ while(1)
}}void Timer1(void) interrupt 3 ///reg51;
20KHz; TR1=1; TH1=256-50;unsigned char j
其他类似问题
为您推荐:
您可能关注的推广回答者:
txd的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁热门版块:
单片机C程序求助攻,急急急急急急
//输出0 -1方波,由键盘输入频率值,可由键盘调节频率和占空比
#include&reg52.h&
#include&math.h&
#define uint unsigned int
static unsigned int pwno,n;& & & && &//pwno 占空比;n 频率;
uint counter=0;& & & && &//计数器;
sbit out = P1^0;&&//波形输出端口
void delay(uint xms)& &//延迟函数
& & & & uint i,j;
& & & & for(j=j&0;j--)
& & & & & & & & for(i=110;i&0;i--);& & & & & & & & & & & &
int keyCheck() //键盘检测按键,并输出key值
& & & & uint key=0;
& & & & while(1)
& & & & & & & & if(key!=0)//如果key被赋值了证明键盘被按下,跳出循环,返回key值
//******************************** 扫描第四列
& & & & & & & & P2= 0
& & & & & & & & temp= P2;
& & & & & & & & if(temp!=0xfe)
& & & & & & & & {
& & & & & & & & & & & & delay(10);
& & & & & & & & & & & & if(temp!=0xfe)&&//防抖
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & switch(temp)
& & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & case 0xee: key= 14;
& & & & & & & & & & & & & & & & & & & & case 0xde: key= 16;
& & & & & & & & & & & & & & & & & & & & case 0xbe: key= 15;
& & & & & & & & & & & & & & & & & & & & case 0x7e: key= 13;
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & }
& & & & & & & & }
//********************************& & & & 扫描第三列
& & & & & & & & P2= 0
& & & & & & & & temp= P2;
& & & & & & & & if(temp!=0xfd)
& & & & & & & & {
& & & & & & & & & & & & delay(10);
& & & & & & & & & & & & if(temp!=0xfd)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & switch(temp)
& & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & case 0xed: key= 7;
& & & & & & & & & & & & & & & & & & & & case 0xdd: key= 8;
& & & & & & & & & & & & & & & & & & & & case 0xbd: key= 9;
& & & & & & & & & & & & & & & & & & & & case 0x7d: key=12;
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & }
& & & & & & & & }
//********************************& & & &&&扫描第二列
& & & & & & & & P2= 0
& & & & & & & & temp= P2;
& & & & & & & & if(temp!=0xfb)
& & & & & & & & {
& & & & & & & & & & & & delay(10);
& & & & & & & & & & & & if(temp!=0xfb)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & switch(temp)
& & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & case 0xeb: key= 4;
& & & & & & & & & & & & & & & & & & & & case 0xdb: key= 5;
& & & & & & & & & & & & & & & & & & & & case 0xbb: key= 6;
& & & & & & & & & & & & & & & & & & & & case 0x7b: key= 11;
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & }
& & & & & & & & }
//********************************& & & &&&扫描第一列
& & & & & & & & P2= 0xf7;
& & & & & & & & temp= P2;
& & & & & & & & if(temp!=0xf7)
& & & & & & & & {
& & & & & & & & & & & & delay(10);
& & & & & & & & & & & & if(temp!=0xf7)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & switch(temp)
& & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & case 0xe7: key= 1;
& & & & & & & & & & & & & & & & & & & & case 0xd7: key= 2;
& & & & & & & & & & & & & & & & & & & & case 0xb7: key= 3;
& & & & & & & & & & & & & & & & & & & & case 0x77: key= 10;
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & }& & & &
& & & & & & & & }
& & & & };
void main()
& & & & uint i,j,c;
& & & & i=0;
& & & & j=0;
& & & & c=0;
& & & & n=100;& & & &
& & & & out = 0;
& & & & P2 = 0
& & & & while(1)
& & & & {& & & & & & & &
& & & & & & & & i=keyCheck();& & & & & & & & & & & & & & & &
& & & & & & & & while(1)
& & & & & & & & {
& & & & & & & & & & & & c=keyCheck();
& & & & & & & & & & & & if(c==14)
& & & & & & & & };& & & & & & & &
& & & & & & & & j = keyCheck();& & & & & & & & & & & & & & & & & & & &
& & & & & & & & n = 100000/(i*pow(10,j));& & & & //计数需要达到的个数,即为频率
& & & & & & & & pwno = n/2; //占空比初值为50%
& & & & & & & & TMOD = 0x02; //定时器
& & & & & & & & TH0 = 256-92;& & & & //100us
& & & & & & & & TL0 = TH0;
& & & & & & & &
& & & && &&&EA = 1;
& && && & & & ET0 = 1;
& & & && &&&TR0 = 1;& &//中断返回点
& & & & & & & & & & & & & & & &
& & & & & & & & while(1)& & & & //后续调整频率和占空比,并有reset功能(c=15)
& & & & & & & & {& && & & & & & & & & & & &
& & & & & & & & & & & & c=keyCheck();& & & & & & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & if(c==10) n--;
& & & & & & & & & & & & if(c==11) n++;
& & & & & & & & & & & & if(c==12) pwno++;
& & & & & & & & & & & & if(c==13) pwno--;& & & &
& & & & & & & & & & & & if(c==15)
& & & & & & & & };
& & & & };
timer0()interrupt 1 using 1
& & & & counter++;& & & & //中断一次为100us
& & & & if(counter&n) counter=0;&&//大于n时候 归0;
& & & & if(counter&=pwno) out = 1;
& & & & else out = 0;& & & &
(32.59 KB, 下载次数: 0)
22:28 上传
程序没仔细看,所以不知道你要表达的具体问题,个人只是感觉,你那个keycheck()里头太啰嗦,是思路不清的表现,建议你先优化键盘检测程序后
理清楚思路,这样有助于发现解决问题。
另外,问问题的核心;你遇到什么问题?
你贴了代码,贴了图,难道你觉得别人会复制你的代码去仿真吗?一般人没这个时间与精力。
程序没仔细看,所以不知道你要表达的具体问题,个人只是感觉,你那个keycheck()里头太啰嗦,是思路不清的表现,建议你先优化键盘检测程序后
理清楚思路,这样有助于发现解决问题。
另外,问问题的核心;你遇到什么问题?
你贴了代码,贴了图,难道你觉得别人会复制你的代码去仿真吗?一般人没这个时间与精力。
各位大哥大神帮帮忙。耐心看下。
又是proteus发到单片机板块!
而且还是控制pwm占空比的程序!
又是proteus发到单片机板块!
而且还是控制pwm占空比的程序!
有救吗????
这里没人的么。求高手啊
有救吗????
呵呵,有吧!
有救吗????
你参考一下
救命啊~~~~急急急
程序没仔细看,所以不知道你要表达的具体问题,个人只是感觉,你那个keycheck()里头太啰嗦,是思路不清的表现,建议你先优化键盘检测程序后
理清楚思路,这样有助于发现解决问题。
= =忘记说了,谢谢提醒
整体思路 是&&
先由键盘输入一个值(频率值的数值位),再按确认(c=14),再输入一个值(频率值的数量级位),之后就进入波形输出,期间可以由 键盘控制频率和占空比。你看看哪里有问题。
keycheck 程序 由于16键,只能这样写了。每一行每一行的扫。
仿真 后,波形起初为0(设置好的初值);但是按完确认(c=14)后;波形就一直是1了。
要求我写程序第一行了。
没有得到输出要求的波形。
我也觉得keycheck 有问题。但是按程序执行来看没问题啊- -。。
回头我在看看, 不会调试.....哭啊。
高级工程师
只有程序?不知道遇到了什么问题?
只有程序?不知道遇到了什么问题?
已经解决了,谢谢
已经解决了。。自己跳进自己的陷阱里了。
站长推荐 /4
Powered by单片机的晶振频率为6MHz,从p1.0输出周期为250MHz的连续方波定时器用t0工作方式1试编程_百度知道
单片机的晶振频率为6MHz,从p1.0输出周期为250MHz的连续方波定时器用t0工作方式1试编程
片机的晶振频率为6MHz,要求软件扩展到2s.0输出周期为250MHz的连续方波定时器用t0工作方式1试编程实现,从p1
从p1.0输出周期为250MHz的连续方波这个不可能
老师说,加两条语句,可能是循环语句
不知道怎么加
看到现象就行
300ms人眼也是看不到的啊,所以要到秒
#include&&reg52.h&#define&uchar&unsigned&char&#define&uint&&unsigned&int&uint&run_cnt1;uint&run_sbit&gre_led& =P1^0;void&main(void){ P3=0X00; run_cnt1=0; TMOD=0X01; TH0=&&()/256; TL0&=&()%256;; &&&//ed=24.0KHZ TR0&=&1; &&&//d2&=10khz ET0&=&1; EA=1;//打开总中断 P3=0X while(1) {
run_cnt++;
if(run_cnt&=10000)
run_cnt=0;
}}//--------------------------------------------------void&&&&Int_time0(void)&interrupt&&1{ TH0=&&()/256; TL0&=&()%256;&
gre_led=~gre_
}&250HZ &的频率
来自团队:
其他类似问题
为您推荐:
其他2条回答
呵呵?,你在逗我吗?兄弟?晶振6MHz,输出250MHz方波,250kHz吧
需要帮你做吗
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁8051单片机的晶振频率为12MHz,试用定时器中断方式编程实现从P1.0引脚输出周期为2ms的方波_百度知道
8051单片机的晶振频率为12MHz,试用定时器中断方式编程实现从P1.0引脚输出周期为2ms的方波
提问者采纳
(2/TL0=t0dat%256;TR0=1;ET0=1;reg52;256;TMOD=0x1.h&}void intt0(void) interrupt 1 using 1{TH0=t0dat/#define fso=#define t0dat=65536-(fso/TL0=t0dat%256;12)/256;2*1000)void main(){TH0=t0dat/TR0=1;EA=1;while(1);P1^0~=P1^0#include &lt
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 单片机输出方波 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信