单片机原理及应用笔记

单片机内部结构与项目实践

作者简介

马荣潇,男,银川科技学院计算机与人工智能学院,2022级计算机科学与技术9班本科生,单片机原理及应用课程第4组。

指导老师:王兴泽

电子邮件:wxzeh_work@163.com

个人CSDN主页 2201_75434908-CSDN博客

前言

本篇文章是参考《单片机原理及应用(c语言版)第2版》杨居义·编著教材 清华大学出版" http://www.tup.tsinghua.edu.cn" 编写的笔记 。文章由 罗静、李佳泰、张钰轩、张睿睿、马荣潇同学共同完成,其中罗静、张钰轩、张睿睿同学负责笔记总结 ,李佳泰同学负责整理,由马荣潇负责编写排版。

本文章由理论和实践两大部分组成是我们自己的一些总结,欢迎阅读指正!

一、任务 18-1:工程知识

1. 定时器/计数器的工作方式

定时器/计数器有4种工作方式,即方式0、方式1、方式2和方式3, 由 TMOD 中的MO和M1位选择

1) 方式0

方式0构成一个13位定时器/计数器,以T0例图4-8为T0作方式0时的逻辑结构。T1在方式0时的逻辑结构和操作与T0完全相同。

由图4-8可知,定时器/计数器是由 TL0的低5位和 TH0的8位组成的一个13位加1计数器(TL0的高3位不用);若TL0的第5位有进位,直接进到TH0中的最低位。当THO溢出时,向中断位 TF0进位(硬件自动置位),申请中断。

当C/T=0时,多路开关连接12分频器输出,T0对机器周期进行计数,此时,T0为定时器。

当C/T=1时,多路开关与T0(P3.4)连通,外部计数脉冲由T0输入,当外部信号电平发生由0到1的负跳变时,计数器加1, 此时,T0为计数器。

当门控位 GATE=0时,或门输出始终为1,与门被打开,与门的输出电平始终与 TR0的电平一致,实现由TR0控制定时器/计数器的启动和停止。若软件使TR0置1,接通控制开关,启动T0,13位加1计数器在定时初值或计数初值的基础上进行加1计数;溢出时,13位加1计数器为0,,TF0由硬件自动置1, 申请中断。如要循环计数,则T0需重置初值,将TF0复位,可用重置初值语句和JBC 命令实现;若TR0清零,关断控制需重置初值,将 TF0复位,可用重置初值语句和JBC 命令实现。若TR0清零,关断控制开关,停止T0,加1计数器停止计数。

当GATE=1时,由输人电平和TR0位的状态来确定与门的输出。TR0=1则与门打开,外部信号 INT0的电平通过引脚直接开启或关断T0,高电平允许计数,低电平停止计数;TR0=0则与门被封锁,控制开关被关断,停止计数。

7MOD是8位计数器 (分旅位,低代位。

2) 方式1

T0工作于方式1时,逻辑结构图如图4-9所示。在方式1下,以T0为例,定时器/计数器是由TL0中的8位和TH0中的8位组成一个16位加1计数器。方式1的逻辑结构与操作几乎完全与方式0相同,最大的区别是方式1的加1计数器是16位。

3) 方式2

T0方式工作于方式2时,其逻辑结构图如图4-10所示。在方式2下,以T0为例,定时器机数器是一个能自动装人初值的8位加1计数器。TH0中的8位用于存放定时初值或计数初值,TL0中的8位用于加1计数器,当计数器溢出时,硬件TF0自动置1,同时自动将TH0中存放的定时初值或计数初值再次装入TL0,继续进行计数。方式0和方式1用于循环计数,在每次计满溢出后,计数器都会复0,要进行新一轮计数就必须重置计数初值。这不仅会使编程复杂,而且影响定时精度。而方式2具有自动装入初值功能,避免了上述缺点,适用于较高精度的定时信号发生器。

4)方式3

T0工作于方式3时,逻辑结构如图4-11所示。由图4-11可知,T0工作于方式3时,T0分为两个独立的8位加1计数器TH0和TL0。TL0既可用于定时,也可用于计数,而TH0只能用于定时。

在方式3下,TL0占用原T0的各控制位、引脚和中断源,即C/T、GATE、TR0、TF0和T0(P3.4)引脚、INT0(P3.2)引脚。而TH0占用原T1的控制位TF1和TR1,同时还占用了T1的中断源,其启动和关闭仅受TR1置1或清零控制。TH0只能对机器周期进行计数,因此,TH0只能用作简单的内部定时,不能用作对外部脉冲进行计数,是T0附加的一个8位定时器。

二、任务18-2-1:用T0查询方式控制P1.0引脚的蜂鸣器发出1kHz音频

1. 任务要求

(1)掌握TMOD的设置。

(2)掌握定时器/计数器初始值的计算。(3)掌握T0在方式1的编程方法。

2.任务描述

T0工作于方式1,采用查询方式控制P1.0引脚的蜂鸣器发出1kHz音频,设单片机晶振频率 fosc=12MHz。

3. 任务实现

1)分析

因T0工作于方式1,则TMOD=XXXX0001B。

  1. 设置T0的初始值:只要让单片机的P1.0引脚的电平信号每隔音频的半个周期取反一次即可发出1kHz音频。音频的半个周期为T=1/1000/2Hz=0.0005s,即500μs。由于T机=12T时钟=12X1/fosc =1μs,而方式1的最长定时时间为65.536ms,T0初始值X=2的16次方减T除T机

THO=(65536-500)/256; //TO 的高8位赋初值

TLO=(65536-500)*256; //TO 的低8位赋初

2) 程序设计

先建立文件夹XM18-2-1,然后建立工程项目XM18-2-1,最后建立源程序文件XM18-2-

1.c,输入如下源程序。

#include<reg51.h>

sbit sound = P1^0;

void main(void)

{

TMOD = 0x01;

TH0 = (65536 - 500)/256;

TL0 = (65536 - 500)%256;

TR0 = 1;

while(1)

{

while(TF0==0)

;

TF0 = 0;

sound = ~sound;

TH0 = (65536 - 1000)/256;

TL0 = (65536 - 1000)%256;

}

}

(3)用Proteus软件仿真

经过Keil软件编译通过后,在ProteusISIS编辑环境中绘制仿真电路图如2-1所示。

图2-1用T0查询方式控制P1.0引脚的蜂鸣器发出1kHz音频

相关推荐
呱呱巨基10 分钟前
vim编辑器
linux·笔记·学习·编辑器·vim
新子y17 分钟前
【小白笔记】普通二叉树(General Binary Tree)和二叉搜索树的最近公共祖先(LCA)
开发语言·笔记·python
聪明的笨猪猪19 分钟前
Java JVM “调优” 面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
爱学习的uu38 分钟前
CURSOR最新使用指南及使用思路
人工智能·笔记·python·软件工程
YuCaiH1 小时前
Linux文件处理
linux·笔记·嵌入式
小莞尔1 小时前
【51单片机】【protues仿真】基于51单片机智能窗帘系统
c语言·stm32·单片机·嵌入式硬件·物联网·51单片机
Cathy Bryant1 小时前
大模型损失函数(二):KL散度(Kullback-Leibler divergence)
笔记·神经网络·机器学习·数学建模·transformer
qq_398586541 小时前
Threejs入门学习笔记
javascript·笔记·学习
hour_go2 小时前
TCP/IP协议相关知识点
网络·笔记·网络协议·tcp/ip
潘达斯奈基~2 小时前
在使用spark的applyInPandas方法过程中,遇到类型冲突问题如何解决
大数据·笔记