📄 text1.c
字号:
/*
利用计数器来使P1.1产生一个方波,周期为25ms,占空比为50%,使用22.1184MHz时钟周期。
此时最大计数时间为35.5ms,取25ms,对于1s,可以取40个
周期,其中高电平为20个周期。每个周期计数次数为:25*10^(-3)*22.1184/12=46080次。
此程序仅为学习计数器用
*/
// 如用33M的晶振,取每10ms中断一次,则每个周期计数次数:10*10^(-3)*33/12=27500次。
#include<reg52.h>
#include<stdio.h>
#define uchar unsigned char
uchar time=0,second=0,minute=0,hour=0,day=1,month=1;
unsigned int year=2004;
sbit P1_1=P1^1;
uchar period=50,dx=0;
timer0() interrupt 1 using 1{
// TH0=(65536-46080)/256;
// TL0=(65536-46080)%256;
TH0=(65536-27500*2)/256;
TL0=(65536-27500*2)%256;
time++;
}
void main(){
//////////////////////////////////////////////
//Setup the serial port for 1200 baud at 16MHz.
///////////////////////////////////////////////
#ifndef MONITOR51
SCON = 0x50; /* SCON: mode 1, 8-bit UART, enable rcvr */
TMOD |= 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */
PCON=0x80;
TH1 = 247; /* TH1:221 reload value for 1200 baud @ 16MHz */
TL1=247; /*9.6K baud for 33M*/
TR1 = 1; /* TR1: timer 1 run */
TI = 1; /* TI: set TI to send first char of UART */
#endif
////////////////////////////////////////////////////////////////////////////////////
TMOD |=0X01;
TH0=(65536-27500*2)/256;
TL0=(65536-27500*2)%256;
EA=1;
ET0=1;
TR0=1;
time=0;
do{
if(time==50){printf (" %u-%bu-%bu %bu:%bu:%bu\n",year,month,day,hour,minute,second);
}
if(time==50){second++;time=0;}
if(second==60){minute++;second=0;}
if(minute==60){hour++;minute=0;}
if(hour==24){day++;hour=0;}
if(day==31){month++;day=1;}
if(month==13){year++;month=1;}
}while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -