MCS-51单片机的编程题:已知系统晶振频率为12MHZ,采用定时器T0的方式1,请编程实现1s的延时。 单片机c51编程。系统晶振频率为12Mhz,利用定时计数器T...

\u7f16\u7a0b\u9898 \u8bbeMCS-51\u5355\u7247\u673a\u7cfb\u7edf\u4e2d\u6676\u632f\u9891\u7387\u4e3a12MHz\uff0c\u6b32\u4f7f\u7528\u5b9a\u65f6\u5668/\u8ba1\u6570\u56681\uff0c\u91c7\u7528\u65b9\u5f0f1\u7f16\u5199\u5b9e\u73b01\u79d2\u5b9a\u65f6\u65f6\u95f4\u7684\u7a0b

\u91c7\u752812Mhz\u6676\u632f\u768451\u5355\u7247\u673a\uff0c\u8f6f\u4ef6\u5982\u4e0b\uff08\u8c03\u8bd5\u901a\u8fc7\uff09

#include

#define PERIODH (65536l-50000l)/0X100 //\u8bbe50ms\u4e2d\u65ad1\u6b21TH1\u521d\u503c
#define PERIODL (65536l-50000l)%0X100 //\u8bbe50ms\u4e2d\u65ad1\u6b21TL1\u521d\u503c
//\u5982\u679c\u9700\u8981\u6781\u7cbe\u786e\u7684\u5ef6\u65f6\uff0c\u5e94\u6839\u636e\u5b9e\u9645\u7f16\u8bd1\u540e\u7684\u4ea7\u751f\u7684\u6c47\u7f16\u6307\u4ee4\uff0c\u6263\u9664\u6389\u4e2d\u65ad\u54cd\u5e94\u4e2d\u91cd\u88c5\u6240\u5360\u7528\u7684\u65f6\u95f4

unsigned int count;//\u5ef6\u65f6\u65f6\u95f4\u53d8\u91cf

void timer1() interrupt 3 using 1
{//\u5b9a\u65f6\u5668\u6bcf0.05\u79d2\u4e00\u6b21\u4e2d\u65ad

TH1 = PERIODH;
TL1 = PERIODL;

if(count)
{//\u8ba1\u6570\u672a\u52300\uff0c\u5219\u4fdd\u6301\u5b9a\u65f6\u5668\u8fd0\u884c\uff0c\u8ba1\u6570\u5668-1
count--;
}
else
{//\u8ba1\u6570\u52300\uff0c\u5173\u5b9a\u65f6\u5668
TR1 =0; //stop timer 1
}

}

//\u4ee5\u79d2\u4e3a\u57fa\u672c\u5b9a\u65f6\u5355\u4f4d\u7684\u5b50\u7a0b\u5e8f
void Delay1S(unsigned char x)
{
TH1 =PERIODH;
TL1 =PERIODL;
TR1 = 1;//\u6b64\u65f6\u5b9a\u65f6\u5f00\u59cb

count = 20*x;//\u56e050ms\u4e2d\u65ad1\u6b21\uff0c\u6545\u4e5820
while(count);
}

main()
{
TMOD = 0X10;//\u65b9\u5f0f1
EA = 1;//\u603b\u4e2d\u65ad\u5141\u8bb8
ET1 = 1;//\u5b9a\u65f6\u56681\u4e2d\u65ad\u5141\u8bb8

while(1)
{
Delay1S(1);//\u5ef6\u65f61\u79d2
Delay1S(2);//\u5ef6\u65f62\u79d2
Delay1S(3);//\u5ef6\u65f63\u79d2
Delay1S(4);//\u5ef6\u65f64\u79d2

}
}

Delay1S\u51fd\u6570\u662f\u8c03\u7528\u65f6\u624d\u5f00\u59cb\u8ba1\u65f6\uff0c\u6839\u636e\u9700\u8981\u7684\u5b9a\u65f6\u957f\u5ea6\u5230\u65f6\u505c\u6b62\u8ba1\u65f6\u3002\u5982\u679c\u5b9a\u65f6\u7cbe\u5ea6\u8981\u6c42\u4e0d\u9ad8\uff0c\u53ef\u4ee5\u4e0d\u7528\u5728\u4e2d\u6bb5\u670d\u52a1\u7a0b\u5e8f\u4e2d\u5173\u95ed\u5b9a\u65f6\u5668\uff0c\u6bcf\u6b21\u8c03\u7528\u8bef\u5dee\u4e5f\u5c31\u572850ms\u3002
\u53ef\u4ee5\u7528KEIL\u4eff\u771f\u770b\u4e00\u4e0b\u5b9e\u9645\u65f6\u95f4

\u6bcf\u9694 250ms \u7ffb\u8f6c\u4e00\u6b21\uff0c\u5c31\u662f\u8f93\u51fa\u5468\u671f500ms\u7684\u65b9\u6ce2\u3002

中断服务函数就不用写了吧,就写个初始化函数:
void inition()
{
TOMD=0x01;//选择定时器0并选择工作方式1
TH0=(65536-50000)/256;
TL0=(65536-500000)%6;
EA=1;
ET0=1;
TR0=1;
}
这样初始化就没问题了,另外要实现1S延时,需要在中断函数里加个变量自增,因为我定义的是50ms中断一次,那么这个变量值自增到20后就代表1s时间到,清零这个变量之后方可写你的服务程序。
希望我的回答能帮助到你。

#include<reg51.h>
#define uchar unsigned char
uchar times;
void delay()
{
uchar times=0;
TR0=1;
while(1)
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(TF0==1)
{
TF0=0;
times++;
if(times==20)
{
TR0=0;
return;
}
}
}
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
delay();
while(1);
}

#include <reg51.h>

void InitTimer0(void)
{
TMOD = 0x01;
TH0 = 0x0FC;
TL0 = 0x18;
EA = 1;
ET0 = 1;
TR0 = 1;
}

  • 宸茬煡MCS-51鍗曠墖鏈绯荤粺鐨勭墖鍐匯AM 30H鍗曞厓瀛樻斁浜嗕竴涓8浣嶆棤绗﹀彿鏁7AH,鐗...
    绛旓細MOV DPTR, #2200HMOVX A, @DPTRADD A, 30HMOV DPTR, #0000HMOVX @DPTR, ACLR AADDC A, #0INC DPTRMOVX @DPTR, AEND
  • MCS-51鍗曠墖鏈鸿瘯棰
    绛旓細閲囩撼鐜:64% 鎿呴暱: 姹囩紪璇█ 鍏朵粬缂栫▼璇█ 缂栫▼璇█ 宸ョ▼鎶鏈瀛 宓屽叆寮 鍏朵粬鍥炵瓟 鍝,澶村洖瑙佽繖涔堝鍒嗙殑,妤间富鍙璁蹭俊鐢ㄥ晩闅惧緱瑙佸埌涓埥蹇殑,浠ュ悗鏈夐棶棰樻病鍒嗕篃缁欎綘绛斻備笁.绠绛旈:(姣忛8鍒嗗叡24鍒)1. MCS-51鍗曠墖鏈涓柇鐨勫紑鏀惧拰鍏抽棴鏄浣曟帶鍒剁殑?濡傛灉瑕佸瀹氭椂鍣═1寮鏀句腑鏂,鍙互鐢ㄤ粈涔堟寚浠ゅ疄鐜? ;***涓柇璁剧疆...
  • MCS-51鍗曠墖鏈虹殑涓閬撳ぇ棰,鎸虹畝鍗曠殑,浼氱殑杩
    绛旓細1銆乀0涓鸿鏁板櫒鏂瑰紡2锛屽垵鍊间负56 2銆乀1涓哄畾鏃跺櫒鏂瑰紡1锛屽垵鍊间负65536-50000 3銆乀MOD=0x12;4銆乮nitt0(){ TMOD|=0x0f;TMOD&=0x06;TH0=56;TL0=56;TR0=1;ET0=1;EA=1;} void t0isr() interrupt 1 { TR1=1;} 5銆乮nitt1(){ TMOD|=0xf0;TMOD&=0x1f;TH1=(65536-50000)/256;TL1=(65...
  • 鍝綅澶х甯垜鐪嬬湅MCS_51鍗曠墖鏈虹殑棰?鍦ㄧ嚎绛,鏈夐噸璋
    绛旓細(5脳255+3)脳21+2 = 26840 cycles 鐧惧害瀚屾垜瀛楁暟涓嶅
  • MCS鈥51鍗曠墖鏈瀹氭椂/璁℃暟鍣ㄥ疄楠 缂栫▼ 姹傜▼搴
    绛旓細0000H JMP START ORG 000BH JMP T0_INT ORG 001BH JMP T1_INT ORG 0030H START:MOV SP,#60H MOV TMOD,#52H ;T1璁℃暟鏂瑰紡1;T0瀹氭椂鏂瑰紡2 MOV TH0,(256-250);T0瀹氭椂250us@12MHz MOV TL0,(256-250);SETB TR0;MOV TH1,(65536-4000)/ 256 ;T1璁℃暟4000 MOV TL1,(65536-4000)MOD 256 ...
  • mcs-51绯诲垪鍗曠墖鏈闂,涓ら
    绛旓細涓冿細MOV DPTR, #7FFFHLOOP: MOV A, #80H MOVX @DPTR ;杈撳嚭2.4V LCALL DELAY_200MS ;寤舵椂 200ms MOV A, #0H MOVX @DPTR ;杈撳嚭0V LCALL DELAY_200MS LCALL DELAY_200MS LCALL DELAY_200MS LCALL DELAY_200MS ;鍏卞欢鏃 800ms SJMP LOO...
  • MCS鈥51鍗曠墖鏈瀹氭椂/璁℃暟鍣ㄥ疄楠 缂栫▼ 姹傜▼搴
    绛旓細JMP START ORG 000BH JMP T0_INT ORG 001BH JMP T1_INT ORG 0030H START:MOV SP,#60H MOV TMOD,#52H ;T1璁℃暟鏂瑰紡1; T0瀹氭椂鏂瑰紡2 MOV TH0, #(256-250) ;T0瀹氭椂250us@12MHz MOV TL0, #(256-250) ;SETB TR0;MOV TH1, #(65536-4000) / 256 ;T1...
  • 缂栫▼棰 璁MCS-51鍗曠墖鏈绯荤粺涓櫠鎸鐜囦负12MHz,娆蹭娇鐢ㄥ畾鏃跺櫒/璁℃暟鍣1...
    绛旓細閲囩敤12Mhz鏅舵尟鐨51鍗曠墖鏈锛岃蒋浠跺涓嬶紙璋冭瘯閫氳繃锛塱nclude <reg52.h> define PERIODH (65536l-50000l)/0X100 //璁50ms涓柇1娆H1鍒濆 define PERIODL (65536l-50000l)%0X100 //璁50ms涓柇1娆L1鍒濆 //濡傛灉闇瑕佹瀬绮剧‘鐨勫欢鏃讹紝搴旀牴鎹疄闄呯紪璇戝悗鐨勪骇鐢熺殑姹囩紪鎸囦护锛屾墸闄ゆ帀涓柇鍝嶅簲涓噸瑁呮墍鍗犵敤鐨...
  • MCS-51鍗曠墖鏈,绠鍗曠殑涓涓眹缂栬瑷绋嬪簭,璁$畻鍒嗘鍑芥暟鐨勫嚱鏁板笺
    绛旓細QQQ: jnc DY6 ;鏃犲熶綅锛堝嵆澶т簬6锛夎浆绉.cjne A, #2, AAA ;A 璇曞噺2 AAA: jc XY2 ;鏈夊熶綅锛堝嵆灏忎簬2锛夎浆绉.add A, X add A, X ;A=3X clr C subb A, #5 mov Y, A ;Y = 3X - 5 sjmp _END DY6:mov B, X mul AB ;涔.mov Y, A...
  • 鏅舵尟棰戠巼涓12MHz鐨MCS-51鍗曠墖鏈,浣跨敤瀹氭椂鍣1浠ュ畾鏃舵柟娉曞湪P2.0杈撳嚭鍛ㄦ湡...
    绛旓細瀹氭椂160us銆傝緭鍑轰竴娆¢珮鐢靛钩锛屽洓娆′綆鐢靛钩銆傚嵆鍙傜▼搴忓涓:ORG 0000H MOV TMOD, #20H MOV TH1, #(256 - 160)MOV TL1, TH1 SETB TR1 LP1:SETB P2.0 MOV R2, #5 LP2:JNB TF1,CLR P2.0 CLR TF1 DJNZ R2, LP2 SJMP LP1 END ...
  • 本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网