8051系统中,已知振荡频率为12MHz,用定时/计数器T0,实现从P1.0产生周期为2ms的方波。C语言

 8051系统中,已知振荡频率为12MHz,用定时/计数器T0,实现从P1.0产生周期为2ms的方波。C语言进行编程。

P1.0输出周期为2ms的方波,只须P1.01ms取反一次则可。当系统时钟为12MHZ,定时/计数器T0工作于方式1时,最大的定时时间为65.536ms,满足1ms的定时要求,方式控制字应设定为00000001B01H)。定时1ms,计数值N1000,初值X=65536-1000=64536,则TH0=FCHTL0=18H

 

#include <reg51.h>         //包含特殊功能寄存器库

sbit P1_0=P1^0;

void  main()

{

TMOD=0x01; //定时器0,方式1

TH0=0xFC;

TL0=0x18; //定时1ms,0xfc18 == 64536

EA=1;      //开总中断

ET0=1;     //开定时器0中断

TR0=1;     //开定时器0

while(1);

}

void time0_int(void)  interrupt 1      //中断服务程序

{

TH0=0xFC;

TL0=0x18;

    P1_0=!P1_0;

}

8051单片机系统中,要利用定时器/计数器T0生成2ms周期方波,需要经过以下几个步骤: 1. **配置定时器T0**: - 将T0设置为模式1(8位自动重装),因为这种模式下,我们可以直接控制TH0(高八位计数寄存器)和TL0(低八位计数寄存器)。 - 分频:由于12MHz系统时钟,我们需要将时钟源分频到1:64,因为2ms = 2000us,12MHz / (2 * 64) ≈ 20kHz,接近所需周期2. **计算初值**: 对于模式1,为了得到2ms2000μs)的周期,我们需要设置TH0和TL0的初始值使得计数值达到最大值减一,然后溢出回到零。假设最大计数值是255,那么实际周期将是256 * 20kHz。 3. **设置初值**: ```c TH0 = 0xFF; // 设置TH0为FF(二进制11111111),最高位设为1表示溢出标志 TL0 = 0x7F; // 设置TL0为7FH(二进制11111111),用于计算剩余的有效时间 ``` 4. **启用中断服务**: 打开定时器溢出中断(TF0)并设置相应的中断处理程序,如`EA = 1; ET0 = 1; IE = 1;`,其中EA打开全局中断,ET0开启定时器T0中断,IE设置中断允许标志。 5. **主程序**: - 主循环中,禁止CPU对P1.0的输出(防止干扰),然后等待中断发生。 - 中断服务程序(通常是`TIM0_vect`)会被调用,在这里反转P1.0的电平,实现方波。 ``` P1_0 = ~P1_0; // 刷新P1.0的电平 ``` 然后清空中断标志TF0,并继续等待下次计数。 6. **仿真演示**: 使用如Keil uVision这样的开发工具进行程序编写和仿真,可以看到P1.0端口输出的方波每隔2ms改变一次状态。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值