找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2533|回复: 3
打印 上一主题 下一主题
收起左侧

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)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2020-4-12 21:38 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

板凳
ID:826942 发表于 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--);?
回复

使用道具 举报

地板
ID:828164 发表于 2020-11-13 17:16 | 只看该作者
求原理仿真图
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表