用了STC12C5A60S2做的一个频率计
单片机源程序如下:
- #include "stdio.h"
- #include "stc12c5a60s2.h"
- unsigned int j;
- unsigned long Fx;
- char A[10];
- void send(char* Data) //发送
- {
- while(* Data != '\0')
- {
- SBUF = *Data;
- while(!(SCON&0x02));
- SCON &= 0xFD;
- Data++;
- }
- }
- void Timer_Init(void) //T1定时模式 T0计数模式
- {
- unsigned int a=500;
- TMOD = 0x15;
- TH1 = (65536-9216)/256;
- TL1 = (65536-9216)%256; //10毫秒溢出 0.35%误差
- TH0 = 0x00;
- TL0 = 0x00;
- TR1 = 1;
- TR0 = 1;
- ET1 = 1;
- while(a--);
- EA = 1;
- }
- void Pulse()
- {
- Fx=TL0+TH0*256; //赋值脉冲
- TH0=0x00; //清零
- TL0=0x00;
- }
-
- void T11(void) interrupt 3 //0 外0 1 定0 2 外1 3 定1 4 串
- {
- TH1 = (65536-9216)/256; //10ms定时 0%误差
- TL1 = (65536-9216)%256;
- j++;
- if(j>=100)
- {
- Pulse();
- sprintf(A,"%ld",Fx);
- send(A);
- send("\r\n");
- j=0;
- }
- }
- void UartInit(void) //9600bps@11.0592MHz
- {
- PCON &= 0x7F; //波特率不倍速
- SCON = 0x50; //8位数据,可变波特率
- AUXR |= 0x04; //独立波特率发生器时钟为Fosc,即1T
- BRT = 0xDC; //设定独立波特率发生器重装值
- AUXR |= 0x01; //串口1选择独立波特率发生器为波特率发生器
- AUXR |= 0x10; //启动独立波特率发生器
- }
- void main()
- {
- Timer_Init();
- UartInit();
- while(1);
- }
复制代码
所有资料51hei提供下载:
8.8(频率计).zip
(31.15 KB, 下载次数: 35)
|