电源设计应用
在测量控制系统中,常常要求有一些实时时钟,以实现定时控制、定时测量或延时动作,也往往要求有计数器能对外部事件计数,如测电机转速、频率、工件个数等。广泛用于个人家庭、学校、工厂等场所,是人们日常生活、工作中不可缺少的必需品。
实现定时,有软件、数字电路和可编程定时器3种主要方法。可编程定时计数器是为方便微型计算机系统的设计和应用而研制的,它是硬件定时,又能很容易地通过软件来确定和改变它的定时值,通过初始化编程,能够满足各种不同的定时要求,因而在嵌入式系统的设计和应用中得到广泛的应用。
单片计算机即单片微型计算机,是集CPU、RAM、ROM、定时/计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产品和工业自动化。而51单片机是各单片机中最为典型和最有代表性的一种。
方波是一种非正弦曲线的波形,通常会于电子和讯号处理时出现。理想方波只有“高”和“低”这两个值。电流的波形为矩形的电流即为方波电流。不论时间轴上下是不是对称的,只要是矩形就可叫方波,必要时,可加“对称”,“不对称”加以说明
通过单片机内部的计数器/定时器,采用软件编程来产生方波,这种方法的硬件线路较简单,系统的功能一般与软件设计相关。
选择MCS-51系列中的8031单片机,由于是用指示灯显示输出方波信号,一个LED显示灯即可满足设计要求。
8031是最常见的的MCS-51系列单片机,是inter公司早期的成熟的单片机产品,应用范围涉及到各行各业。
1、内部数据存储器结构:
复位后:内部RAM 区及外部RAM 区皆保持原值
2、程序状态字: PSW
CY:进、借位,有进、借位:CY=1
AC:半进、借位,有半进、借位:AC=1
F0:用户标志位(由用户设定)
RS1,RS0:工作寄存器组选择位
00:选择0组
01:选择1组
10:选择2组
11:选择3组
OV:溢出位,有溢出:OV=1
X:无效位
P:奇偶位,运算结果有奇数个1:P=1
3、程序存储器特定入口:
0000H: 复位或开机后的程序入口
0003H: 外部中断0 服务程序入口
000BH: 定时/计数器0 中断服务程序入口
0013H: 外部中断1 服务程序入口
001BH: 定时/计数器1 中断服务程序入口
0023H: 串行I/O 中断服务程序入口
8031 片内有两个16位定时/计数器(增量式计数)
1、工作方式(方式0、方式1、方式2、方式3)
以定时/计数器1为例
⑴方式0(13位定时/计数)
⑵方式1(16位定时/计数)
⑶方式2(8位自动重装时间常数定时/计数)
⑷方式3(仅适用于定时/计数器0)
TL0 用于8位定时/计数
TH0 只用于8位定时
⑴定时/计数器方式控制寄存器:TMOD
GATE: 门控位,1:打开,0:关闭
C/T: 工作状态选择,1:计数状态,0:定时状态
M1,M0:工作方式选择
00 方式0
01 方式1
10 方式2
11 方式3
⑵定时/计数器控制寄存器:TCON
5个中断源:
INT0: 外部中断0
INT1: 外部中断1
T0: 定时/计数器0中断
T1: 定时/计数器1中断
TI/RI: 串行I/O中断
⑴中断允许寄存器:IE(1:允许;0:不允许)
PT1:T1 中断优先位
PX1:INT1 中断优先位
PT0:T0 中断优先位
PX0:INT0 中断优先位
(同级中断时的优先顺序:INT0→T0→INT1→T1→RI/TI) CPU 响应中断后,自动清除中断请求标志(只有串行口中断请求标志需用软件清除),并将程序计数器PC 之值压入堆栈,然后将相应的中断入口地址装入PC,使程序转入相应的中断服务程序。
8031 单片机中:
P0 口:作为地址低8位和双向数据总线 P2 口:作为地址高8位总线 1、P1 端口
P1 口每一位的内部结构如下:
注:当P1 口作输入时,必须先向P1 口写“FFH”(即11111111),由于单片机上电或复位后P0 口-P3 口皆置为“FFH”,故一般不需人为写“FFH”。 说明:其他端口本设计电路所用甚少,这里不作详细介绍。
8031 有一个串行端口
1、串行通讯基本方式
⑴异步传送: ⑵同步传送:
2、串行端口的工作方式(方式0、方式1、方式2、方式3)
3、串行端口的控制寄存器
⑴SCON:串口控制寄存器 ⑵PCON:电源控制寄存器
主程序主要用于系统初始化:P1.7初始化清零,P1.0置位,设T1为定时器方式1,计数器方式2,置计数器初始值,然后启动计数器。
T0为定时方式,在置TR0=1以后,定时立即开始,但在定时时间到后,还必须用软件再次装入初值,重新启动才能开始新的定时。
T1为计数方式2,在置TR1=1以后,计数开始,在计数次数到以后,自动装入初始值并重新计数,因此软件设计不再考虑装入初值
1、计数/定时器工作方式的选择
根据课题要求,可将T0设定为50ms的定时间隔,才用工作方式1。当定时时间到后,将P1.0输出反相,再加到T1输入端作计数脉冲。
从T1端输入,需要定时两次才能构成一个完整的计数脉冲。因此,设T1计数次数为10次,就能完成1S的定时:
(50ms+50ms)×10=1s
由于LED的亮/灭是持续不断的,所以可以将T1设成为方式2,自动装入初值,重复进行计数。 2、定时/计数器初值的计算与装入 X=65536-Focs/12·T
=65536-11.0592/12·1000000×50×0.001=19 456=4C00H 即TH0=4CH,TL0=00H
T1计数器在方式2下是8位的,计数10次的初值为: (256-10)=246=F6H
同时装入TH1和TL1,即TH1=0F6H,TL1=0F6H
8051单片机,用定时器输出方波。周期20ms,占空比5%-10%,可通过串口调节,P1.0输出波形,P1.1串口输入,C程序。
串口接收占空比,定时器控制,比如串口接受到的数据是8,那么占空比就是8%,定时器就按这个数来控制波形。
用标准串口吧,比较简单一点,用P1.1的话,还得编驱动,很麻烦的。
#include《reg51.h》
#define uchar unsigned char
sbit pwm=P1^0;
uchar u_p=5,num=0;
void t0isr() interrupt 1
{
num++;
if(num《=u_p)pwm=1;
if(num》u_p)pwm=0;
num%=100;
}
void uart() interrupt 4
{
if(RI)
{
RI=0;
u_p=SBUF;
}
}
main()
{
TMOD=0x22;
TH0=56;
TL0=56;
TH1=0xfd;
TL1=0xfd;
TR0=1;
TR1=1;
ET0=1;
ES=1;
EA=1;
pwm=1;
while(1);
}
使用单片机定时器在P1.0口产生200Hz方波程序
#include
void main()
{
P1^0 = 0; // 清P0口
/////////
TMOD = 0x00; // T0使用定时模式,工作模式0,无门控位
TH0 = 0x60; // 为T0填入初值,定时时间5ms
TL0 = 0x78;
TR0 = 1; // 启动T0
ET0 = 1; // 允许定时器0中断
EA = 1; // CPU开放中断
while(1); // 循环等待
}
void timer0_int () interrupt 1 using 2 // T0溢出中断,使用工作组2
{
TH0 = 0x60; // 重新填入初值
TL0 = 0x78;
P1^0= ~P1^0; // P1.0取反,产生方波
}
单片机 定时器产生10k方波
#include《reg52.h》 //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
sbit OUT=P1^2; //定义OUT输出端口
/*------------------------------------------------
定时器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定时器,使用“|”符号可以在使用多个定时器时不受影响
//TH0=0x00; //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出
//TL0=0x00;
EA=1; //总中断打开
ET0=1; //定时器中断打开
TR0=1; //定时器开关打开
}
/*------------------------------------------------
主程序
------------------------------------------------*/
main()
{
Init_Timer0();
while(1);
}
/*------------------------------------------------
定时器中断子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1 using 1
{
TH0=(65536-50)/256; //重新赋值 12M晶振计算,指令周期1uS,
TL0=(65536-50)%256; //1mS方波半个周期50uS,即定时50次
//溢出然后输出端取反
OUT=~OUT; //用示波器可看到方波输出
}
全部0条评论
快来发表一下你的评论吧 !