1、利用8XX51单片机的T0计数,每计10个脉冲,P1.0变反一次,用查询和中断两种方式编程.2、已知8XX51单片机的系统时钟频率为6MHz,利用定时器T0,使P1.2每隔350us输出一个50us脉宽的正脉冲.
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/05 20:26:05
![1、利用8XX51单片机的T0计数,每计10个脉冲,P1.0变反一次,用查询和中断两种方式编程.2、已知8XX51单片机的系统时钟频率为6MHz,利用定时器T0,使P1.2每隔350us输出一个50us脉宽的正脉冲.](/uploads/image/z/12480198-6-8.jpg?t=1%E3%80%81%E5%88%A9%E7%94%A88XX51%E5%8D%95%E7%89%87%E6%9C%BA%E7%9A%84T0%E8%AE%A1%E6%95%B0%2C%E6%AF%8F%E8%AE%A110%E4%B8%AA%E8%84%89%E5%86%B2%2CP1.0%E5%8F%98%E5%8F%8D%E4%B8%80%E6%AC%A1%2C%E7%94%A8%E6%9F%A5%E8%AF%A2%E5%92%8C%E4%B8%AD%E6%96%AD%E4%B8%A4%E7%A7%8D%E6%96%B9%E5%BC%8F%E7%BC%96%E7%A8%8B.2%E3%80%81%E5%B7%B2%E7%9F%A58XX51%E5%8D%95%E7%89%87%E6%9C%BA%E7%9A%84%E7%B3%BB%E7%BB%9F%E6%97%B6%E9%92%9F%E9%A2%91%E7%8E%87%E4%B8%BA6MHz%2C%E5%88%A9%E7%94%A8%E5%AE%9A%E6%97%B6%E5%99%A8T0%2C%E4%BD%BFP1.2%E6%AF%8F%E9%9A%94350us%E8%BE%93%E5%87%BA%E4%B8%80%E4%B8%AA50us%E8%84%89%E5%AE%BD%E7%9A%84%E6%AD%A3%E8%84%89%E5%86%B2.)
1、利用8XX51单片机的T0计数,每计10个脉冲,P1.0变反一次,用查询和中断两种方式编程.2、已知8XX51单片机的系统时钟频率为6MHz,利用定时器T0,使P1.2每隔350us输出一个50us脉宽的正脉冲.
1、利用8XX51单片机的T0计数,每计10个脉冲,P1.0变反一次,用查询和中断两种方式编程.
2、已知8XX51单片机的系统时钟频率为6MHz,利用定时器T0,使P1.2每隔350us输出一个50us脉宽的正脉冲.
1、利用8XX51单片机的T0计数,每计10个脉冲,P1.0变反一次,用查询和中断两种方式编程.2、已知8XX51单片机的系统时钟频率为6MHz,利用定时器T0,使P1.2每隔350us输出一个50us脉宽的正脉冲.
自己写的.
第一题
查询法:
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
sbit led=P1^0;
void main()
{
uchar i;
IT0=0;
led=1;
while(1)
{
if(IE0==1)
{
IE0=0;//清除中断标志
i++;
if(i==10)
{
i=0;
led=!led;
}
}
}
}
中断法:
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
sbit led=P1^0;
void interrupt_init()
{
IT0=1;//设置外部中断0下降沿有效
EX0=1;//允许外部中断0有效时执行外部中断0的中断子函数
EA=1;//总中断允许
}
void EX_0() interrupt 0
{
static uchar i;
i++;
if(i==10)
{
i=0;
led=!led;
}
}
void main()
{
interrupt_init();
while(1);
}
第二题:
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
sbit output=P1^2;
bit NEGATE=1;
void timer_0()//定时器的初始化 6M晶振一个周期2us
{
TMOD=0x01;//用定时器0.工作在方式1.最大可以容纳65536
TH0=65510/256;// 25*2us=50us into interrupt1
TL0=65510%256;
ET0=1;//允许定时器0执行中断子函数
EA=1;//允许总中断
TR0=1;//打开定时器0
}
void time_0() interrupt 1
{
output=!output;
NEGATE=!NEGATE;
if(NEGATE)
{
TH0=65510/256; //25*2us=50us
TL0=(65510%256)+TL0;//提高精确度
}
else
{
TH0=65360/256; //175*2us=350us
TL0=(65535%256)+TL0;
}
}
void main()
{
timer_0();
output=1;
while(1);
}