mdsk.net
当前位置:首页 >> 设单片机晶振频率为12 >>

设单片机晶振频率为12

我来个汇编的: org 0000h ljmp start org 000bh ljmp timer0interrupt start: mov sp,#60h lcall inittimer0 mov r7,#0 sjmp $ inittimer0: mov tmod,#01h mov th0,#3ch mov tl0,#0b0h setb ea setb et0 setb tr0 ret timer0interrupt: mov th0,#3ch mov tl0,#0b0h inc r7 cjne r7,#20,rt movr7,#0 cpl p1.0 rt: reti end

TMOD=0x10;TH1=0xFC;L1=0x18;即为高电平时间为1ms.最大定时时间:2^16毫秒t=(2^16-计数初始值)X晶振周期X12.

16位定时,12T模式12000000/12/1000*65536=65.536ms

delay1m: mov r2,#60dlys: mov r3,#20dly1: mov r4,#100dly2: mov r5,#248 djnz r5,$ djnz r4,dly2 djnz r3,dly1 djnz r2,dlys ret

主程序里这样设置 TMOD=0x10;//定时器1作为定时器用 TH1=(65536-50000)/256; TL1==(65536-50000)%256; EA=1;//开总中断 ET1=1;//允许定时器1中断 TR1=1;//启动定时器1 中断程序如下:void timer1()interrupt 3//注意:定时器1的中断序号为3 { TH1=(65536-50000)/256; TL1==(65536-50000)%256; P1.7=~P1.7; }

DELAY1S:MOV R2,#10 DLY1:MOV R3,#200 DLY2:MOV R4,#248 DJNZ R4,$ DJNZ R3,DLY2 DJNZ R2,DLY1 RET

1k t=500us+500us 10k t=50us+50us 20k t=25us+25us 1k以上时,最好不要用定时器0工作方式1,里面涉及到软件延时.给你提供一个简单的20khz的方波程序.51单片机接12mhz晶振,定时器0工作方式2.将程序下载到单片机里,测试一下,

//----假设,系统工作于 12MHz/12T的传统51单片机下.#include <reg51.h> sbit Test = P1^0; void Delay_50ms(unsigned char Times) { while(Times -- ) { TH0 = 0x3C; //----装入初值,定时器0定时50ms TL0 = 0xB0; TR0 = 1; //-----启动定时器 while(!

首先要知道,确认一次记数,即一次负跳变,需要2个机器周期,即24个时钟周期或震荡周期,则最高记数频率为12M/24=500khz;或者按照时间计算,晶振频率12M的2个机器周期即2us,那么频率就是1/2*10^6=500khz,结果一样.

1、机器周期=晶振周期*12.2、所以单片机中晶振频率为12mhz的机器周期=12*1/12m=1微秒.

网站首页 | 网站地图
All rights reserved Powered by www.mdsk.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com