如何用汇编语言写出可调频率程序?

如何用汇编语言写出可调频率程序?,第1张

频率定时器调节(改变计数器初值和中断等待次数即可);

占空比的话,可用中断次数分配实现,如果是类似于二分之一,四分之一等简单的,也可直接用查表实现,更加方便。

举个例子,led灯点亮占空比为25%,频率为10hz

那么,周期为100ms,可将计数器定时为25ms,设一计次的变量,从1计到4,前三次为暗,后一次为亮,即实现

用此方法,也可以实现占空比的“嵌套”,即在点亮状态也可以加入一定的占空比,因频率高,肉眼无法看出,看到的只是亮度变暗,这在电池的节能应用上相当有用。

PCA时钟用T0溢出,

void PCA_Init (void)

{

PCA0MD &=~0x40//关闭开门狗

//0号舵机

PCA0MD=0x04//0000 0100 定时器0溢出,禁止看门狗.

PCA0CPM0=0x42//0100010 使能8位脉宽调制方式

PCA0CPL0=235//

PCA0CPH0=235//初始化为角度为0

}

/***************************************************************************************/

void Counter_Init(void)

{ TCON=0x10 //0001 0000 启动定时器T0&T1

CKCON=0x00 //定时时钟来源 系统时钟12分频( 2MHZ)

TMOD=0x02 //0000 00(计时)10(方式2) Timer0 工作在方式28位计数器自动重载,

TL0=120 //计数器初 值 256-156=100 50HZ(20ms/256 计156次)120 58HZ 150 74HZ 延时20 80 45HZ 延时50

TH0=120 //计数器重载值

}

/*************************************************************************************************/

程序以验证。可以使用。用的是定时中断;P1尾输出端;我只写出了连个按键的试验效果,如果你需要更多的话,你自己往上加按键就OK 了希望随你有所帮助 #include "reg52.h"

#define uchar unsigned char

#define uint unsigned int

sbit s1=P3^2

sbit s2=P3^3

sbit s3=P3^4

uchar t,x

void delay(uint z)

{

uint x,y

for (x=0x<zx++)

for(y=110y>0y--)

}

void init()

{

x=40

TMOD=0X01

TH0=(65536-50000)/256

TL0=(65536-50000)%256

EA=1

ET0=1

TR0=1

}

void main()

{

init()

while(1)

{

if(s1==0)

{

delay(5)

if(s1==0)

{

while(!s1)

x=10

}

}

if(s2==0)

{

delay(5)

if(s2==0)

{

while(!s2)

x=20

}

}

}

}void timer0() interrupt 1

{

TH0=(65536-50000)/256

TL0=(65536-50000)%256

t++

if(t==x)

{

t=0

P1=~P1

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8169650.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存