标题: STC12C5A60S2单片机频率计程序 [打印本页]

作者: 大眼    时间: 2020-4-12 14:55
标题: STC12C5A60S2单片机频率计程序
用了STC12C5A60S2做的一个频率计


单片机源程序如下:
  1. #include "stdio.h"
  2. #include "stc12c5a60s2.h"

  3. unsigned int j;

  4. unsigned long Fx;
  5. char A[10];


  6. void send(char* Data)    //发送
  7. {
  8.         while(* Data != '\0')
  9.         {
  10.                 SBUF = *Data;
  11.                 while(!(SCON&0x02));
  12.                         SCON &= 0xFD;
  13.                         Data++;
  14.         }
  15. }


  16. void Timer_Init(void) //T1定时模式 T0计数模式
  17. {
  18.                 unsigned int a=500;
  19.                 TMOD = 0x15;
  20.                 TH1 = (65536-9216)/256;
  21.                 TL1 = (65536-9216)%256;  //10毫秒溢出 0.35%误差
  22.                 TH0 = 0x00;
  23.                 TL0 = 0x00;
  24.                 TR1 = 1;
  25.                 TR0 = 1;
  26.                 ET1 = 1;
  27.                 while(a--);
  28.                 EA = 1;
  29. }

  30. void Pulse()   
  31. {
  32.                 Fx=TL0+TH0*256;       //赋值脉冲
  33.                 TH0=0x00;             //清零
  34.                 TL0=0x00;
  35. }
  36.        
  37. void T11(void) interrupt 3   //0 外0  1 定0  2 外1  3 定1  4 串
  38. {  
  39.                 TH1 = (65536-9216)/256;   //10ms定时 0%误差
  40.                 TL1 = (65536-9216)%256;
  41.                 j++;
  42.                 if(j>=100)
  43.                 {
  44.                 Pulse();
  45.                 sprintf(A,"%ld",Fx);
  46.                 send(A);
  47.                 send("\r\n");
  48.                 j=0;
  49.                 }
  50. }

  51. void UartInit(void)                //9600bps@11.0592MHz
  52. {
  53.         PCON &= 0x7F;                //波特率不倍速
  54.         SCON = 0x50;                //8位数据,可变波特率
  55.         AUXR |= 0x04;                //独立波特率发生器时钟为Fosc,即1T
  56.         BRT = 0xDC;                //设定独立波特率发生器重装值
  57.         AUXR |= 0x01;                //串口1选择独立波特率发生器为波特率发生器
  58.         AUXR |= 0x10;                //启动独立波特率发生器
  59. }


  60. void main()
  61. {
  62.         Timer_Init();
  63.         UartInit();
  64.         while(1);
  65. }
复制代码

所有资料51hei提供下载:
8.8(频率计).zip (31.15 KB, 下载次数: 35)


作者: admin    时间: 2020-4-12 21:38
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
作者: 0711zhao    时间: 2020-11-4 20:53
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;
这里为什么 要用while(a--);?
作者: ly132806    时间: 2020-11-13 17:16
求原理仿真图




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1