单片机原理及应用笔记

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

作者简介

马荣潇,男,银川科技学院计算机与人工智能学院,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音频

相关推荐
爱煲汤的夏二9 分钟前
《山海经》:北山
笔记
DreamByter30 分钟前
Day4:生信新手笔记 — R语言简单命令与Rstudio配置
开发语言·笔记·r语言
名字不要太长 像我这样就好1 小时前
【iOS】《Effective Objective-C 2.0》阅读笔记(一)
开发语言·笔记·学习·macos·ios·objective-c
画江湖Test1 小时前
分享一个您在汽车软件安全性测试中发现严重漏洞的案例,以及如何处理
嵌入式硬件·安全·面试·汽车·软件测试面试
黄交大彭于晏1 小时前
stm32 hal库 keil5工程编译烧录配置
stm32·单片机·嵌入式硬件
小康师兄1 小时前
【软考速通笔记】系统架构设计师⑯——通信系统架构设计
笔记·系统架构·系统架构师·局域网·通信系统·广域网·软件定义网络
陌夏微秋1 小时前
元器件选型与参数13 电源的分类-线性电源参数 RT9013 AMS1117 PCB布局布线
arm开发·单片机·嵌入式硬件·智能手机·51单片机·硬件工程
亦枫Leonlew1 小时前
微积分复习笔记 Calculus Volume 2 - 3.3 Trigonometric Substitution
笔记·数学·微积分
general_pp2 小时前
【Java笔记】第十六章:多线程
java·开发语言·笔记
DFT_bug_king2 小时前
sram测试注意讨论
嵌入式硬件·fpga开发