//遥控解码子程序,LC7461,用户码为11C//external interrupt0void isr_4(){ unsigned char r_count;//定义解码的个数 unsigned long use_data=0;//定义16位的用户码,只用到13位 unsigned long use_code=0;//定义16位的用户反码,只用到13位 unsigned long data=0;//定义16位数据码,包括8位数据码和反码 unsigned char data_h=0;//数据反码 unsigned char data_l=0;//数据码 _clrwdt();// _delay(7000);//7461解码,延时7000// _delay(7000);//7461解码,延时7000//_delay(7000);//7461解码,延时7000 if(remote==1) goto error; while(remote==0);//wait to high //_delay(9744);count_delay=0; while(count_delay<143); if(remote==1) goto error; /////用户码解码use_data//////////add////////////////////////// for(r_count=13;r_count>0;r_count--) { while(remote==0);//wait to high count_delay=0; while(count_delay<24);//_delay(1680); _c=remote; if(_c==1) { _lrrc(&use_data); count_delay=0; while(count_delay<32);//_delay(2200);//wait to low } else _lrrc(&use_data); } _nop(); //if(remote==1) //_delay(1680);//wait to low while(remote==1);//wait to low _nop(); ////////用户码解码finish/////////add/////////add//////// /////用户码反码解码use_code//////////add////////////////////////// for(r_count=13;r_count>0;r_count--) { while(remote==0);//wait to high count_delay=0; while(count_delay<24);//_delay(1680); _c=remote; if(_c==1) { _lrrc(&use_code); count_delay=0; while(count_delay<32);//_delay(2200);//wait to low } else _lrrc(&use_code); } _nop(); //if(remote==1) // _delay(1680);//wait to low while(remote==1);//wait to low _nop(); ////////用户码反码解码finish/////////add/////////add//////// ////数据码解码开始////data_l为用户码,data_h为数据码反码//////////// for(r_count=16;r_count>0;r_count--) { while(remote==0);//wait to high count_delay=0; while(count_delay<24);//_delay(1680); _c=remote; if(_c==1) { _lrrc(&data); count_delay=0; while(count_delay<32);//_delay(2200);//wait to low } else _lrrc(&data); } ////数据码解码结束//////////////////////////////////////////////// data_l=data; data_h=data>>8; ///用户码////// use_data>>=3; use_code>>=3; use_code=~use_code; //////// ////如果用户码等与0x11c并且数据码和数据反码都校验一致,解码成功 //if((~data_h==data_l)&&use_data==0x11c)//使用用户码 //跳过用户码 if(~data_h==data_l)//如果数据码和数据反码(取反后)相等,解码正确 { _nop(); r_data=data_l;//r_data为解出的最终数据码 } //否则解码不成功 _nop(); _nop();error: //r_data=nocode; _nop(); _nop(); _nop();}
上传时间: 2014-03-27
上传用户:shenlan
红外遥控接收;=================================================;; zsMCU51实验板配套学习例程;; 中山单片机学习网 智佳科技;; 作者:逸风 QQ:105558851;; http://www.zsmcu.com; E-mail:info@zsmcu.com;=================================================ORG 0000HLJMP START;转入主程序ORG 0010HSTART:MAIN:JNB P2.2,IRLJMP MAIN;以下为进入P3.2脚外部中断子程序,也就是解码程序IR:MOV R6,#9SB:ACALL DELAY882 ;调用882微秒延时子程序JB P2.2,EXIT ;延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序DJNZ R6, SB ;重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序;以上完成对遥控信号的9000微秒的初始低电平信号的识别。JNB P2.2, $ ;等待高电平避开9毫秒低电平引导脉冲ACALL DELAY2400JNB P2.2,IR_Rp ;ACALL DELAY2400 ;延时4.74毫秒避开4.5毫秒的结果码MOV R1,#1AH ;设定1AH为起始RAM区MOV R2,#4PP:MOV R3,#8JJJJ:JNB P2.2,$ ;等待地址码第一位的高电平信号LCALL DELAY882 ;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态MOV C,P2.2 ;将P3.2引脚此时的电平状态0或1存入C中 JNC UUU ;如果为0就跳转到UUULCALL DELAY1000UUU:MOV A,@R1 ;将R1中地址的给ARRC A ;将C中的值0或1移入A中的最低位MOV @R1,A ;将A中的数暂时存放在R1中DJNZ R3,JJJJ ;接收地址码的高8位INC R1 ;对R1中的值加1,换下一个RAMDJNZ R2,PP ;接收完16位地址码和8位数据码和8位数据,存放在1AH/1BH/1CH/1DH的RAM中MOV P1,1DH ;将按键的键值通过P1口的8个LED显示出来!CLR P2.3 ;蜂鸣器鸣响-嘀嘀嘀-的声音,表示解码成功LCALL DELAY2400LCALL DELAY2400LCALL DELAY2400SETB P2.3;蜂鸣器停止LJMP MAINIR_Rp:LJMP MAINEXIT:LJMP MAIN ;退出解码子程序;=============================882DELAY882: ;1.085x ((202x4)+5)=882MOV R7,#202DELAY882_A:NOPNOPDJNZ R7,DELAY882_ARET;=============================1000DELAY1000: ;1.085x ((229x4)+5)=999.285MOV R7,#229DELAY1000_A:NOPNOPDJNZ R7,DELAY1000_ARET;=============================2400
上传时间: 2013-11-01
上传用户:2525775
SAM88RCRI 指令集支持寄存器卷操作,它可完成8 位算术操作和逻辑操作,共有41条指令集。由于采用了存贮器影射方式,所以没有具体的I/O 口操作指令。指令支持位操作,循环、移位等数据操作。为访问个别寄存器,应指定寄存器卷中0--255 的8 位地址或工作寄存器中的4 位地址。工作寄存器中,寄存器对可以访问13 位程序存贮空间和数据存贮空间。SAM88CRI 支持6种地址访问方法,方便了编程操作。
上传时间: 2013-12-02
上传用户:heart_2007
单片机综合应用技术 1.1 单片机技术的发展与单片机应用的广泛选择 1.2 带A/D转换的8位微控制器PIC12C67X?? 1.3 SPI串行总线在8031单片机应用系统中的实现?? 1.4 单总线技术在测控系统中的应用?? 1.5 多任务机制在单片机系统中的应用?? 1.6 软件实现的8031单片微机中断多优先级研究?? 1.7 单片机汇编语言程序设计的变量取值表技术?? 1.8 单片机的代码优化方法?? 1.9 由微机复位引出的问题?? 1.10 一种快速CRC差错校验技术?? 1.11 基于单片机的Chebyshev神经网络硬件设计?? 1.12 二维条形码(PDF417)及其应用?? 1.13 EDA技术的应用?? 1.14 CPLD/FPGA在电子设计中的应用前景?? 1.15 现场可编程模拟ASIC与电子系统设计?? 1.16 用单片PLD器件ispLSI1016实现数显频率计
标签: 单片机
上传时间: 2014-05-05
上传用户:daxigua
单片机原理及系统设计8×C552是Philips公司的8位高性能增强型单片机,是在MCS-51单片机基础上增加了A/D、D/A、捕捉输入/定时输出、I2C总线接口和监视定时器(Watchdog Timer)等功能,是目前世界上最新型的8位单片机之一。8×C552和MCS-51有相同的指令系统,并在其他功能上与MCS-51完全兼容。本书仍以MCS-51为主线组织教学内容,在MCS-51的组成原理、指令系统、汇编语言程序设计、系统扩张、中断系统和接口等方面保留了第1版的特点,同时也对8×C552的新增功能做了详细叙述和分析,并伴以应用实例。全书共分11章,每章末尾都附有一定数量习题与思考题。本书内容自成体系、结构紧凑、前后呼应、语言通俗,因而具有一定的先进性、系统性和实用性。第1章 微型计算机基础 1.1 微型计算机数制及其转换 1.1.1 微型计算机的数制 1.1.2 微型计算机数制间数的转换 1.2 微型计算机的二进制数运算 1.2.1 算术运算 1.2.2 逻辑运算 1.3 微型计算机码制和编码 1.3.1 微型计算机中数的表示方法 1.3.2 微型计算机的原码、反码和补码 1.3.3 微型计算机的二进制编码 1.4 微型计算机组成原理 1.4.1 微型计算机的基本结构 1.4.2 微型计算机的基本原理 1.4.3 微型计算机系统的组成 1.5 单片微型计算机概述 1.5.1 单片机的分类和发展 1.5.2 单片机的内部结构
上传时间: 2014-01-26
上传用户:xy@1314
C51单片机是我们生活中最常用的系列,MCS-51系列单片机有4个并行口(P0,P1,P2,P3口),但对一个稍微复杂的应用系统来说,真正可供用户使用的并行口,只有P1口可用,况且常常因扩展I2C和SPI的器件需占用某些P1口,迫使用户不得不扩展并行口以满足实际的需要。习惯上,常用的并行口接口芯片有8255、8155,这两种芯片功能比较齐全,可以使用在相对比较复杂的系统中,但如是对一般的系统而言,这些功能往往闲置不用。那么就可以选用一些本来闲置不用的口线作为选通信号来进行并行口的扩展,这样就能充分利用单片机有限的I/O资源,在本设计中是将P1口扩展成一个或几个8位并行口,在每一个八位口上接入8个发光二极管做为输出,二极管是做开关量来使用的,在这里设计了跑马灯和流水灯程序,做到对开关量的开断控制;配合开关量的控制笔者设计了一个共阳LED数码管,用来显示当前发光二极管发亮的序号,做到更加直观的双重控制效果,然后再将P0口通过D/A转换器和一放大器输出一个模拟信号,其结果可以通过示波器看出。这样整个系统即有了数字信号输出和模拟信号输出,也有数码管显示功能,实用性能大提高了。2、 基于89C51的系统硬件设计2.1 并行口的扩展的电路设计 众所周知,C51系列的单片机都有四个I/O口(P0、P1、P2、P3),那么AT89C51也不例外,但我们通常仅仅使用P1口作为并行口,而令其余口(P2、P3)处于闲置状态,所以这次设计,我们就是使用闲置不用的P3口做为选能信号线来将P1口进行并行口扩展。 (1) 种方式的并行口扩展优点 连线简单; 不占用存储器空间; (2) 编程也方便灵活。但也有很大的缺点 并行口扩展能力有限,(如使用74LS573(74LS373)且不进行驱动处理,则最多可扩展4个同样类型的并行输出端口,当然还需要与之对应的四个选通信号。) 如扩展较多,选通信号占用并行口位数太多,例如欲扩展8个并行输出端口,则需要8个选能信号,此时,仅选能信号就占用了一个8位并行口,这对在I/O端口线有限的单片机系统中,如此浪费资源的现象是不能容忍的。在本次的设计中,采用芯片74HC573(带三态输出的八进制透明D型锁存器)对P1口进行了一个8位并行口的扩展,选通信号选用P3口的P3.3引脚。原理图如图1所示:
上传时间: 2013-11-18
上传用户:dbs012280
随着单片机性能不断提高而价格却不断下降, 单片机控制在越来越多的领域得以应用。按照传统的模式, 在整个项目开发过程中, 先根据控制系统要求设计原理图, PCB 电路图绘制, 电路板制作, 元器件的焊接, 然后进行软件编程, 通过仿真器对系统硬件和软件调试, 最后将调试成功的程序固化到单片机中。这一过程中的主要问题是, 应用程序需要在硬件完成的情况下才能进行调试。虽然有的软件可以进行模拟调试, 但是对于一些复杂的程序如人机交互程序, 在没有硬件的时候, 没有界面的真实感, 给调试带来困难。在软硬件的配合中如需要修改硬件, 要重新制板, 在时间和投入上带来很大的麻烦。纵观整个过程, 无论是从硬件成本上, 还是从调试周期上, 传统开发模式的效率有待提高。能否只使用一种开发工具兼顾仿真, 调试, 制板, 以及最大限度的软件模拟来作为单片机的开发平台, 用它取代编程器、仿真器、成品前的硬件测试等工作是广大单片机开发者的梦想。 PROTEUS 软件介绍为了更加直观具体地说明Proteus 软件的实用价值, 本文以一具体的TAXI 的计价器和计时器电路板的设计过程为例。其电路板要实现的功能是:㈠计时功能(相当于时钟);㈡里程计价功能:两公里以内价格为4 元, 以后每一公里加0.7 元, 不足一公里取整(如10.3 公里取11 公里);㈢通过键盘输入里程, 模拟计算里程费, 实现Y= (X- 2)*0.7+4 的简单计算。基于上述功能, 选用ATMEL 公司生产的通用芯片AT89C51 单片机构成应用系统。AT89C51 是内含8 位4K 程序存储器, 128B 数据存储器, 2 个定时器/计数器的通用芯片。系统开发环境采用ProteusISIS 6。2.1 计价器模拟系统硬件构成系统主要由一个AT89C51 单片机、74LS373、74LS240、矩阵键盘、4 位7 段数码管等组成。通用AT89C51 单片机芯片作为整个电路的核心部分、74LS373 作为LED 段选控制、74LS240四路反相器则为4 位共阴极7 段数码管提供位选通信号、矩阵键盘输入控制信号。
上传时间: 2013-11-09
上传用户:木子叶1
基于单片机的汽车多功能报警系统设计The Design of Automobile Multi-function AlarmingBased on Single Chip Computer刘法治赵明富宁睡达(河 南 科 技 学 院 ,新 乡 453 00 3)摘要介绍了一种基于单片机控制的汽车多功能报警系统,它能对汽车的润滑系统油压、制动系统气压、冷却系统温度、轮胎欠压及防盗进行自动检测,并在发现异常情况时,发出声光报警。阐述了该报警系统的硬件组成及软件设计方法。关键词单片机传感器数模转换报警Abstract Am ulti-fimctiona utomobilea larnungs ystemb asedo ns inglec hipc omputerco ntorlis in torducedin th isp aper.Th eo ilpr essuero flu bricatesystem, air pressure of braking system, temperature of cooling system, under pressure of tyre and guard against theft, detected automaticaly场thesystem. Audio and visual alarms wil be provided under abnormal conditions厂The hardware composition and software design of the system, described.Keywords Singlec hipc omputer Sensor Digital-t-oanaloguec onversion Alarmin 汽车多功能报苦器硬件系统设计根据 系 统 实际需要和产品性价比,选用ATMEL公司新生产的采用CMOs工艺的低功耗、高性能8位单片机AT89S52作为系统的控制器。AT89S52的片内有8k Bytes LSP Flash闪烁存储器,可进行100(〕次写、擦除操作;256Bytes内部数据存储器(RAM);3 2 根可编程输N输出线;2个可编程全双工串行通道;看门狗(WTD)电路等。系统由传感器、单片机、模数转换器、无线信号发射电路、指示灯驱动电路、声光报警驱动电KD一9563,发出三声二闪光。并触发一个高电平,驱动无线信号发射电路。
上传时间: 2013-11-09
上传用户:gxmm
C语言编程基础:1. 十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。 2. 如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。 3. ++var表示对变量var先增一;var—表示对变量后减一。 4. x |= 0x0f;表示为 x = x | 0x0f; 5. TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。 6. While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;} 在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚)1. #include <AT89x52.h> //该头文档中有单片机内部资源的符号化定义,其中包含P1.3 2. void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口 3. { 4. P1_3 = 1; //给P1_3赋值1,引脚P1.3就能输出高电平VCC 5. While( 1 ); //死循环,相当 LOOP: goto LOOP; 6. } 注意:P0的每个引脚要输出高电平时,必须外接上拉电阻(如4K7)至VCC电源。在某引脚输出低电平的编程方法:(比如P2.7引脚)代码1. #include <AT89x52.h> //该头文档中有单片机内部资源的符号化定义,其中包含P2.7 2. void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口 3. { 4. P2_7 = 0; //给P2_7赋值0,引脚P2.7就能输出低电平GND 5. While( 1 ); //死循环,相当 LOOP: goto LOOP; 6. } 在某引脚输出方波编程方法:(比如P3.1引脚)代码1. #include <AT89x52.h> //该头文档中有单片机内部资源的符号化定义,其中包含P3.1 2. void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口 3. { 4. While( 1 ) //非零表示真,如果为真则执行下面循环体的语句 5. { 6. P3_1 = 1; //给P3_1赋值1,引脚P3.1就能输出高电平VCC 7. P3_1 = 0; //给P3_1赋值0,引脚P3.1就能输出低电平GND 8. } //由于一直为真,所以不断输出高、低、高、低……,从而形成方波 9. } 将某引脚的输入电平取反后,从另一个引脚输出:( 比如 P0.4 = NOT( P1.1) )
上传时间: 2013-11-02
上传用户:zengduo
具有梯形反电动势的永磁同步电动机通常被称为无刷直流电动机,它具有结构简单、体积小、重量轻、效率高、高功率密度、启动扭矩大、惯量小和响应快等其它种类直流电机无法比拟的特性。采用电子换向器替代了传统直流电动机的机械换向装置,从而克服了电刷和换向器所引起的噪声、火花、电磁干扰、寿命短等一系列弊病。由于无刷直流电动机既具备交流电动机的结构简单、运行可靠、维护方便等一系列优点,又具 有直流电动机的运行效率高、无励磁损耗以及调速性能好等诸多优点,故其在在家用消费类产品(空调、冰箱、洗衣机)和IT周边产品(打印机、软驱、硬驱)中得到广泛的应用。 C8051F单片机是美国Silabs公司推出的一种与51系列单片机内核兼容的单片机,具有高速、高性能、高集成度。以C8051F020为例,具有如下特点: C8051F020片上系统单片机片内资源: 一、模块外设 (1)逐次逼近型8路12位ADC0 转换速率最大100ksps 可编程增益放大器PGA 温度传感器 (2)8路8位ADC1输入与P1口复用 转换速率500ksps 可编程增益放大器PGA (3)两个12 位DAC (4)两个模拟电压比较器 (5)电压基准内部提供2.43V 外部基准可输入 (6)精确的VDD监视器 二、高速8051微控制器内核 流水线式指令结构速度可达25MIPS 22个矢量中断源 三、存储器 片内4352字节数据RAM 64KBFlash程序存储器可作非易失性存储
上传时间: 2013-12-21
上传用户:bnfm