熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2018-9-4 21:57
正文摘要:程序自己模仿的 可是仿真出來pwm端口一直處于高電平狀態(tài) 想問問是什么問題 電路原理圖如下: 單片機(jī)源程序: #include <reg52.h> #define uchar unsigned char #define ... |
q設(shè)置的不對(duì) |
q變量設(shè)置的不對(duì),q變量在定義中設(shè)置成了int型,應(yīng)該設(shè)置成float 或 double型。 |
int i=0,q=0.5,f=500;//設(shè)置初值占空比0.5 頻率0.5khz //這里q為整型 所以 之后的q 一直為0 if(100*q<i<=100) //這里有 語法錯(cuò)誤 應(yīng)該 是 if (100*q<i && i<=100) 給樓主個(gè)建議 按鍵 消抖 別用延時(shí) 用幾毫秒查鍵判斷按鍵是否按下 如果連續(xù)多次判定檢測為按下則按鍵確認(rèn)為按下 |
int i=0,q=0.5,f=500;//設(shè)置初值占空比0.5 頻率0.5khz 這里 q為整型 所以 q一直為0 |
q變量設(shè)置的不對(duì),q變量在定義中設(shè)置成了int型,應(yīng)該設(shè)置成float 或 double型。改下試試 |
參與人數(shù) 1 | 黑幣 +20 | 收起 理由 |
---|---|---|
![]() | + 20 | 回帖助人的獎(jiǎng)勵(lì)! |
急啊 有沒有人能回答一下 |
jefelee 發(fā)表于 2018-9-5 08:45 pwm=0我放到中斷里面了 在后面。我是一個(gè)個(gè)定時(shí)器控制的頻率和占空比 |
pwm=0的部分你好像沒有寫。。。 看這個(gè) 對(duì)照一下#include <reg51.h> typedef unsigned char uchar; sbit P0_0=P0^0; sbit P0_1=P0^1; sbit P0_2=P0^2; sbit P0_3=P0^3; sbit P0_4=P0^4; sbit P2_0=P2^0; sbit P2_1=P2^1; sbit P2_2=P2^2; sbit P2_3=P2^3; sbit P2_4=P2^4; sbit P3_4=P3^4; uchar time=0; uchar period=30; uchar high=10; uchar th0=0; uchar tl0=1; bit dir; void dealy() { uchar i; for(i=0;i<100;i++); } void timer0() interrupt 1 using 1 { TH0=0xfc; /*¶¨ê±Æ÷3õÖμÖØ×°ÔØ*/ TL0=0x18; time++; P3_4=~P3_4; if(dir==1) { if(time==high) /*¸ßμçÆ½3ÖDøê±¼ä½áêø£¬±äμí*/ P2_0=th0; /*¾-1y·′ÏàÆ÷·′Ïà*/ else if(time==period) /*ÖüÆúê±¼äμ½£¬±ä¸ß*/ { time=0; P2_0=tl0; /*¾-1y·′ÏàÆ÷·′Ïà*/ } } else if(time==high) /*¸ßμçÆ½3ÖDøê±¼ä½áêø£¬±äμí*/ P2_1=th0; /*¾-1y·′ÏàÆ÷·′Ïà*/ else if(time==period) /*ÖüÆúê±¼äμ½£¬±ä¸ß*/ { time=0; P2_1=tl0; /*¾-1y·′ÏàÆ÷·′Ïà*/ } } void main() { P0=0x00; P2=0x00; TMOD=0x01; /*¶¨ê±Æ÷0·½ê½1*/ TH0=0xfc; /*¶¨ê±Æ÷×°ÔØ3õÖ죬éèÖÃÂö3åDÅoÅμÄÕ¼¿Õ±èÎa1£ˉ5*/ TL0=0x18; ET0=1; /*¿a¶¨ê±Æ÷0ÖD¶Ï*/ TR0=1; /*Æô¶ˉ¶¨ê±Æ÷0*/ while(1) { if(P0_0==1) EA=1; /*¿aCPUÖD¶Ï*/ if(P0_1==1) EA=0; /*1ØCPUÖD¶Ï*/ if(P0_2==1) { dir=~dir; /*×aÏò¿ØÖÆ*/ while(P0_2!=0) {}; } if(P0_3==1) { high++; if(high==30) high=0; while(P0_3!=0) {}; } } } |
Powered by 單片機(jī)教程網(wǎng)