信息与通信Soc型单片机原理及应用_第1页
信息与通信Soc型单片机原理及应用_第2页
信息与通信Soc型单片机原理及应用_第3页
信息与通信Soc型单片机原理及应用_第4页
信息与通信Soc型单片机原理及应用_第5页
已阅读5页,还剩306页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

信息与通信Soc型单片机原理及应用第1页/共311页学习内容硬件:AT89C51硬件:C8051F320程序语言:汇编程序语言:C51X第2页/共311页我们课程的一些特点:1.加强单片机的专业英语(口语)2.板书比较多3.要考试的重点在课堂上明确指出4.C语言的反刍,编程语言:C515.放弃汇编语言6.面向实验,面向项目的教学,不最求全面和系统的知识(传统是怎么教的,我是怎么教的?)7.传统的AT89C51仅作为核,学习最新型SoC单片机C8051F3208.注重与ARM的衔接,成为ARM的垫脚石

10.加强实验,加强动手能力,以工程师为目标,以进一步的ARM学习为目标.-这样做法的依据:就业形势和我校师生的特点第3页/共311页哈佛大学校园第4页/共311页我们要做的实验(暂定)LED流水线单LED数码管,多数码管PWM(PulseWidthModulation)LED亮度控制,(舵机控制)UART(RS232串口)1601字符液晶16键盘外部事件中断,定时器中断ADC(模数转换),两类USB(中断型,批处理型)通信第5页/共311页1章51单片机基础术语:CPU处理器(Processor),微处理器单片机(MCU),51单片机嵌入式系统第6页/共311页概述单片机在嵌入式系统中的地位MCU8-bitARM32-bitASM,CASM,C/C++,OS什么是嵌入式系统?根据IEEE(国际电气电子工程师协会)的定义,嵌入式系统是“用于控制,监视或者辅助其它设备,机器和工厂运行的装置”(devicesusedtocontrol,monitor,orassisttheoperationofequipment,machineryorplants.)

单片机是不是嵌入式系统?Yes/no?Yes,but它是低端嵌入式系统.第7页/共311页MCU-ARM关系第8页/共311页51单片机发展过程8048=>8031=>8051=>8751=>89C51=>89C52=>89CxxxIntel,Atmel,SST,Philips,SiLab,..我们简单学习AT89C51,重点学习C8051F320第9页/共311页-学习单片机的目的和方法应用性:就业,工程师,项目经理(MCU命还长着)深造的基础:为32位嵌入式系统学习考研:单片机知识为理工本科生必须具备的就业:硬件很“硬”,软硬兼施支持:帮助理解计算机有关知识有关课程:C语言,IT电子技术,及线路板设计,VB6.0,VC++….第10页/共311页-我们的单片机学习方法从内核到芯片充分应用SoC芯片的功能,补充一些外设通过详细讲解实验程序学习芯片的sfr同学的实验要求在样板的基础上,自己部分编程第11页/共311页-开发工具,环境,开发过程-硬件:Protel99,原理图,PCB(马慧敏老师)-编程:

工程的建立,C51编程,编译,链接,下载,在线调试

C51编译器(Keil),IDE,EC5+JTAG+目标板-文件:xx.wsp:工程,xx.asm:汇编程序,xx.c,xx.lst,xx.obj,xx.hex,xx.bin-项目开发流程可行性分析=>立项=>需求分析=>硬件方案(框图)和设计(原理图,PCB图)=>制板=>软件方案(流程框图)=>编程=>调试=>定型=>性能测试=>文档

-学习内容:单片机结构,C51编程,十几个实验(马慧敏老师)

第12页/共311页-EC5-JTAG-Kit(Kit-EH200)连接PCUSBEC5适配器JTAGKit(开发机)5VDCEH200第13页/共311页-AboutJTAGJTAG:JointTestActionGroup(联合测试行动组织)JTAG于1990年被IEEE批准为IEEE1149.1-1990.JTAG是一种国际标准测试协议(IEEE1149.1兼容),主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议,如DSP、FPGA,ARM器件等。标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。第14页/共311页-U-EC5+Kit-EH200第15页/共311页-IDE界面

(IntegratedDevelopmentEnvironment)第16页/共311页-单片机的实际应用1.工控(IndustrialControl):数据采集(DataAcquisition),数控(NumericalControl),….2.仪器&仪表(Apparatus&Instruments)3.家电(HouseholdItems)4.PC外设(PeripheralsofPC)5.下位机(Host->Slave)6.医疗电子7.军事第17页/共311页1.251内核单片机很老的型号:8031,8051,8751,80C31,80C51,87C51,(/52)老型号:AT89C51,AT89C52,AT89C2051现代型号:C8051F320,C8051F340,第18页/共311页1.2.1单片机基本结构1.2.1结构框图(AT89C51)第19页/共311页

1.2.2MCS-51单片机的内部结构2012.09.04.二-2h第20页/共311页第21页/共311页CPU(CentralProcessingUnit)CPU到底包含哪些模块(module)?ALU+指令寄存器IR+指令译码器+DPTR+PC+SP=CPUArithmeticLogicUnit+InstructionRegister+DataPointer+ProgramCounter+StackPointer第22页/共311页1.2.3AT89C51的引脚

(PinAssignments)第23页/共311页C8051F320引脚第24页/共311页引脚说明(PinDefinitions)AT89C51有多种封装形式,最常使用的封装形式是双列直插(DIP:DualIn-linePackage)40引脚形式。PinNumber逆时针。电源引脚Vcc,GND(20,40):Vcc是供电电压,GND为地线。供电电压为5伏,变化范围允许为2.7V~6V。5V工作电压下正常工作电流约为20mA,休眠方式维持电流为5mA,掉电方式维持电流(电压为3V时)为40μA。振荡器引脚XTAL1,XTAL2(19,18):芯片工作需要时钟脉冲。AT89C51单片机的时钟振荡有两种接法。一种为外接振荡器信号输入,一种为外接石英晶体和电容。第25页/共311页石英晶体振荡线路用得较多。AT89C51允许的最高时钟频率为24MHz,最低允许时钟频率为4MHz。石英晶体可用4MHz~24MHz,电容C1,C2可用20Pf的电容。时钟脉冲周期在单片机内部组成机器周期,每12个时钟脉冲形成一个机器周期。机器周期是单片机的基本计时单位。如果使用12MHz晶体的时钟脉冲,则单片机的机器周期为1μs。第26页/共311页复位引脚RST(9):复位引脚能使单片机系统复位。所谓复位就是使程序从第一句开始执行。如何通过复位引脚使系统复位?只要使RST引脚为高电位并保持2个机器周期以上。平时正常工作时,复位引脚RST应处于低电位。第27页/共311页何时需要复位?接通电源一瞬间,希望程序从头开始执行,这个复位称为上电复位。在单片机上电一瞬间电容C1有一个充电过程,瞬间电容对RST引脚仿佛是通路,RST引脚得到高电位,系统复位。电容充电后C1对RST引脚仿佛是断路,RST引脚通过R1电阻接地,使RST为低电位,系统能正常工作。当单片机程序处于混乱状态或死机,需要人工复位,可采用图

b)线路。按键K接通时使RST接高电位,系统复位。为保证单片机系统不死机,很多情况下外接看门狗线路。在系统死机时,系统不能定时地给看门狗线路一个响应信号,看门狗经过一段小延时后会给复位引脚RST发一个高电位信号,使系统从头开始执行程序,从死机状态中跳出来。

第28页/共311页地址锁存/编程引脚ALE/PROG(30):在正常工作时ALE引脚输出稳定的正脉冲,用于在访问外部程序存储器时锁存地址的。ALE输出的脉冲频率为时钟的1/6。由于AT89C51程序存储器在芯片内部,ALE一般不用于它本来的用途,只是作为一个振荡器供外部线路使用。这个引脚另一个用途是在给芯片下载程序(编程)时,用于输入编程脉冲。外部程序存储器选通引脚PSEN(29):芯片在访问外部程序时PSEN引脚会发出外部存储器芯片的选通信号(低电位)。在从外部存储器取程序指令时,每个机器周期PSEN信号出现两次。访问外部数据存储器时PSEN信号不出现。如果AT89C51使用内部程序存储器,所以PSEN引脚已失去其原有的用途。第29页/共311页外部访问允许引脚EA/VPP(31):当EA引脚接地时AT89C51只能访问外部程序存储器,内部程序存储器被隔离了。所以正常运行时EA引脚应接高电位,一般串接一个几KΩ电阻接到电源正极。在给芯片编程时,EA引脚要接编程电压12V。I/O口P0(39~32):P0口是8位漏极开路(OpenDrain)双向I/O口。作为输出口,输出数据为0时它的驱动能力可吸收8个TTL门电路的电流。由于是漏极开路作为输出口输出1时实际P0口的引脚为高阻态(相当于与内部断开状态)。这时应在P0口外部加上拉电阻,信号1由上拉电阻提供,驱动能力也决定于上拉电阻的电阻值。一般由于上拉电阻为几KΩ,所以驱动能力很弱。作为输入引脚时应给P0口内部先写1,使其为高阻态,读P0口的指令会使P0口的引脚直接接到内部总线上,反映了加在P0口引脚上的外部信号的真实值。2012.09.07.五-4h第30页/共311页这一点很重要,如果疏忽了这一点,在P0口上刚输出过0,P0口线与地线接通,再作为输入时,加在引脚上的高电位会被短路掉,内部总线读到的输入是0,发生了一个很难查获的错误。P0口在我们的应用中经常作为外部数据总线口使用,通过指令MOVX读取外部的数据,或将数据输出到外部总线上。在输出数据时,内部控制线路将口线的一个上拉场效应管接通,使具有上拉电阻作用,所以不需外接上拉电阻。在输入数据使仍应先给P0口输一高电位,使其与地线断开。AT89C51也可以外挂程序,此时EA引脚应接地,P0口将输出指令的地址,并读入程序指令。这个过程是硬件自动完成的,软件无法干预,也不需要对P0口写1。第31页/共311页当AT89C51编程时,P0口作为代码的输入口。编程后校验时P0作为代码的输出口,此时外部要有上拉电阻。I/O口P1(1~8):P1口是一个带内部上拉电阻的双向I/O口。它能接收或输出4个TTL门电路的电流。P1口的上拉电阻是固定的,(20KΩ),因此作为输出时一般无需外接上拉电阻。其它部分的内部电路两者类似,所以P1口作为输入时也必须事先在P1口写1。输入为0时电流经内部上拉电阻,引脚流经外部电路通地,电流值为50μA。第32页/共311页I/O口P2(21~28):P2口是一个带内部上拉电阻的双向I/O口。它的一部分基本结构类同P1口。它也可以接收和输出4个TTL门的电流。内部写1以后使引脚与地线断开,内部上拉电阻起作用,可用作输入引脚,输入0时,电流经过上拉电阻,引脚流经外部电路通地,电流值为50μA。此外P2口的另一个作用是在访问外部程序存储器或用MOVX指令访问外部数据时作为高8位地址的输出。所以P2口除了作I/O口以外,通过MOVX指令也能作为输出。这种输出常作为外部设备选通信号,使得外部设备被选通的同时由MOVX指令直接访问被选通的这个外部设备。P2口在AT89C51芯片编程和校验时作为高8位地址输入口。第33页/共311页I/O口P3(10~17):P3口也是带内部上拉电阻的8位双向I/O口。可接收和输出4个TTL门电流。内部写1以后,内部上拉电阻起作用,可用作输入。当输入为0时,电流经内部上拉电阻通过引脚流经外部电路通地。这个输出的电流值为50μA。P3口除了作通用的I/O口以外,它的每一个引脚都还分别可作专门的特殊功能口。

第34页/共311页第35页/共311页英文阅读:aboutP3第36页/共311页P0结构第37页/共311页1.2.4存储器配置冯.诺依曼(von.Neumann)结构/哈佛(Harvard)结构?程序存储器(ROM,EROM,EPROM,EEPROM,Flash)数据存储器(RAM)第38页/共311页片内存储器(MemoryonChip)AT89C51:EEPROM4kBRAM256BC8051F320:Flash(ROM)16kBRAM256BRAM1kB+1kBFIFO(USB)第39页/共311页RAM(Data)和Flash(程序代码)

-AT89C51-最重要的部分RAMFlash00h7Fh80hFFhSFR自由RAM代码0000h0FFFh128Byte128Byte4096Byte(AT89C51)第40页/共311页Homework(1)AT89C51的引脚和最小系统(2012.09.14.布置)第41页/共311页三部分memory的功能1.Flash:保存程序。通过下载(烧写)的手段。相当于PC的硬盘2.SFR:是RAM,存放特定的寄存器。(什么是寄存器?),系统上电时由CPU写入一些默认值,不自由。相当于PC的内存条的一个特殊区域。3.自由RAM:由用户自己随意用的。C语言下由编译器分配(可能是动态地)给用户自己定义的变量的。相当于PC的内存条。2012.09.14.五-6h第42页/共311页自由RAM(00h–7Fh)R0–R7的映射:00–1Fh(map:映射的概念)位寻址的(允许)区域:20–2FhStack(堆栈):全部自由区:00–7Fh(参看书本10页)第43页/共311页

特殊功能寄存器(SFR)RAM

(80h-FFh)SpecificFunctionRegisters(p11)P0,P1,P2,P3,PSW,TCON,SCON,(注意这里Px是寄存器,不是硬件的Px口)IE,A,B,SP,DPH,DPL,TMOD,TH0,TL0,TH1,TL1,SBUF,PCON,IP,共21字节(51系列)第44页/共311页SFR(特殊功能寄存器)p11第45页/共311页SFR(特殊功能寄存器)第46页/共311页1.5最小系统(图1-22)第47页/共311页3章C51程序设计3.1.5Keil环境操作过程:1.点开像标,project→newproject→事先的目录下输入工程名tes1.uv2→选择atmel公司→选择芯片AT89C51→同意引入标准启动代码→空壳2.左边file窗点开target1→sourcegroup→右键addfilestogroup“SourceGroup1”→加入一个现成的xx.c程序(在目录下新建一个xx.c的空文件就可)3.点开这个xx.c就可以编辑这个c程序4.1.编译,2.链接,3.属性选项5.获得xx.bin,或xx.hex代码文件第48页/共311页6.AT89C51通过烧写器烧写芯片,C8051F320通过U-EC5烧写。第49页/共311页3.2C语言基础头文件reg51.h不同于标准C的:数据类型bit,sfr,sbit,复习(举例)第50页/共311页C51头文件的意义(reg51.h)#ifndef__REG51_H__//如果__REG51_H__未被定义,则…

#define__REG51_H__//定义__REG51_H__../*BYTERegister*/sfrP0=0x80;sfrP1=0x90;sfrP2=0xA0;sfrP3=0xB0;sfrPSW=0xD0;sfrACC=0xE0;sfrB=0xF0;sfrSP=0x81;第51页/共311页sfrDPL=0x82;sfrDPH=0x83;sfrPCON=0x87;sfrTCON=0x88;sfrTMOD=0x89;sfrTL0=0x8A;sfrTL1=0x8B;sfrTH0=0x8C;sfrTH1=0x8D;sfrIE=0xA8;sfrIP=0xB8;sfrSCON=0x98;sfrSBUF=0x99;第52页/共311页/*BITRegister*//*PSW*/sbitCY=0xD7;//sbit:C51专用位变量地址设置sbitAC=0xD6;sbitF0=0xD5;sbitRS1=0xD4;sbitRS0=0xD3;sbitOV=0xD2;sbitP=0xD0;第53页/共311页/*TCON*/sbitTF1=0x8F;sbitTR1=0x8E;sbitTF0=0x8D;sbitTR0=0x8C;sbitIE1=0x8B;sbitIT1=0x8A;sbitIE0=0x89;sbitIT0=0x88;第54页/共311页/*IE*/sbitEA=0xAF;sbitES=0xAC;sbitET1=0xAB;sbitEX1=0xAA;sbitET0=0xA9;sbitEX0=0xA8;/*IP*/sbitPS=0xBC;sbitPT1=0xBB;sbitPX1=0xBA;sbitPT0=0xB9;sbitPX0=0xB8;第55页/共311页/*P3*/sbitRD=0xB7;sbitWR=0xB6;sbitT1=0xB5;sbitT0=0xB4;sbitINT1=0xB3;sbitINT0=0xB2;sbitTXD=0xB1;sbitRXD=0xB0;/*SCON*/sbitSM0=0x9F;sbitSM1=0x9E;sbitSM2=0x9D;sbitREN=0x9C;sbitTB8=0x9B;sbitRB8=0x9A;sbitTI=0x99;sbitRI=0x98;#endif//定义结束第56页/共311页举例复习C语言(双龙吐珠)/******************************************************8LED.c2008.09.03.byMaHuimin西安交通大学城市学院,计算机系*********************************************************/#include<reg51.h>//--------------------------------------------------------------------------unsignedcharPattern[4]={0x18,0x24,0x42,0x81};//displaypatternunsignedchar*pLED;//apointervoidDelay(unsignedintiM);//2012.09.18.二–8h第57页/共311页//-----------------------------------------------------------------------------//MainRoutine//-----------------------------------------------------------------------------voidmain(void){inti=0;pLED=&Pattern[0];//getaddressofPatternwhile(1)//non-stoploop{ P0=*pLED;//displaypLED++;//pointer+1Delay(60000);i++;//loopvariable+1 if(i==4)// { i=0;//resetloopvariableI pLED=&Pattern[0];//resetaddress}}}第58页/共311页voidDelay(unsignedintiM)//about8.33us{while(iM>0) { iM--;//iM-1 }}//-----------END------------------------------------第59页/共311页C51编程的注意点0.选用该型号单片机的特定的头文件1.什么时候用十进制,什么时候用16进制2.不要使用ACC,B,C,F0,..通用型寄存器,不要使用R7–R03.不要考虑寻址方式4.不要考虑中断矢量5.不要用压栈和出栈指令6.不要设置堆栈指针7.不必考虑变量的RAM的确切地址8.中断返回不用考虑,中断服务程序不用声明9.尽可能使用短变量,unsignedchar,bit第60页/共311页C51程序流程图一般是个”6”

6第61页/共311页4章51单片机内部资源经典单片机4大内部资源(功能)1.I/O驱动(书本上没有讲)2.中断,外部中断(p95)3.计数/定时(p100)4.串口通信(p111)第62页/共311页4.0I/O驱动4组I/O口,P0为内部开路漏极,其余的都带内部上拉电阻(20k)。驱动4个TTL元件。1.LED:发光二极管。参数:颜色,电流(<25mA)。硬件设计要点:极性,限流电阻(200–1kΩ),方向(程序要点说明)。第63页/共311页2.LED数码管(实际上是LED组)参数:尺寸,共阴/共阳第64页/共311页3.驱动功率放大(三极管)三极管9013参数:NPN,>100mA,<12V典型线路1:集电极输出典型线路2:射极跟随用途:蜂鸣器,继电器,…..2012.09.21.五-10h第65页/共311页延时函数问题4.关于“延时”不精确的延时(软件)和精确的延时(硬件)-时钟和机器周期

8MHz晶体,机器周期=?=1.5us-指令执行时间,1周期,2周期,3周期

-如何估计延时?(用LED闪亮)第66页/共311页4.1中断技术4.1.1中断原理和术语(p95)中断技术的术语1)中断技术中的一些名词:中断允许(InterruptEnable),中断请求(IRQ:InterruptRequest),中断源(I.Source),中断屏蔽(I.Mask),中断矢量(I.Vector),中断服务(I.Service),中断优先级(I.Priority).2)中断服务程序的特点:中断服务程序在程序空间中,其入口地址是固定的(中断矢量),但在执行时刻上是随机的,是不可预料的.中断服务程序的调用大部分是硬件信号引起的.所以在程序流程框图中它是独立的,是无法嵌入到主流程框图中的.3)中断技术的用途:处理突发事件,人机界面(通信)4)中断响应(I.Response)时间:3–8机器周期第67页/共311页中断处理流程-中断允许或关断(屏蔽)-现场保护,现场恢复(压栈,出栈)-跳转中断服务-中断返回第68页/共311页5类中断源MCU的中断源大多是硬件信号,2个内部定时器中断和发送中断是芯片内部的。5类中断名:INT0,T0,INT1,T1,SI它们在C中的编号是0,1,2,3,4第69页/共311页

中断矢量(中断入口地址)

InterruptVector0003h:INT0000bh:T00013h:INT1001bh:T10023h:SI编程时不用关心的。第70页/共311页C51程序的中断矢量C51程序的中断矢量不需要给出,它由编译系统自动生成.它根据中断服务程序的编号,编译后将指令嵌入到中断矢量处.第71页/共311页

中断设置的要点

1)总允许和分项允许(中断使能)2)中断类型:外中断下降沿/低电平(低电平少用).T0,T1:内部定时/外部计数.串口中断的参数设置。3)C51程序不需要关心中断矢量和返回4)在中断服务程序中最好先把总允许屏蔽掉,退出以前恢复总请求,避免中断中的中断,中断优先就不重要了.

外部中断类型在TCON里.第72页/共311页SFR中断优先级IP(b8h)

[---PSPT1PX1PT0PX0]中断优先的2个概念:1)谁被谁可中断,2)同时发生谁优先缺省:编号小优先级高MCU只有2挡优先级,同一挡按编号优先IP中写1的高挡级(不太用)第73页/共311页SFR:IE(A8h)中断允许寄存器(EA--ESET1EX1ET0EX0)可以位寻址EA:1:中断总允许,0:全部中断不允(总屏蔽)ES:1:串口收发中断允许(请求,Request),0:不允ET1:1:内部定时器/计数器1中断允许,0:不允EX1:1:外部(引脚INT1)中断允许,0:不允ET0:1:内部定时器/计数器0中断允许,0:不允EX0:1:外部(引脚INT0)中断允许,0:不允请问1:IE=0x93;请求了哪些中断?请问2:EA=1;EX1=1;请求了哪些中断?2012.09.28.五-12h第74页/共311页书本,例4-2,外部中断硬件:按键:在P3.2(INT0),接上拉电阻5.1k(2个作用:限流+防短路),按键按下接地,产生下降沿。LED:正接反接都可以(?),1k限流电阻,接在P2.7上。第75页/共311页外部中断0举例/*****************************************Test7_INT0.cforINT0testbyMaHuimin2008.09.21.******************************************/#include<reg51.h>//sbitLED=P2^7;//LEDconnectedwithaI/Oport//sbit定义一个位的地址,怎么理解voidinit(void);//initiationvoidDelay(unsignedintiM);//第76页/共311页main(){init();//initiationoftheNCUwhile(1);//stayhere,注意这里的流程图!}voidINT0_I()interrupt0//interruptNo.0{EA=0;//interruptmaskedLED=~LED;Delay(10000);//delayforEA=1;//interruptenabled}//voidinit(void){//IE|=0x81;//INT0,botharepossibleEA=1;//enabledallinterruptsEX0=1;//externalinterruptebnabledIT0=1;//fallingedge}第77页/共311页//-------------------------voidDelay(unsignedintiM)//{while(iM>0) { iM--; }}//第78页/共311页有关的sfrIETCON第79页/共311页SFRTCON(88h)(TF1TR1TF0TR0IE1IT1IE0IT0),低4位只与外部中断有关(混合了)TF1:溢出标志(硬件自动置1,如果中断,自动清0)TR1:1:启动,0:停止(软件设置)——————————————————————————IT1:外部中断(INT1)类型设置,1:下降沿,0:低电平IE1:外部中断检测到下降沿自动置1,

进中断后自动复0

TF0,TR0,IE0,IT0同上

注:对于TF1,TF0,IE1,IE0,一般不太关心第80页/共311页INT0总结1)总允许和分项允许(中断使能)2)中断类型:外中断下降沿/低电平(低电平少用).3)中断编号为0.4)INT0和INT1类似第81页/共311页4.2计数器/定时器(C/T)硬件上有T0,T1(16bit),配置了2套相关寄存器C/T:Counter/Timer第82页/共311页SFR:TMOD(高4位:C/T1,低4位:C/T0)(89h)(GATEC/TM1M0GATEC/TM1M0)GATE=0(我们不用,测INTx的脉宽)C/T=0:内部定时器,=1:外部计数器M1M0=00:0模式(弃用),01:1模式(16位),10:2模式(8位自动重装),11:3模式(不用,C/T0:2个独立8位,C/T1:不用,停止记时)第83页/共311页“内部定时器”(“T”),“外部计数器”(“C”)通常称T0,T1T0,T1的信号源:1)内部定时:内部振荡信号(按机器周期)2)外部计数:引脚(对AT89C51:14,15)的下降沿sfrTMOD:规定了计数器的容量和方式TCON:启动/停止,是否溢出TH0,TL0,TH1,TL1:计数值第84页/共311页要强调的一点T0,T1模块的工作和运行是脱离CPU的,一旦运行后就与程序的运行无关了.就好象你自己的闹钟一样,溢出前它不干预你的正常日程.它是并行工作的.第85页/共311页SFRTCON(88h)(TF1TR1TF0TR0IE1IT1IE0IT0),低4位只与外部中断有关(混合了)TF1:溢出标志(硬件自动置1,如果中断,自动清0)TR1:1:启动,0:停止(软件设置)——————————————————————————IT1:外部中断(INT1)类型设置,1:下降沿,0:低电平IE1:外部中断检测到下降沿自动置1,

进中断后自动复0

TF0,TR0,IE0,IT0同上

注:对于TF1,TF0,IE1,IE0,一般不太关心第86页/共311页SFRTH1,TL1,TH0,TL0

(8Dh,8Bh,8Ch,8Ah)TH1,TL1用于C/T1,TH0,TL0用于C/T016位模式(1模式):TH1高字节,TL1低字节8位自动重装(2模式):TH1向TL1充值,初始化:TH1=TL1启动后,TL1以机器周期加1,溢出后进位到高字节(1模式)

或中断如果设置成外部计数:计数信号由引脚T1,T0输入(Pin15,Pin14)第87页/共311页提问:8位自动重装是什么意思?第88页/共311页精密定时(T0)设计/********************************************2011.09.MaHuiminT0interruptLEDblinkswith1Hz**********************************************/#include<C8051F320.h>//typedefunsignedcharu8;typedefunsignedintu16;//sbitLED=P1^7;//LEDisconnectedwithP1.7u16counter;//0-65535//voidSYSCLK_Init(void);voidPort_Init(void);voidT0_Init(void);第89页/共311页//------------------------------------------------------------------------//MainRoutine//------------------------------------------------------------------------voidmain(){PCA0MD&=~0x40;//noWatchdogSYSCLK_Init();//SystemClock=12MHz,//machinecycle=1us(1/12)Port_Init();//I/OinitializationT0_Init();//T0setting//while(1);//maindoesnothing,流程图怎么画?}第90页/共311页//-------------------------//Port_Init//-------------------------//-PortInitialization//-ConfiguretheCrossbarandGPIOports.voidPort_Init(void){P0MDOUT=0xff;//P0outasdigitalP0MDIN=0xff;//P0inasdigitalP1MDOUT=0xff;//P1outasdigitalP2MDOUT=0xff;//P2outasdigital//P1=0x0;//P2=0x0;XBR1=0x40;//cross-barfunctions}第91页/共311页//voidSYSCLK_Init(void){OSCICL=0x00;//基本频率12MHz//修正=0OSCICN=0x83;//1:internaloscillatorenabled,//2:12MHz基本频率作为clock,//machinefrq1MHz(1/12)

RSTSRC=0x04;

//enablemissingclockdetector,时钟停止将复位}第92页/共311页voidT0_Init(void)//Tosetting{IE|=0x82;//T0interruptenabled//8-bitauto-reloadingtimerTMOD=0x02;//250*1us=0.25msTH0=6;//请问怎么计算的?

TL0=6;TR0=1;//T0starts}第93页/共311页//T0中断服务

//interruptNo1isT0'sinterruptvoidT0_250us()interrupt1//复习0,1,2,3,4{counter++;//+1/250us if(counter==2000)//500ms { LED=~LED;//on/off counter=0;}}2012.10.09.二–14h第94页/共311页4.3串口通信1.关于RXD,TXD引脚的工作方式(51系列):a)工作在“移位”串行通信方式时,RXD为发送和接收.TXD为移位脉冲.低位在前(LSB:littlesignificantbit).8位数据.传送靠移位脉冲,所以频率的精度不重要.半双工(HalfDuplex).同步方式。b)异步通信时,RXD为接收,TXD为发送.LSB,常用8位数据,双方设为相同波特率(BaudRate).全双工(FullDuplex).UART(UniversalAsynchronousReceiver/Transmitter)1.可以满足RS232通信协议的信号时序(与PC兼容)2.无信号时,发送端拉高电平3.常用的波特率:9600,1152004.起始位:0,8数据位,1:停止位,第95页/共311页SFRSCON(98h)

串行控制寄存器

SM0SM1S工作模式通信协议波特率0008位数据同步移位晶振1/12(同步)**0118位数据异步由定时器1溢出率确定**1029位数据异步晶振1/32或1/641139位数据异步由定时器1溢出率确定SM0SM1SM2RENTB8RB8TIRI第96页/共311页S工作模式模式0:RXD为发送和接收.TXD为移位脉冲.低位在前(LSB).8位数据.传送靠移位脉冲,频率固定为机器周期.半双工(HalfDuplex).晶体的1/12.模式1:异步通信,RXD为接收,TXD为发送.LSB.全双工(FullDuplex).1位起始+8位数据+1位停止.波特率为T1的溢出率/32(或1/16).模式2:异步通信,RXD为接收,TXD为发送.LSB.全双工.1位起始+8位数据+1位特数据+1位停止.波特率晶体的1/32或1/64.适用多机通信.模式3:异步通信,RXD为接收,TXD为发送.LSB.全双工.1位起始+8位数据+1位特数据+1位停止.波特率为T1的溢出率/32(或1/16).适用多机通信.第97页/共311页SCONSM2是接收中断请求的控制位。在模式2和模式3的多机通信中,如果SM2设置成1,接收到的第9位(RB8)为0,则接收中断不会被激活。这能起什么作用呢?它的控制逻辑是这样的,在多机通信中,主机先发送子机地址,第9位发送的是1。各子机都收到这个数据,接收中断都被激活。各子机核对这个地址,被选中的子机将自己的SM2清0(处于等数据态),未被选中的子机将SM2设置1。紧接着主机向子机发送数据实体,其第9位(RB8)为0(定义为数据实体)。这样未被选中的子机由于SM2的作用都将拒绝接收这个数据实体,而仅有被选中的子机,由于SM2已被清0,能接收这个数据实体,在被激活的中断中读SBUF(数据)即可。第98页/共311页SCON在模式0中,SM2必须清0,接收中断才能被激活。SM2由程序置1或清0的。在模式1中,如果SM2=1(硬件置1和清0),则没有接收到停止位,接收中断也不会被激活。SM2在这里用来控制数据传输的完整性.(这没有什么用)REN是允许接收位。由程序置1或清0的。当REN=1时表示允许接收。由外部发送过来的数据会被接收。如果REN=0,则不接收串行口的数据,所以一般要事先置1。第99页/共311页SCONTB8和RB8是模式2和模式3中的发送的第9位和接收的第9位(因为多机通信,或数据宽不够)。TB8作为发送第9位由程序赋值。RB8作为接收第9位,由程序读取。它们可用于奇偶校验,也可在多机通信中用来标明是地址还是数据实体。在模式1中,若SM2=0,则RB8是收到的停止位,它应该是1。在模式0中这两位都没有用。TI是发送中断标志。在这个模式中发送完成后,也即SBUF数据全部发送完成,芯片硬件会使TI置1。(当TI=1时即自动请求中断。如果事先已申请串行中断允许,则程序进入串行中断服务程序).TI必须由程序清0,一般在中断服务程序中清0,以免造成又一次错误中断。如果无中断申请,也要查询TI是否为1,并接着清0.第100页/共311页SCONRI是接收中断标志。在各个模式中,接收到外部通过串行口发送来的一个数据后,RI被芯片硬件置1,并申请中断。此时SBUF缓存器中存放的是接收到的数据。如果事先已申请串行中断允许,芯片即响应中断请求,立即进入串行中断服务程序。RI的清0由程序进行。第101页/共311页一般,接收用中断,发送不用中断.从单片机看,流程是这样的:PC发一个字节->引起MCU中断->MCU在中断服务内,或在中断服务外发1个,1串字节给PC->PC回答1个字节->MCU中断->……

课堂提问:模式1串口数据通常用几位的?物理上是几位的?第102页/共311页AT89C51波特率的计算模式1的波特率为T1溢出率的1/32或1/16.

(如果SFRPCON.7=0,则1/32.PCON.7=1,则1/16.01)晶体11.0592MHz,设TL1=253(FDh),3周期溢出BautRate=11.0592*1000000/12/3/32=96001)晶体24MHz,设TL1=243(F3h),13周期溢出,PCON.7=1BautRate=24*1000000/12/13/16=9615(有误差,允许的)2012.10.12.五-16h第103页/共311页C8051F320波特率计算定时器1的重载值应设置为使其溢出频率为所期望的波特率频率的两倍。1)T1的频率为12MHz/4=3MHz2)波特率(溢出率):3MHz/(0xFF–0x64+1)/2=3000000/(256-100)/2=9615第104页/共311页SCON的注1.专用寄存器SCON中有些位是由硬件置1,软件清0的。在系统复位时SCON被硬件全部清02.MCU横向之间多机通信技术已不太用了3.符合RS232协议数据格式的是模式1,物理层信号电平不对.用MAX232芯片转换.4.S口用于其它串入器件效果也很好(同步移位),例如74LS164(用模式0)第105页/共311页三件事的关系和独立性1.定时器T0,T1,机器周期,溢出,中断。2.串口,同步,1/12晶体,异步(UART,RS232),波特率。3.波特率发生器,借用T1(模式2,8位自动重装)+1/32分频器(片内硬件)第106页/共311页举例:同步传输设计(p117)第107页/共311页硬件描述LED数码管,共阴还是共阳,7段74LS164,串入并出(SIPO),A,B数据输入,CLK移位脉冲输入,MR清0,Q7-Q0并口输出.第108页/共311页程序详解_1/********************************************************Test16_4X7Segment_C.CisforSMOD=00test2008.09.04.byMaHuimin西安交通大学城市学院计算机系*********************************************************/#include<reg51.h>//unsignedcharnumcode[10]={0x40,0xf8,0x14,0x90,0xa8,0x82,0x02,0xf0,0x00,0x80};unsignedchar*pt;unsignedchari;voidDelay9us(unsignedintiM);//about9us第109页/共311页void_Init(void);//Initiation//----------------------------------------------------------------//MainRoutine//--------------------------------------------------------------voidmain(void){_Init();//initiationsetScon=0x00while(1)//non-stop{i=10;//10numberpt=&numcode[0];//pointertoggledwithaddress第110页/共311页while(i){SBUF=*pt;//txdtransmitthedata(numbercode)while(~TI);//waitinguntilTI=1(forall8bits)Delay9us(65000);//delay0.5secTI=0;//resetflagTIpt++;//nextdatai--;//loopvariable}}}第111页/共311页voidDelay9us(unsignedintiM)//{while(iM>0) { iM--; }}//void_Init(void){SCON=0x00;//serialportmode0}第112页/共311页程序详解_2/********************************************************原作者:EastingHouseLiYuhua&MaHuiminF320_7Segment_LED同步移位(不用SBUF)2008.09.*********************************************************///--------------------------------------------------------------------------//Includes//---------------------------------------------------------------------------#include<c8051f320.h>第113页/共311页typedefunsignedcharu8;sbittxd=P0^4;//同步信号sbitrxd=P0^5;//数据//u8codeNumber[10]={0x40,0xf9,0x15,0x91,0xa9,0x83,0x02,0xf0,0x00,0x80};//"0-9"voidSYSCLK_Init(void);voidPort_Init(void);voiddelay8us(unsignedintiM);//8usvoidsendByte(u8dat);u8*pLED;//apointeru8i;u8j;第114页/共311页//-----------------------------------------------------------------------------//MainRoutine//-----------------------------------------------------------------------------voidmain(void){SYSCLK_Init();//MachineClock=1.5MHz/12Port_Init();//P0asdigitaloutputpLED=&Number[0];//pointergetsanaddressj=0;while(1)//unlimitloop{for(i=0;i<4;i++){sendByte(*pLED);//发送一个字节,无停顿

pLED++;}

第115页/共311页 j++; pLED=&Number[j];//指针刷新

delay8us(65535);//longdelay delay8us(65535); delay8us(65535);if(j>8) {pLED=&Number[0]; j=0; }}}第116页/共311页//-------------------------//Port_Init//-------------------------voidPort_Init(void){PCA0MD&=~0x40;//noWatchdogP0MDOUT=0xFF;//P0asDigitalOutputXBR1=0x40;//crossBarfunktioniert}//voidSYSCLK_Init(void){OSCICL=0x00;//基本频率12MHz,修正=0OSCICN=0x80;//12MHz/8RSTSRC=0x04;//时钟停止将复位}第117页/共311页voidsendByte(u8dat){u8kk;u8dBuff; dBuff=dat; txd=0; for(kk=0;kk<8;kk++) { if((dBuff>>kk)&0x01)//LSB,左移

{ rxd=1;//发送1}else { rxd=0;//或发送0} txd=1;//移位脉冲

txd=0; }}2012.10.16.二-18h第118页/共311页//voiddelay8us(unsignedintiM)//8us{while(iM){ iM--;}}第119页/共311页4.3.2(补充)LCD显示设计LCD分类:字段,字符,彩屏(分辨率)通信方式:8位并口第120页/共311页第121页/共311页16字符LCD指令指令作用38H液晶屏初始化,数据设置为8位01H清屏02H光标复位04H光标减量方式移动(左移)06H光标增量方式移动(右移)05H显示位置左移07H显示位置右移08H显示关闭0CH显示打开,无光标0EH显示打开,有光标,光标不闪0FH显示打开,光标闪18H整个显示左移一格1CH整个显示右移一格80H显示位置为左端第一格开始C0H显示位置为第9格开始第122页/共311页程序举例//-----------------------------------------------------------------------------////文件名:LCD16.cbyMaHuimin////编写时间:2008/06////目标器件:C8051F320x////编译工具:SiliconLaboratoriesIDE////-----------------------------------------------------------------------------//程序描述://液晶模块上显示1行字符:HelloCityColleg////-----------------------------------------------------------------------------//头文件包含//-----------------------------------------------------------------------------#include<c8051F320.h>

第123页/共311页//-----------------------------------------------------------------------------//全局

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论