51单片机12MHz晶振输出方波 设MCS-51单片机的晶振频率为12MHz,编程使P1.0端...

51\u5355\u7247\u673a\u6676\u632f\u9891\u7387\u4e3a12MHz\uff0c\u5229\u7528\u4e2d\u65ad\u5728P1.1\u53e3\u8f93\u51fa50HZ\u7684\u65b9\u6ce2\uff0cC\u8bed\u8a00\uff0c\u54ea\u4f4d\u5927\u4fa0\u5e2e\u5e2e\u5fd9\uff0c\u5e2e\u5fd9\u5199\u4e2a\u7a0b\u5e8f

#include sbit port=P1^1;void Timer0Init(void)//10\u6beb\[email protected]{TMOD &= 0xF0;//\u8bbe\u7f6e\u5b9a\u65f6\u5668\u6a21\u5f0fTMOD |= 0x01;//\u8bbe\u7f6e\u5b9a\u65f6\u5668\u6a21\u5f0fTL0 = 0xF0;//\u8bbe\u7f6e\u5b9a\u65f6\u521d\u503cTH0 = 0xD8;//\u8bbe\u7f6e\u5b9a\u65f6\u521d\u503cTF0 = 0;//\u6e05\u9664TF0\u6807\u5fd7TR0 = 1;//\u5b9a\u65f6\u56680\u5f00\u59cb\u8ba1\u65f6}void main(){ Timer0Init(); while(1); }void timer0() interrupt 0{TL0 = 0xF0;//\u8bbe\u7f6e\u5b9a\u65f6\u521d\u503cTH0 = 0xD8;//\u8bbe\u7f6e\u5b9a\u65f6\u521d\u503c port^=1; }

T=1/f=50US
void Timer0Init(void)//100\u5fae\u79d2@12MHz
{
AUXR &= 0x7F;//\u5b9a\u65f6\u5668\u65f6\u949f12T\u6a21\u5f0f
TMOD &= 0xF0;//\u8bbe\u7f6e\u5b9a\u65f6\u5668\u6a21\u5f0f
TL0 = 0x9C;//\u8bbe\u7f6e\u5b9a\u65f6\u521d\u503c
TH0 = 0xFF;//\u8bbe\u7f6e\u5b9a\u65f6\u521d\u503c
TF0 = 0;//\u6e05\u9664TF0\u6807\u5fd7
TR0 = 1;//\u5b9a\u65f6\u56680\u5f00\u59cb\u8ba1\u65f6
}

\u4e4b\u540e\u5728\u4e2d\u65ad\u91cc\u5199\u5165P01=~P01; \u5c31\u597d\u4e86

1K T=500us+500us
10K T=50us+50us
20K T=25us+25us

1K以上时,最好不要用定时器0工作方式1,里面涉及到软件延时。

给你提供一个简单的20KHz的方波程序。51单片机接12MHz晶振,定时器0工作方式2。
将程序下载到单片机里,测试一下,试试看。根据实测结果要作调整。
未加按键,略作参考吧。(太晚了,不想写了。)

#include <AT89X55.H>
sbit P10=P1^0;
void Delay25us();

void main()
{
TMOD=0x02;
TH0=(256-25)/256;
TL0=(256-25)%256;
while(1)
{
P10=~P10;
Delay25us();
}
}

void Delay25us()
{
TR0=1;
while(!TF0);
TR0=0;
TF0=0;
}

可先算出周期,20Hz的周期为50ms,20KHz的周期是50μs。51单片机在12MHz晶振下,定时最大时间为65.536ms。所以要得到20KHz频率是可以实现的。如要得到20KHz频率,占空比为1:1的方波,只需让定时器定时25μs,12MHz晶振下定时时标为Tcy=12/fosc=1μs;计数个数为X=25μs/1μs=25.定时初值为C=2^16-25=65511.换成十六进制为FFE7H。
即TH0=0FF,TL0=0E7。

  • 51鍗曠墖鏈12MHz鏅舵尟杈撳嚭鏂规尝
    绛旓細缁欎綘鎻愪緵涓涓畝鍗曠殑20KHz鐨勬柟娉㈢▼搴忋51鍗曠墖鏈鎺12MHz鏅舵尟锛屽畾鏃跺櫒0宸ヤ綔鏂瑰紡2銆傚皢绋嬪簭涓嬭浇鍒板崟鐗囨満閲岋紝娴嬭瘯涓涓嬶紝璇曡瘯鐪嬨傛牴鎹疄娴嬬粨鏋滆浣滆皟鏁淬傛湭鍔犳寜閿紝鐣ヤ綔鍙傝冨惂銆傦紙澶櫄浜嗭紝涓嶆兂鍐欎簡銆傦級include <AT89X55.H> sbit P10=P1^0;void Delay25us();void main(){ TMOD=0x02;TH0=(256-25)...
  • .宸茬煡51鍗曠墖鏈绯荤粺鏅舵尟棰戠巼涓12MHz,璇峰埄鐢ㄥ畾鏃跺櫒1宸ヤ綔鏂瑰紡1,涓柇鏂瑰紡...
    绛旓細MOVTMOD锛#10H锛涜缃甌1瀹氭椂鏂瑰紡1 MOVTH1锛#锛65536-50000锛/256锛涢佸叆鍒濆鍊笺侻OVTL1锛#锛65536-50000锛塎OD256锛涘畾鏃50000us@12MHz MOVIE锛#10001000B锛涘紑鏀炬讳腑鏂拰T1涓柇銆係ETBTR1锛涘惎鍔═1 MOVTH1锛#锛65536-50000锛/256锛涢噸鏂伴佸叆鍒濆鍊笺侻OVTL1锛#锛65536-50000锛塎OD256锛涘畾鏃50000us@12MHz R...
  • 51鍗曠墖鏈烘櫠鎸棰戠巼12MHz,缂栫▼瀹炵幇P1.0杈撳嚭棰戠巼涓2KHz,鍗犵┖姣斾负50%鐨勬柟娉...
    绛旓細51鍗曠墖鏈烘櫠鎸棰戠巼12MHz,缂栫▼瀹炵幇P1.0杈撳嚭棰戠巼涓2KHz,鍗犵┖姣斾负50%鐨勬柟娉,浣跨敤瀹氭椂鍣 51鍗曠墖鏈烘櫠鎸鐜12MHz,缂栫▼瀹炵幇P1.0杈撳嚭棰戠巼涓2KHz,鍗犵┖姣斾负50%鐨勬柟娉,浣跨敤瀹氭椂鍣═1宸ヤ綔鏂瑰紡2... 51鍗曠墖鏈烘櫠鎸鐜12MHz,缂栫▼瀹炵幇P1.0杈撳嚭棰戠巼涓2KHz,鍗犵┖姣斾负50%鐨勬柟娉,浣跨敤瀹氭椂鍣═1宸ヤ綔鏂瑰紡2 灞曞紑 鎴戞潵绛 绛旈鎶藉 棣栨...
  • 51绯诲垪鍗曠墖鏈烘櫠鎸棰戠巼12MHz,瑕佷粠p2.0寮曡剼杈撳嚭涓涓繛缁殑10Hz鏂规尝淇″彿...
    绛旓細绋嬪簭濡備笅:ORG 0000H AJMP MAIN ORG 0030H MAIN:MOV TMOD, #01H MOV TL0, #0B0H MOV TH0, #3CH SETB TR0 LOOP:JNB TF0, LOOP ;2涓懆鏈.MOV TL0, #0B3H ;涓涓懆鏈.MOV TH0, #3CH CPL P2.0 CLR TF0 SJMP LOOP END --- 涓婅堪绋嬪簭锛岀粡杩嘖EIL杞欢璋...
  • 51鍗曠墖鏈瀹氭椂璁℃暟鍣鏅舵尟涓12MHz,p1.0杈撳嚭鏂规尝鍛ㄦ湡涓200ms姹囩紪缂栫▼濡備綍...
    绛旓細p1.0杈撳嚭楂樼數骞 寤舵椂200ms锛200*1000涓寚浠ゅ懆鏈燂級p1.0杈撳嚭浣庣數骞 寤舵椂200ms 鈥︹﹀惊鐜埌寮濮嬧︹
  • 甯繖鐢–璇█鍐欎竴娈51鍗曠墖鏈鐨勭▼搴,鏅舵尟12M銆
    绛旓細/ 鏈▼搴忓姛鑳,杈撳嚭鏂规尝,棰戠巼1-25ms 鍗曠墖鏈@12MHz /12T / sbit Pulse=P1^1; //---鏂规尝 sbit Add=P3^2; //---棰戠巼鍔 sbit Dec=P3^3; //---棰戠巼鍑 sbit Start = P1^3; //---寮鍏抽敭 sbit Display_Ten_Bit = P2^0;sbit Display_Bit_Bit = P2^1;code unsigned char TH0_...
  • 璁綧CS51鍗曠墖鏈鐨鏅舵尟棰戠巼12MHz,璇风紪绋嬩娇寰桺1.0绔杈撳嚭棰戠巼涓20kHz鐨勬柟娉...
    绛旓細20KHz锛屽懆鏈烼=50us锛屽崐鍛ㄦ湡 t=25us锛涙爣鍑51鍗曠墖鏈锛12MHz鏅舵尟锛屾満姊板懆鏈熶负 1us锛岃冻浠ユ弧瓒25us闇姹傘備娇鐢ㄥ畾鏃跺櫒瀹氭椂 25us锛屾瘡娆′腑鏂彇鍙杈撳嚭锛圥1.0锛夈傚皬璐村+锛25us鏃堕棿鐭紝鍙互閲囩敤瀹氭椂鍣ㄧ殑 8浣嶈嚜閲嶈妯″紡锛岀▼搴忓氨涓嶉渶瑕佸湪涓柇涓户缁祴鍒濆间簡銆
  • 51鍗曠墖鏈烘櫠鎸棰戠巼涓12MHz,鍒╃敤涓柇鍦≒1.1鍙杈撳嚭50HZ鐨勬柟娉,C璇█,鍝...
    绛旓細include <reg51.h>sbit port=P1^1;void Timer0Init(void)//10姣@12.000MHz{TMOD &= 0xF0;//璁剧疆瀹氭椂鍣ㄦā寮廡MOD |= 0x01;//璁剧疆瀹氭椂鍣ㄦā寮廡L0 = 0xF0;//璁剧疆瀹氭椂鍒濆糡H0 = 0xD8;//璁剧疆瀹氭椂鍒濆糡F0 = 0;//娓呴櫎TF0鏍囧織TR0 = 1;//瀹氭椂鍣0寮濮嬭鏃秨void main(){ Timer0Init()...
  • 51鍗曠墖鏈烘櫠鎸棰戠巼涓12MHz,鐢ㄥ畾鏃跺櫒T1鍦≒1.0寮曡剼涓杈撳嚭鍛ㄦ湡涓2绉,鍗 ...
    绛旓細define uchar unsigned char uchar cnt;sbit p10=P1^0;void t0isr(void) interrupt 3 { TH1=(65536-50000)/256;TL1=(65536-50000)%256;cnt++;if(cnt>=20){ cnt=0;p10=~p10;} } main(){ TMOD=0x10;TH1=(65536-50000)/256;TL1=(65536-50000)%256;TR1=1;ET1=1;EA=1;while(1);} ...
  • 鏅舵尟棰戠巼涓12MHZ,鐢ㄥ畾鏃跺櫒T0鏂瑰紡1瀹炵幇浠嶱2.0寮曡剼杈撳嚭500ms鐨勬柟娉鐧惧害...
    绛旓細涓銆鏅舵尟涓 12M锛屽垯 51 鍗曠墖鏈鐨勬寚浠ゅ懆鏈熷垰濂戒负 1us锛屽畾鏃 500ms锛屽垯鏄 500*1000 鐨勫畾鏃舵椂闂 浜屻51 鍗曠墖鏈虹殑鏈澶у畾鏃舵椂闂撮暱搴︿负 65536锛屽嵆灏 T0 璁剧疆涓哄弻瀛楄妭鐨勫畾鏃跺櫒锛屼篃鍙兘瀹氫箟涓嶈秴杩 65.5ms 鐨勬椂闀 涓夈佽瀹氫箟涓涓 500ms 鐨勫畾鏃跺懆鏈燂紝鍒欓渶瑕佸皢 T0 瀹氫箟鎴愬弻瀛楄妭 50ms 鐨勫畾鏃跺櫒锛屽悓鏃惰繕...
  • 扩展阅读:12mhz晶振的机器周期 ... 51为啥用12m晶振 ... 12mhz晶振型号 ... 晶振电路为什么用12mhz ... 晶振是干什么用的 ... 晶振为什么要用12mhz ... 晶振元器件 ... 晶振12m里的m啥意思 ... 晶振图片 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网