读《新概念51单片C语言教程》之二
Chapter 3
数码管
数码管工作是靠点亮内部的发光二极管,一个数码管通常有10个引脚,除了7个小段和1个小数点外,还有1个共同端,剩余1个引脚没有用,即第3引脚和第8引脚是连在一起的。TX-1C实验板上使用的数码管都是共阴极。
多个数码管一体时,公共端是独立的,即“位选”是可独立控制的,“段选”则是连接在一起的。因此,这就需要两个锁存器进行分别控制。TX-1C 的位选通是 P2^7,段选通是 P2^6。在同一时刻,位选通的所有数码管显示的数字都是一样的,这种显示方式称为静态显示。
动态(扫描)显示则是轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人类视觉暂留作用,使人感觉好像各个数码管同时在显示,而实际上多位数码管是一位一位轮流显示。
中断源
80C51有5个中断源,80C52则有6个(如下),2个优先级,可实现两级中断嵌套。
- INT0,外部中断0,由 P3.2 端口引入,低电平或下降沿引起;
- T0,定时器/计数器0;
- INT1,外部中断1,由 P3.3 端口引入,低电平或下降沿引起;
- T1,定时器/计数器1;
- TI/RI,串行口终端;
- T2,定时器/计数器2;
通常需要设置两个与中断有关的寄存器:中断允许寄存器IE,中断优先级寄存器IP。
前者用来设定各个中断源的打开和关闭,其可进行位寻址,共有7个,EA,全局中断允许位;ET2,定时器/计数器2中断允许位;ES,串行口中断允许位;其它的还有ET1,EX1,ET0和EX0。EX0是外部中断0中断允许位。单片机复位时,IE 全部初始化为0。
后者用来设定各个中断源属于两级中断中的哪一级,其可进行位寻址,分别有:PS,串行口中断优先级控制位;PT1,定时器/计数器1中断优先级控制位;PX1,外部中断1中断优先级控制位;以及PT0和PS0。
中断响应条件:
- 中断源有终端请求;
- 此中断源的中断允许位为1;
- CPU 开中断(EA=1)。
定时器/计数器
51单片机内部共有两个16位可编程的定时器/计数器,其实质是加1计数器(16位),由高8位和低8位两个寄存器组成。TMOD是定时器/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T1、T0的启动和停止及设置溢出标志。
TMOD 不能位寻址,高四位控制定时器/计数器1,低四位控制定时器/计数器0。
TCON 可位寻址,在单片机复位时全部清0,TF1,TR1,TF0,TR0用于定时器/计数器;IE1,IT1,IE0,IT0用于外部中断。
加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频后送来,另一个是T0和T1引脚输入的外部脉冲源。每来一个脉冲,计数器加1,当计数器全为1时,再输入一个脉冲,计数器回零,且计数器的溢出使 TCON 的 TF1 或TF0 置1,向 CPU 发出中断请求。
初始化流程:
- 对 TMOD 赋值,以确定 T0 和 T1 的工作方式;
- 计算初值,并写入 TH0、TL0,或 TH1、TL1;
- 中断方式,对 IE 赋值,开放中断;
- 使 TR0 或 TR1 置位,启动定时或计数。
拾遗
C51 的 C 语言中,code 关键字决定是存储位置是程序存储器,还是随机存储器。