设单片机的fosc=6MHZ,要求在P1.7脚上的指示灯亮一秒灭一秒,请用定时器T1编程实现题目要求。1s的延时函数统一用delay1s
1个回答
关注
展开全部
标准51单片机,6MHz晶振,机械周期为:12/Fosc=2us;T1,16位定时器,最大定时为2us*2^16,约为130ms。题目要求时间为1s,130ms内,1s的最大约数为 125ms(8倍),但为了方便理解,取100ms。#include#define th1 0x3c#define tl1 0xb0//100ms @6MHz Foscsbit LED=P1^7;void Timer1()interrupt 3{TL1=tl1;TH1=th1;LED=~LED;}void TimerInit(){TMOD=0x10;TH1=th1;TL1=tl1;EA=1;ET1=1;TR1=1;}void main(){TimerInit();while(1);}
咨询记录 · 回答于2023-01-29
设单片机的fosc=6MHZ,要求在P1.7脚上的指示灯亮一秒灭一秒,请用定时器T1编程实现题目要求。1s的延时函数统一用delay1s
标准51单片机,6MHz晶振,机械周期为:12/Fosc=2us;T1,16位定时器,最大定时为2us*2^16,约为130ms。题目要求时间为1s,130ms内,1s的最大约数为 125ms(8倍),但为了方便理解,取100ms。#include#define th1 0x3c#define tl1 0xb0//100ms @6MHz Foscsbit LED=P1^7;void Timer1()interrupt 3{TL1=tl1;TH1=th1;LED=~LED;}void TimerInit(){TMOD=0x10;TH1=th1;TL1=tl1;EA=1;ET1=1;TR1=1;}void main(){TimerInit();while(1);}
这个呢
ORG 0000HSETB TR0 ;启动T0MOV R2, #250 ;定时计数初值LOOP:MOV TH0, #(8192 - 8000) / 32 ;定时8msMOV TL0, #(8192 - 8000) MOD 32JNB TF0, $ ;等待8msCLR TF0DJNZ R2, LOOP ;每隔8ms,R2减一次一CPL P1.0 ;R2为0则LED亮灭转换LJMP 0000HEND本程序,已经实验成功。
这样子就可以了哦
还有一个
void Delay100us() //@6.000MHz{unsigned char i, j;i = 1;j = 146;do{while (--j);} while (--i);}
这样子就可以了哦亲
这样子的哦亲
要是觉得还满意的话
第二个最后一句话也需要答吗?
这个不用哦亲