版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、思考:读4个并口的引脚数据时,应先向相应的端口写 T,然后 再读数据,否则数据会出错,请分析这是为什么?补充知识:什么是真正的双向口和准双向口?(1)准双向口引脚有两种状态,内部有上拉电阻,做输入口使用时,一定要先 向端口写1”。真正的双向口内无上拉电阻,有三种状态,除输出高、低两种电 平状态外,还有一种输入高阻 悬浮”态。(2)P0 口作为通用I/O 口时,输出电路是漏极开路电路,内部无上拉电阻,需夕 接上拉电阻,此时, P0 口也是一个准双向口。(3)P0 口作为分时复用地址/数据总线时,由于访问外部存储器期间,CPU会自动 向P0 口的锁存器写入0FFH,对用户而言,P0 口此时才是真正
2、的三态双向口。输出三态门是由两只场效应管组成,是真正的双向口,这是因为为保证数据的正 确传送,需要解决芯片内外的隔离问题,即只有在数据传送时才接通,不进行数 据传送时,芯片内外处于隔离状态。P1P3 口中,上拉电阻代替P0 口中的上拉场效应管,输出缓冲器不是三态的, 因此不是真正的双向口,只能称其为准双向口。MCS-51的I/O端口有三种数据操作方式:(1)输出数据方式:使用一条数据传送指令。MOV P0, #0FFHANL P0, #data ORL P0, A(2) 读端口数据方式:CPU读入并非端口引脚线上的数据,而是端口锁存器 的内容。MOV A, P1MOV R0, P1MOV 20
3、H, P1MOV R0, P1(3)读端口引脚方式:读端口引脚方式可以从端口引脚上读入信息。在这种方式下,CPU首先必须使欲读端口引脚所对应的锁存器置1,使输出场效应管截止,然后才能读端口引脚。51单片机的缺点:I/O 口驱动能力弱8位单片机中AVR单片机的I/O 口驱动能力最强,单根I/O引脚灌电流最大 20mA,拉电流最大40mA。3. CPU的时序时序:CPU在执行指令时所需控制信号的时间顺序称为时序。时序单位有4个,从小到大依次是节拍、状态、机器周期和指令周期。节拍(时钟周期):又称为振荡周期、节拍(用P表示),定义为单片机提供时钟 信号的振荡源(OSC)的周期。它是时序中的最小单位。
4、状态:振荡脉冲经二分频后的信号的周期,即为状态,一个状态包含2个节拍。机器周期:通常将完成一个基本操作所需的时间称为机器周期。一个机器周期包 含12个时钟周期,包含6个状态,分别表示为S1S6,每个状态包含2拍P1 和P2,每一拍为一个时钟周期(振荡周期)。因此12个时钟周期依次可表示为 S1P1、S1P2、S2P1、S2P2、S6P1、S6P2。指令周期:执行一条指令所需要的时间。它是时序中的最大单位。一个指令周期 通常含有1, 2或4个机器周期。指令所包含的机器周期数决定了指令的运算速 度,机器周期数越少的指令,其执行速度越快。思考题:设应用单片机晶振频率为 12MHz,问时钟周期、机器周
5、期、指令周期 分别为多少? 80C51单片机中,由 个振荡周期组成1个机器周期,由个机器周期组成1个指令周期。可通过测量ALE确定CPU是否工作,ALE有时钟的特点。指令字节数:存储该指令所需的 ROM单元数指令机器周期数:执行该指令所花费的机器周期数MCS-51/8051共有111条指令,这些指令的字节数和机器周期数各不相同,可分为六类,对应于六种基本时序:单字节单周期指令单字节双周期指令单字节四周期指令双字节单周期指令双字节双周期指令三字节双周期指令项目2计数:计数是指对外部事件的个数进行计量。其实质就是对外部输入脉 冲的个数进行计量。定时:8051单片机中的定时器和计数器是一个部件,只不
6、过计数器记录 的是外界发生的事件,而定时器则是由单片机内部时钟源脉冲进行计数 的。这个计数源是由单片机的晶振经过12分频(即机器周期脉冲)后获得的一个脉冲源。所以定时器计数脉冲的时间间隔与晶振有关。工作方式2( M1M0=10,自动重装计数初值的8位加1定时器/计数器)16位定时器/计数器被拆成两个8位寄存器TH0和TL0,初始化时必须装入相 同的定时器/计数器初值。以TL0作计数器,而TH0作为预置寄存器。当计数 满溢出时,TF0置1”,同时TH0将计数初值自动装入 TL0。这种工作方式很 适合于那些重复计数的应用场合(如串行数据通信的波特率发生器) 。计数器初值的计算方法:用最大计数量减去
7、需要的计数次数。即:TC=M -C其中:TC 计数器需要预置的初值;M 计数器的模值(最大计数值);方式0时,M=213 ;方式1时,M=216 ;方式2, 3时,M=28 ;c计数器计满回0所需的计数值,即设计任务要求的 计数值。例如:流水线上一个包装是 12盒,要求每到12盒就产生一个动作,用单片机 的工作方式0来控制,则应当预置的初值为:TC = M - C = 213 -12=8180=1FF4H思考:TH、TL分别送什么?定时器初值的计算定时时间的计算公式为:T= (M -TC ) X T0 (或 TC=M -T/T0 )其中:T定时器的定时时间,即设计任务要求的定时时间;12倍;1
8、2MHz ,T0 计数器计数脉冲的周期,即单片机系统主频周期的 M 计数器的模值;TC 定时器需要预置的初值。若设初值TC=0,则定时器定时时间为最大。若设单片机系统主频为 则各种工作方式定时器的最大定时时间为:工作方式 0:Tmax=213X 1s=8.192ms工作方式 1:Tmax=216X 1s=65.536ms工作方式 2 和 3: Tmax=28 X Vls=0.256ms(1)采用查询方式处理的程序C语言程序:# include vreg51.hsbit P1_0=P1A0;void main() / 主程序char i;TMOD=0x20;TH1= 0x38;TL1=0x38;
9、TR1=1;for(;)if (TF1) TF1=0;P1_0=! P1_0;/查询计数溢出采用中断处理方式的程序C语言程序:# include sbit P1_0=P1A0;void main() / 主程序TMOD=0x20;TH1= 0x38;TL1=0x38;EA=1;ET1=1;TR1=1;while(1);void time。nt(void) interrupt 3/ 中断服务程序 _P1_0=!P1_0;思考:若要输出60ms的方波程序该如何修改?若输出60ms方波,则定时时间为30ms,工作方式选择方式1 (16位加1定时器 /计数器方式)。TC=M-T/ T 计数=216-3
10、0ms/1y s=65536-30000=8AD0HC51程序如下:#in cludesbit flash_l ed=P1A0;void ma in (void)TMOD=0x01;TH0=0x8A;TL0=0xD0;IE=0x82;TR0=1;while(1);void timer0(void) in terrupt 1TH0=0x8A;TL0=0xD0;flash_led= !flash_led; 一 一【例】 设系统时钟频率为12MHZ,用定时/计数器T0编程实现从P1.0输出周 期为1s的方波。分析:系统时钟频率为 12MHz时,定时器/计数器的最长的定时是方式2 (16位加1定时器/
11、计数器)下的65.536ms 500ms的定时无法直接实现,可以结合 软件计数器来进行设计。如:用定时/可计数器T0产生周期性为10ms的定时,然后用一个寄存器 R2对 10ms计数50次或用定时/计数器T1对10ms计数50次实现。初值计算:TC=M -T/T0 =216-10ms/1 卩 s=65536-10000=D8F0H(1)用寄存器R2作计数器软件计数,中断处理方式C语言程序:# in elude 包含特殊功能寄存器库sbit P1_l= P1A1;char i;void mai n()TMOD=0x01;TH0=0xD8;TL0=0xf0;EA=1;ET0=1;i=0;TR0=1
12、;while(1);void time0_i nt(void) in terrupt 1/ 中断服务程序TH0=0xD8;TL0=0xf0;i+;if (i=50) P1_1=! P1_1; i=0;(2)用定时/计数器T1计数实现,定时/计数器T1工作于计数方式时,计数脉 冲通过T1 (P3.5)输入,设定时/计数器TO定时时间到对T1 (P3.5)取反一次, 则T1( P3.5)每20ms产生一个计数脉冲,那么定时 500ms只须计数25次,设 定时/计数器 T1 工作于方式 2, 初值 X=256-25=231= 111OO111B=E7H, TH1=TL1=E7H 。因为定时 /计数器
13、 T0 工作于方式 1 ,定时,则这时方式控制字 为01100001B(61H)。定时/计数器T0和T1都采用中断方式工作。C 语言程序如下:# include /包含特殊功能寄存器库sbit P1_仁 P1A1;sbit P3_5=P3A5;void main()TMOD=0x61;TH0=0xD8;TL0=0xf0;TH1=0xE7; TL1=0xE7;EA=1;ET0=1;ET1=1;TR0=1;TR1=1;while(1);void time0_int(void) interrupt 1/T0 中断服务程序 TH0=0xD8;TL0=0xf0;P3_5=!P3_5;void time1
14、_int(void) interrupt 3/T1 中断服务程序 P1_1=! P1_1;定时器的应用:扩展外部中断【例】利用定时器 T0 扩展一个外部中断解:P3.4( T0)作为外部中断的输入引脚,设定 T0工作方式2 (自动重装初值 的8位计数方式),同时计数初值设为0FFH,这样,只要P3.4输入一个负脉冲, 计数器加 1,产生溢出中断请求。初始化程序:定时器的应用: PWM 信号输出PWM(Pulse Wide Modulation)即脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术, 广泛应用在从测量、 通信 到功率控制与变换及 LED 照明等许多领域中。
15、随着电子技术的发展,出现了多种 PWM技术:相电压控制PWM、脉宽 PWM 法、随机 PWM 、SPWM 法、线电压控制 PWM 等。有的单片机有 PWM 输出功能, 8051 单片机没有 PWM 输出功能, 可利用 定时器产生PWM信号。在单片机应用中,PWM信号通常用于LED调光、直流电机调速等。 例:在P1.0引脚输出固定周期(50ms)的PWM信号,占空比10%、50%、 90%可变,用一个按键调节占空比。解:设置一个变量,取值范围 02,对应占空比10%、50%、90%。在 中断服务函数中根据该变量为高电平或低电平的定时赋不同的初值(设 定时器T0工作方式1):10% :高电平5ms
16、,初值0xec78,低电平45ms,初值0x5038;50% :高电平25ms,低电平25ms,初值0x9e58;90% :高电平45ms,低电平5ms1. MCS-51的中断源1)2个外部中断源(中断标志为IE0和IE1 )由(P3.2 )端口线引入,低电平或下降沿引起。由(P3.3 )端口线引入,低电平或下降沿引起。2)2个定时器中断(中断标志为 TF0、TF1)T0 :定时/计数器0中断,由T0回零溢出引起。T1 :定时/计数器1中断,由T1回零溢出引起。3)串行口中断(中断标志为 SCON的TI/RI位串行端口完成一帧字符的发送或接收后自动置位TI或RI标志位,发送中断和接收中断都将向
17、CPU申请串口中断。5个中断源信号输入引 脚中断请求标志 (TCON 、SCON)中断允许控制 (IE)中断允许总控位 EA(IE.7)中断优先级 控制(IP)中断服务 程序入口 地址自然优先 级外部中断0INT0(P3.2)IE0(TCON.1)EX0(IE.0)PX0(IP.0)0003H高定时/计数器0T0(P3.4)TF0 (TCON.5)ET0(IE.1)PT0(IP.1)000BH外部中断1INT1(P3.3)IE1(TCON.3)EX1(IE.2)PX1(IP.2)0013H定时/计数器1T1(P3.5)TF1 (TCON.7)ET1(IE.3)PT1(IP.3)001BH低UA
18、RT串行口RXD(P3.0)TXD(P3.1)RI(SCON.0)异 或 TI(SCON.1)ES(IE.4)PS(IP.4)0023H中断初始化设置在使用中断系统功能之前必须对中断系统进行初始化。初始化是指对IP、IE、TCON、SCON等与中断系统相关的特殊功能寄 存器进行赋值。初始化内容1)设定中断源的优先级(IP相应位置1 )2)若为外部中断,还要设定中断触发方式(写 TCON的ITx )3)开相应的中断(IE相应位置1)例:设8051外部中断源接引脚INTO,中断触发方式为电平触发,高优先级, 试编制8051中断系统的初始化程序。例:使用外部中断0和外部中断1, INTO为高优先级,
19、电平触发方式;INT1为 低优先级,下降沿触发方式,写出初始化程序。项目4波特率:每秒钟传送信号的数量,单位为波特(Baud)。比特率:每秒钟传送二进制数的信号数(即二进制数的位数),单位是bps (bit per second 或写成 b/s (位/秒)。在单片机串行通信中,传送的信号是二进制信号,波特率与比特率数值 上相等。单位采用bps。波特率(bps)=字符的位数x字符/秒(Bps)例如,异步串行通信的数据传送的速率是120字符/秒,而每个字符规定包含10位数字,则传输波特率为:120字符/秒x 10位/字符=1200位/秒=1200bps 通常,异步通信的波特率在50佃200bps之
20、间。波特率的计算方式 0: B=fosc/12方式2 :波特率由PCON中的选择位 SMOD来决定,可由下式表示:B= fosc x 2SMOD/64方式1和方式3:波特率是可变的,由定时器 T1的溢出率控制。波特率为:B= (2SMOD/32 )x定时器T1溢出率T1溢出率=1/ T1定时时间=1/ (计数脉冲周期*计数次数=(fosc/12 / (2K-TC )其中:K定时器T1的位数,定时器T1用作波特率发生器时,通常工作 在方式2,所以T1的溢出所需的周期数=28-TC。TC 定时器T1的预置初值。波特率 B=(2SMOD /32) x fosc/12X (28-TC) 定时器 T1
21、的初值:TC=256-2SMOD x fosc/(384 x B) TC=256-2SMOD*fosc/(384*B)(1)初始化编程写SCON。根据工作方式确定 SM0、SM1位;对于方式2和方式3还要 确定SM2位;如果是接收端,则置允许接收位 REN为1;如果方式2和 方式3发送数据,则应将发送数据的第 9位写入TB8中。设置波特率。写PCON,若波特率可变,则通过对T1(方式2)编程设置波 特率。写IP、IE。设置中断优先级,开中断。双机通信要求通信双方满足如下约定:字符格式相同;通信波特率相同;电平信号相同。补充MCS-51的编程语言常用的有两种,一种是汇编语言,一种是C语言(C51
22、)。汇编语言的特点:机器代码生成效率很高,可读性差,可移植性差,编程难度 大。C51与ASM-51 (汇编语言)相比,有如下优点: 编程员无须深入了解单片机的指令系统和硬件,只需初步了解其存储器结构。 良好的模块化结构,便于改进和扩充。 寄存器分配、存储器的寻址及数据类型,中断服务程序的现场保护和恢复, 中断向量表的填写都由C51编译器处理。 丰富的库函数。 能方便地管理内部寄存器的分配、不同存储器的寻址和数据类型等细节问题。 头文件中允许定义宏、说明复杂数据类型和函数原型,有利于程序的移植和 支持单片机的系列化产品的开发。 可方便地接受多种实用程序的服务,有专门的实用程序自动生成;有实时多
23、任务操作系统,可调度多道任务,简化用户编程,提高运行的安全性等。C51缺点:可控性差,对硬件的控制有限,而汇编语言可以完全控制硬件资源; 精确度低;代码效率低,在小应用程序中产生的代码量大, 执行速度慢,但在较大的程序中代码效率仅比汇编程序低 1020%。C语言本身没有输入输出语句。输入和输出是通过输入输出函数 scanf()和printf() 来实现的。输入输出函数是通过标准库函数形式提供给用户数据类型长度(位)取值范围charsigned char8-128127字符型unsigned char80255ntsigned int16-3276832767整型unsigned int1606
24、5535ongsigned long32-2147488364821474883647长整型unsigned long3204294967295浮点型float32 1.75494E-38 3.402823E+38指针型*1-3字节对象的地址访问SFRsfr80255sfr1616065535位型bit10, 1sbit10, 1当运算符两侧的数据类型不同时,要转换成同种类型。转换方式有两种情况:一是自动转换,是指编译器在编译时自动进行的类型转换。顺序为:bitchar intIonfloat, signedunsigned二是强制类型转换,通过强制类型转换符“)”对数据类型进行人为的强制 转
25、换。如:(long)a,将a强制转换为long类型。存储器类型对应单片机存储器data直接寻址的片内RAM低128B,访问速度快bdata片内RAM的可位寻址区(20H2FH ),允许字节和位混合访问data间接寻址访问的片内RAM,允许访问全部片内 RAM,共256字节。pdata用Ri间接分页访问的片外 RAM的低256B (MOVX Ri)xdata用DPTR间接访问的片外 RAM,允许访问全部 64KB片外RAM (MOVX DPTR)code程序存储器ROM 64k空间 (MOVC A+DPTR )特殊功能寄存器变量对SFR的操作,只能采用直接寻址方式。为了能直接访问这些特殊功能 寄
26、存器,Keil C51扩充了两个关键字Sfr”、Sfr16”,可以直接对51单片 机的特殊寄存器进行定义,这种定义方法与标准C51语言不兼容,只适用于对8051系列单片机C51编程。格式:sfr或sfr16 特殊功能寄存器名=地址;sfr后面是一个要定义的名字,要符合标识符的命名规则,名字最好有一 定的含义等号后面必须是整型常数,不允许有带运算符的表达式,而且该常数必 须在特殊功能寄存器的地址范围之内(80H-FFH )。sfr是定义8位的特殊功能寄存器,sfr16用来定义16位特殊功能寄存器, 如8052的T2定时器,可以定义为:sfr16 T2=0xCC; /这里定义 8052定时器 2,
27、地址为 T2L=CCH,T2H=CDH用sfr16定义16位特殊功能寄存器时,等号后面是它的低位地址,高位 地址一定要位于物理低位地址之上。注意的是,sfr16适用于所有新的16位SFR,但不能用于定时器0和1的定义。对于需要单独访问SFR中的位,C51的扩充关键字sbit可以访问位寻址 对象。位变量格式:bit 位变量名;sbit位变量名=位地址;bit与sbit的区别:bit用于位变量操作,值为0或1,可用于定义变量类型、函数声明、函 数返回值(若函数中禁止中断或函数中包含明确的寄存器组切换,则不 能定义函数返回值为 bit )等,存储于内部 RAM 的位寻址区,不能定义 位指针和位数组。
28、Sbit用于位变量操作,值为0或1但使用范围更广泛,可以用于定义任 意可位寻址的各个位(包括特殊功能寄存器) 。绝对地址的访问1. 使用C51运行库中的预定义宏? CBYTE以字节形式对code区寻址? CWORD以字形式对code区寻址? DBYTE 以字节形式对 data 区寻址? DWORD以字形式对data区寻址? XBYTE以字节形式对xdata区寻址? XWORD以字形式对xdata区寻址? PBYTE以字节形式对pdata区寻址? PWORD以字形式对pdata区寻址例: #include#define PORTA XBYTE0xffc0#define NRAM DBYTE0x4
29、02. 通过指针访问例 4-8】 通过指针实现绝对地址的访问。#define uchar unsigned char /*定义符 号 uchar 为 unsigned char*/#define uint unsigned int/*定义符号 uint 为 unsigned int*/void func(void)uchar data var1;uchar pdata *dp1;/*定义一个指向pdata区uchar型数据的指针dpi*/uint xdata *dp2;/*定义一个指向xdata区uint型数据的指针dp2*/uchar data *dp3;/*定义一个指向data区的ucha
30、r型数据指针dp3*/dp仁0x30;/*dp1指针赋值,指向pdata区的30H单元*/dp2=0x1000;/*dp2指针赋值,指向xdata区的1000H单元*/*dp1=0xff;/*将数据 0xff 送到片外 RAM30H 单元*/*dp2=0x1234;/* 将数据 0x1234 送到片外 RAM1000H 单元 */dp3=&var1; /*dp3 指针指向 data区的 varl 变量*/*dp3=0x20;/*给变量 var1 赋值 0x20*/3. 使用 C51 扩展关键字 _at_格式:存储器类型 数据类型说明符 变量名 _at_ 地址常数【例 4-9】#define u
31、char unsigned char#define uint unsigned intvoid main(void)data uchar x1 _at_ 0x40;/*在data区中定义字节变量 x1,其地址为40H*/xdata uint x2 _at_ 0x2000;/*在 xdata 区中定义字变量 x2,其地址为 2000H*/ x1=0xff; x2=0x1234;while(1); 注意:使用 at 关键字定义的变量必须定义为全局变量!指针访问方式 unsigned char xdata *dp=0x6000; unsigned char i; for(i=0;i10;i+ ) *
32、dp+=0;使用预定义宏 unsigned char i; for(i=0;i10;i+ ) XBYTE0x6000+i=0;【例】分别使用三种方法编程实现将起始地址为 3000H 的片外 RAM 的 16字节内容送入起始地址为 50H的片内RAM中。C51 库函数: ( 1 )本征库函数该类函数在编译时直接将其固定的代码插入当前行, 而不是用 ACALL 和 LCALL 语句实现。共 9 个本征库函数:_crol_:将char型变量循环左移指定位数; _cror_:将char型变量循环右移指定位数; ror_:将int型变量循环左移指定位数; rol_:将int型变量循环右移指定位数; ro
33、l_:将long型变量循环左移指定位数; ror_:将long型变量循环右移指定位数; _nop_:相当于插入汇编指令nop; _testbit_:相当于 JBC bitvar 指令; _chkfloat_:测试并返回源点数状态。使用上述函数,源程序开头必须有编译命令“#include ”。在 C51 中,允许三种循环结构相互嵌套。 【例 4-18】 用嵌套结构构造一个延时程序。 void delayms(unsigned int x) unsigned char j;while(x-)for (j=0;j125;j+);/*延时约8卩s*125=1ms,应根据实验调整j的上限125*/ 若晶振为12MHz,该函数延时约x毫秒。 函数的一般定义形式为:返回值类型 函数名(形式参数列表) 编译模式 reentrantinterrupt musing n函数体指针是C语言中的一个重要概念。指针类型数据在C语言程序中使用十分普遍, 正确地使用指针类型数据,可以有效
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 区块链服务合同范本
- 机械租赁个人协议书
- 广东佛山市乐从镇事业单位招考易考易错模拟试题(共500题)试卷后附参考答案
- 常熟市城市经营投资限公司招考工作人员易考易错模拟试题(共500题)试卷后附参考答案
- 不能达成调解协议书
- 校级结对交流协议书
- 宁波市交通运输委员会委管委属事业单位招考高层次人才易考易错模拟试题(共500题)试卷后附参考答案
- 农村办酒场合同范本
- 格斗签署伤亡协议书
- 框架协议与框架合同
- 数据新闻与信息可视化 课件 第一章 数据新闻与可视化概论
- 2024年宁波市水务环境集团有限公司招聘笔试参考题库含答案解析
- 嵊州嘉洋纺织有限公司面料技术改造项目环境影响报告
- 110kv各类型变压器的计算单
- 华友岗位职级图
- 《商务礼仪与沟通》项目十
- 了不起的我课件完整版
- 三菱HOPE电梯的故障码
- 抖音企业号操作文档最新版
- YC/T 145.2-2012烟用香精相对密度的测定
- GB/T 5709-1997纺织品非织造布术语
评论
0/150
提交评论