STC89C52RC定时器

2024-05-04 01:07:05 454

如电路图

image.png

image.png

定时器分为四个模块

  • 时钟源模块
  • 计数器模块
  • 控制逻辑模块
  • 中断模块 (notify)

如果要使用定时器, 需要对模块对应的寄存器做初始化

本次选择定时器0, 工作模式1

image.png

image.png

配合芯片手册

初始化TCON和TMOD两个地址

image.png

image.png

所以

  1. 时钟源模块
  2. 控制模块
  3. 中断模块
  4. M1/M0两位共同选择模式, 赋值01代表模式1

image.png

image.png

  1. 计数器模块

综上

TMOD

TMOD为不可位寻址 所以进行整体赋值

0000 0001

TMOD = 0x01

TCON

TCON可位寻址, 所以可以一个一个赋值

TF0=0

TR0=1

IE0=1

IT0=0

计数器

TH0=0xFC

TL0=0x66

附代码

#include "reg52.h"
#include "lcd1602.h"

typedef unsigned int u16;
typedef unsigned char u8;


sbit LED1 = P2^0;

void time0_init(void) {
    //选择为定时器0模式, 工作方式1
    TMOD = 0x01;
    // 给定时器赋初值, 定时1ms
    TH0 = 0xFC;
    TL0 = 0x66;
    // 打开定时器0中断允许
    ET0 = 1;
    // 打开总中断
    EA = 1;
    // 复位
    TF0 = 0;
    // 最后一步打开定时器
    TR0 = 1;
}


void main() {	
    LCD_Init();
    time0_init();

    while(1) {			

    }		
}

u16 a = 0;
u16 i = 0;

// 定时器0中断函数
void time0() interrupt 1 {
    // 定时器重新赋初值, 定时1ms
    TH0 = 0xFC;	
    TL0 = 0x66;
    i++;
    if (i == 1000) {
        i = 0;
        LED1 = !LED1;	
        a++;
        LCD_ShowNum(1, 1, a, 3);
    }						
}

烧录好程序, 即可看到LCD每隔1s (存在误差)自增, LED也进行亮灭


STC89C52RC定时器

STC89C52RC定时器

如电路图定时器分为四个模块时钟源模块计数器模块控制逻辑模块中断模块 (notify)如果要使用定时器, 需要对模块对应的寄存器做初始化本次选择定时器0, 工作模式1配合芯片手册初始化TCON和TMOD两个地址所以时钟源模块控制模块中断模块M1/M0两位共同选择模式, 赋值01代表模式1计数器模块综上
2024-05-04

freemarker 时间显示不正常 设置时区

项目在本地开发的时候显示正常,部署上服务器就一直差8个小时,最后发现freemarker官方文档有这样的说明time_zone:时区的名称来显示并格式化时间。 默认情况下,使用JVM的时区。 也可以是 Java 时区 API 接受的值,或者 "JVM default" (从 FreeMarker 2
2020-03-28
IDEA 2019.1 xml 不高亮

IDEA 2019.1 xml 不高亮

前几天更新了idea后,发现xml里的代码都没有了高亮,变得跟记事本一个德性了打开setting ,搜索 File Types,找到xml项, 查看下方的匹配格式,果然没有xml,(idea真是厉害)点击右方的+,输入*.xml,点击ok,解决问题
2020-03-28

npm install 淘宝镜像

npm install --registry=https://registry.npm.taobao.org
2020-03-28
Java中方法的参数传递机制

Java中方法的参数传递机制

来看一段代码 public class Man { private String name; private Integer age; public String getName() { return name; } publi
2020-03-28
基于自定义注解手写权限控制

基于自定义注解手写权限控制

方法一: AOP 方法二: 拦截器项目结构项目依赖<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-w
2020-03-28

Docker 部署 详细全过程 附代码

Docker 部署本站 全过程环境:CentOS7.61. 安装Docker其他版本CentOS可以参考这个https://help.aliyun.com/document_detail/187598.html查看本机内核版本,内核版本需高于 3.10uname -r 确保 yum 包最新yum u
2020-03-28

SpringBoot 启动普通java工程

引入依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.0.9</version> </dependency>
2020-03-28

Vue.js DOM操作

<template> <input type="button" @click="reply($event)" value="回复"> </template> export default { methods: { replyFun(e) {
2020-03-29
CentOS7编译调试OpenJDK12

CentOS7编译调试OpenJDK12

1. 下载源码https://hg.openjdk.java.net/jdk/jdk12点击左侧的browse,再点击zip,就可以下载zip格式的源码压缩包。unzip xxx.zip 解压文件2. 安装jdkyum install java-11-openjdk-devel -y3. 运行con
2020-04-23
编写自己的Spring Boot Starter

编写自己的Spring Boot Starter

1.新建一个maven项目命名规则统一是xxx-spring-boot-starter完整pom.xml<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"
2020-06-29