Log 11==引用

关键代码设计说明

公共变量定义及说明

        sbit Sel0=P2^0;//                   

        sbit Sel1=P2^1;//

        sbit Sel2=P2^2;//位选的三个引脚控制位

        uchar show_w1;

        uchar show_w2;

        uchar show_w3;

        uchar show_w4;

        uchar show_w5;

        uchar show_w6;

        uchar show_w7;

        uchar show_w8;//show_wi(i=1,2,3,4,……,8)分别是对应左到右的各个数码管上的显示的数字

        uchar flag;//分频作用,同时用作位选下标

        uchar count;//分频作用的变量

        uchar duanxuan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,

                                        0x39,0x5e,0x79,0x71,0x40,0x00}; //段选,显示0-f

        uchar weixuan[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07}; //位选,选择是0-7中的一个数码管            **3.2 Init****():完成初始化配置;**

(1)P0和P2口需要设置成推挽模式输出,以驱动LED数码管正常显示。

P2M1=0x00; P2M0=0xff; P0M1=0x00; P0M0=0xff;

(2)TMOD=0x01; //定时器0采用模式1

(3)打开中断并允许定时器0中断

                        EA=1;//打开总中断

                        ET0=1;//允许定时器0中断    

                        TR0=1;//启动定时器0

(4)设置定时器初始值

           TH0=(65535-1000)/256;  TL0=(65535-1000)%256;

    (5)设置位选位flag初始值为0;

(6)为每个数码管要显示的内容赋初值

show_w1=0;
show_w2=1;
show_w3=2;
show_w4=3;
show_w5=4;
show_w6=5;
show_w7=6;
show_w8=7;

void timer0() interrupt 1

当定时器0初始值不断加一最终溢出时激发的处理方法。

        (1)       重设TH0、TL0;

        (2)       flag加一;如果flag等于8,则赋值flag为0

        (3)       P0要显示的值为0

        (4)       P2为位选结果,下标为flag。

        (5)       如果位选为0,则显示段选下标为show_w1%10对应的数值;如果位选为1,则显示段选下标为show_w2%10对应的数值,以此类推。由于定时时间为1ms用于处理显示内容,而下一个1ms很快就会到,因此,虽然实际上并不是同时选通相应的数码管位,但是由于人眼有时延,因此感觉是同时显示。

void main()

主体功能,主要用于控制数码管循环显示

(1) 调用Init()完成程序初始化;

(2) 单纯一个死循环即可

寄存器知识补充说明

MCS51系列的单片机通常有2个16位可编程定时/计数器,即定时器0和1。MCS52系列还有一个定时/计数器2。可编程的意思是指其功能(如工作模式、定时时间、启动方式等)可由指令来确定和改变。通常都是赋值指令给相关的寄存器。与定时/计数器相关的有两个特殊功能寄存器(模式控制寄存器TMOD和控制寄存器TCON)。且定时器往往在中断中使用,以便当时间到了完成相应处理。MCS51单片机定时/计数器工作原理示意图如图6所示。

image

MCS51单片机定时/计数器工作原理示意图

每个16位定时/寄存器又分别由两个8位专用寄存器组成。其中TH0、TL0(对应定时器0)、TH1、TL1(对应定时器1),其访问地址依次为8AH-8DH。它们可单独访问,主要用于装载定时或计数的初始值。

定时/计数器0和1要正常工作,需要先设置好8位模式控制寄存器TMOD(89H)和8位控制寄存器TCON(88H)。TMOD主要用于设定定时/计数器的工作模式;TCON主要用于控制定时/计数器的启动/停止,保存T0、T1的溢出和中断标志。当定时器工作在计数方式时,外部事件可通过引脚P34(对应T0)或P35(对应T1)进行输入。本程序使用的是内部计时及相应处理,不是外部事件激活。

定时计数器工作原理:

16位的定时器/计数器实质上就是一个加1计数器。当定时器/计数器为定时工作方式时,计数器的加1信号由振荡器的12分频信号产生;每过一个机器周期,计数器加1,直至计满溢出为止。因此,定时器的定时时间与系统的振荡频率有关。

一个机器周期等于12个振荡周期,所以计数频率fcount=1/12osc。如果晶振为12MHz,则计数周期为:T=1/(12×106)Hz×1/12=1μs。这是最短的计数周期。若要延长定时时间,则需要改变定时器的初值,根据初始值需要选择适当的定时器长度(如8位、13位、16位等)。当定时器/计数器为计数工作方式时,通过引脚T0和T1对外部信号计数,外部脉冲下降沿将触发计数。若一个机器周期采样值为1,下一个机器周期采样值为0,则计数器加1。此后的机器周期S3P1期间,新的计数值装入计数器。所以检测一个由1至0的跳变需要两个机器周期,故外部事件的最高计数频率为振荡频率的1/24。例:如果选用12MHz晶振,则最高计数频率为0.5MHz。虽然对外部输入信号的占空比无特殊要求,但为了确保某给定电平在变化前至少被采样一次,外部计数脉冲的高电平与低电平保持时间均需在一个机器周期以上。

当CPU用软件给定时器设置了某种工作方式之后,定时器就会按设定的工作方式独立运行,不再占用CPU的操作时间,除非定时器计满溢出,才可能中断CPU当前操作。CPU也可以重新设置定时器工作方式,以改变定时器的操作。

在定时器/计数器开始工作之前,CPU必须将一些命令(称为控制字)写入定时/计数器。将工作模式控制字写入模式控制寄存器,工作状态字(或相关位)写入控制寄存器,并给定时/计数器赋初值。

定时器赋初始值计算:

如果需要需要定时为50MS,则计算方式如下:如果晶振是12MHZ,则机器周期为12MHz除以12,就是1MHz,每秒1000000次机器周期,那么50ms就是50000次机器周期。65536-50000=15536(3cb0),TH0=0x3c,TL0=0xb0。1ms就是1000次机器周期。(65536-1000)/256是高位,(65536-1000)%256是低位。

TMOD寄存器的设置依据如图7所示。

image

TMOD寄存器设置依据

TCON寄存器的设置依据如图8所示。

image

TCON寄存器设置依据

定时/计数器初始化基本流程如图9所示。

image

定时/计数器初始化流程

中断工作原理

中断的概念: CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生);CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断。MCS51中断信息如表2所示。

MCS51单片机中断信息表

image

与中断相关的寄存器包括:

①  中断允许控制寄存器IE:

中断允许控制寄存器IE

image
说明:

在用到中断时,必须要开总中断EA,即EA=1。

EX0(EX1):外部中断允许控制位。EX0=1开外部0号中断,EX0=0关闭外部0号中断。

ET0(ET1):定时中断允许控制位。ET0=1,开内部定时器0号中断;ET0=0关闭定时器中断0号开关。

ES: 串口中断允许控制位。ES=1,开串口中断;ES=0 关闭串口中断。

②  中断优先控制寄存器IP
image
说明:
  • l PS:串行口中断优先级控制位。PS=1设定串行口为高优先级中断;PS=0为低优先级中断。

  • l PT1:T1中断优先级控制位。PT1=1设定定时器T1为高优先级中断;PT1=0为低优先级中断。

  • l 外部中断1优先级控制位。PX1=1设定定时器外部中断1为高优先级中断;PX1=0为低优先级中断。

  • l PT0:T0中断优先级控制位。PT0=1设定定时器T0为高优先级中断;PT0=0为低优先级中断。

  • l PX0:外部中断0优先级控制位。PX0=1设定定时器外部中断0为高优先级中断;PX0=0为低优先级中断。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342