




已阅读5页,还剩56页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2016年小学期单片机设计实验报告题目:红外遥控音乐播放器班 级: 班内序号: 实验组号: 学生姓名: 指导教师: 期中检查教师评语指导教师签字: 年 月 日注:本实验报告为北京邮电大学 通信工程 2016年小学期(电路综合实验 电子工艺实习)的实验报告。报告完全是自己写的;代码也是自己敲的,我负责的是整个红外模块和MAIN程序的一部分,这些部分我都有非常详细的注释。LCD显示屏是另外一个人负责。实验效果很好,最后得分也很高(90+,不透露了),但是实际上还有问题:这个程序读取并存储红外接收头的码字,和实际上的码字并不相符,通过示波器就可以很清楚地看到。例如我按下红外遥控器的1,遥控器发射码11010010,在这个程序控制下,单片机存储的码字不是这个。不过,我们得到的码字和遥控器上的按键一一对应,这样我只要全按照错的码字来就行了。当时时间紧迫,我查了好几遍也不知道自己代码错在哪儿,就将错就错了。另外要注意的是,我们是去外面随便买的遥控器,咱们遥控器不一样,对应的码字需要你们自己测量。本文虽然给了详尽的说明,不用再像我一样查N多资料了。不过课本必须好好看。老师对我们组印象很深刻,如果只是照抄这份报告,肯定拿不到好成绩。希望学弟学妹们能在这基础上把码字测量准确,并且加一些新功能吧,比如用盒子里的键盘、比如控制音长等等;认真完善这份报告,比如排版啥的。红外遥控音乐播放器 班 组实验摘要 本次我们制作的基于红外通信的音乐播放器。我们将红外遥控器发出的红外信号进行解码,并将解码后的信号发送至单片机进而使喇叭发声、LCD显示屏显示相应界面。目前,红外光通信应用普遍,我们小组也充分利用这一模块增加实验的创新性。整个系统中,微控制器采用了Microchip公司的PIC16F877A。本实验用单片机的红外接收模块接收来自红外遥控器信息,利用PIC单片机的中断,对红外码进行引导码检验、32位码接收并解码、特征检验及数据检验的功能,实现了对不同的红外码的区分,并最后将所得的数据码存放到单片机的RAM中;然后,我们利用红外解码后的8位数据码,实现了在主程序中对按键循环检并识别,进而播放对应歌曲或音符、存储所按音符、显示所按按键对应界面、并同时点亮对应彩灯。 AbstractIn this experiment, we made a music player based on infrared communication technology. We decoded the infrared signal from the infrared ray remote controller, then we transmitted the decoded signal to the PIC MCU to make the loudspeaker play music and control the LCD to display the corresponding interface. Nowadays, the application of infrared communication is widespread, and our group has made full use of this module to increase the innovation of experiments.In the system, we used the Microchip PIC16F877A as the micro controller. We used the infrared module to receive the signal from the remote controller. With the interrupt of PIC MCU, we checked the boot codes and decoded the useful data in order to distinguish different infrared signals. Afterwards, we saved the decoded data in the RAM of the MCU. Circularly detecting the data in main program makes the music playing, the song saving, LCD displaying and LED lightening possible.关键字单片机microcontroller 芯片CMOS chip红外探测infrared detector脉宽调制pulse width modulation一.实验论证与比较1. 红外通信原理红外通信是利用950nm近红外波段的红外线作为传递信息的媒体,即通信信道。发送端将基带二进制信号调制为一系列的脉冲串信号,通过红外发射管发射红外信号。接收端将接收到的光脉转换成电信号,再经过放大、滤波等处理后送给解调电路进行解调,还原为二进制数字信号后输出。常用的有通过脉冲宽度来实现信号调制的脉宽调制(PWM)和通过脉冲串之间的时间间隔来实现信号调制的脉时调制(PPM)两种方法。2. 红外接收模块使用一体化接收头,内部电路包括红外监测二极管,放大器,限副器,带通滤波器,积分电路,比较器等。红外监测二极管监测到红外信号, 然后把信号送到放大器和限幅器,限幅器把脉冲幅度控制在一定的水平,而不论红外发射器和接收器的距离远近。交流 信号进入带通滤波器,带通滤波器可以通过30khz到60khz的负载波,通过解调电路和积分电路进入比较器,比较器输出 高低电平,还原出发射端的信号波形。注意输出的高低电平和发射端是反相的,这样的目的是为了提高接收的灵敏度。此时输出的为解调好的信号,通过串口通信rb0接入到单片机,存储,送显。3. 音乐播放器和电子琴对红外解码后的数据码进行循环检测,直到检测到某一按键。通过预设定时器TMR0初值改变音符的频率,预设定时器循环的次数改变音长,并将所得固定音符存储。用简谱将音符录入曲目。当用户按下遥控器相应按键,分别将所需的曲目的音符信息送入扩音器,达到音乐播放。4.发光二极管 用八个发光二极管模拟钢琴上的八个琴键,播放某一音符的同时点亮对应琴键。二.系统总体设计1.系统模块总体框图红外遥控器红外信号接收模块单片机解码并处理LCD显示屏喇叭发光二极管2.软件流程图2.1 整体流程图开始定义寄存器、参数初始化进入主程序MAIN调用LCD显示子程序调用音乐播放器子程序或EEPROM子程序发生中断,检测红外信号并编码,结束后返回主程序循环检测按键是否2.2 整体流程图START UP设置分频比、INT触发沿设置端口输入输出设置中断初始值ADCON1调用LCD初始化、开机子程序所有通用RAM地址初始化开启总中断和INT中断MAIN调用LCD显示子程序MAIN给W赋对应按键解码后的TEMP值关闭总中断W寄存器与TEMP异或开启总中断设置分频比、INT触发沿调用此段函数对应的播放歌曲或音符子程序(SONG123,DODO_H)是状态位Z是否为1?否检测状态位Z是否为1是否当按键检测为SAVE_START或SAVE_PLAY时,按顺序继续运行此部分给W赋值,对应按键解码SAVE_STARTW寄存器与TEMP异或状态位Z是否为1?调用SAVE_START子程序是否GOTO MAIN给W赋值,对应按键解码SAVE_PLAY按键是否为SAVE_PLAY是CALL SAVE_PLAY否W寄存器与TEMP异或2.2 中断程序流程图下图中的*为标注,后面会详细解释其思路。中断服务子程序现场保护(W、STATUS)是否是由INT端引起的中断?屏蔽所有中断(GIE)这13.5ms内的信号是否是引导码?顺序记录系统码、数据码、数据反码系统码正确吗(即是否是由该遥控器发出的信号)?信号接收是否出现错误(即数据码与数据反码是否相反)?另存数据码,供其它部分使用1清除INT标志位,开启总中断(GIE)中断返回现场还原是是是是否否否否*1*2*3*4注:此1没有实际意义,是为了使之后的框图更容易表示而加上的注*1的思路:抽样检测,若每次检测均为低电平/高电平,则认为这段时间内全为低电平/高电平;若有一次不同则认为是错误信号,退出中断。若13.5ms内检测通过,则认为是正确的红外信号,进入之后的32位码接收并存储的阶段。当前电平是低电平吗?延时0.3ms检查完10次了吗?等待低电平过去继续1否否是是检测4.5ms高电平:当前电平是高电平吗?延时0.8ms检查完9次了吗?等待高电平过去继续1否否是是检测9ms低电平:框图:注*2的思路:因为0和1的区别仅体现在高电平的长度,所以首先等待前面的低电平过去,然后延时0.9ms,根据此时的高低电平判断是0还是1,然后存入RAM中。循环此过程即可得到32位码。流程图以记录系统码前8位为例,记录系统码后8位、数据码、数据反码均与此类似。另外,为防止误操作,在存储完数据后随即将其另存到另外四个内存单元中,之后的检验过程使用的是这里的4个内存单元。0.565ms0.56ms0.565ms1.685ms“0”“1”框图:计数器COUNT8=8等待低电平过去延时0.9ms当前电平是高电平吗?存储单元带1循环左移(RLF)存储单元带0循环左移(RLF)计数器-1送回计数器=0?延时1.0ms等高电平过去更改存储单元,准备记录系统码后8位否否是是注*3的思路:经过调取View-File Registers窗口,我们确定遥控器的系统码为1000000001111110,因此只需要对比接收到的数据的前16位是否与之相等即可,若不相等则回到,若相等则继续。注*4的思路:对比数据码和数据反码,若不相反则认为收到的信号有误,回到,若相等则继续。2.2 EEPROM音符存储子程序流程图SAVE_START地址、数据寄存器ADDR2、DATA3清零检测是否是音符是调用音符子程序(DO,RE)继续检测是否是音符调用音符存储子程序SAVE_WRITE是SAVE_STOP按键吗?返回MAIN否是否SAVE_WRITE将对应音符的TEMP赋值给DATA3分别输送地址、数据到地址寄存器EEADR和数据寄存器EEDATA检测WR写控制位是否为0是否指定写操作对象、开放写操作位开放总中断,启动写操作关闭总中断和写操作位 三.硬件连接1单片机端口连接至RB0红外接收模块RB7喇叭RE0LCD_RSRE1LCD_RWRE2LCD_ERD0RE7LCD_D0LCD_D7RC4RC7LED_L0LED_L3RB1RB4LED_L4LED_L72硬件模块连接图单片机PIC16F877A外部中断输入端LCD12864液晶显示器发光二极管喇叭RB7RD&RERC47、RB15RB03芯片的底层电路连接图3.1 单片机3.2 红外模块3.3 电源3.4 发光二极管9V电源3.5 喇叭四.调试过程1. 正确选择中断输入端口对于“单片机随时对红外接收头输入的信息进行处理”这一过程,中断显然是最好的选择。开始在选择中断输入端口时,还没有真正的理解中断这一概念,因此选择了RB7。在调试时却发现完全得不到正确的信号。在反复看书后才发现,由于RB4-RB7共用一组中断标志位和屏蔽位,因此它们之间容易相互影响。而INT(RB0)只有一个引脚,而且还可以自主选择触发信号边沿,因此改用了INT端口。2. 正确接收红外信号在中断程序的调试过程中,我面临着两个困难:第一,完全找不到参考代码;第二,由于中断过程要求在一个红外信号的时长(约108ms)内接收并存储信号,一旦暂停,红外信号就已经消失,因此无法进行单步调试,所有的问题都只能靠观察最终得到的结果来判断。 经过反复思考和调试测验,最终在引导码检测部分使用了抽样检测法,在接收信号部分使用了延时检测法,经过仔细分析,中断程序及其每个子程序所用时间远小于红外信号的时间,最终结果也证明对应不同的按键,我的程序可以分析并存储得到不同的红外码。另外,由于每个内存地址只能记录8位数,最初我打算像C+语言那样使用两个for循环嵌套来完成存储,但实际过程中发现,汇编语言要想实现类似的结构实在太难,而时间又紧,因此只得放弃使用嵌套循环了。3. 正确存储与读取EEPROM在编写完中断、扬声器、LCD部分后还有一段时间,我和XXX打算再添加EEPROM模块,即实现掉电依旧能存储的功能。程序的编写由XXX完成,同一时间我负责将之前的三个模块进行整合、整理、简化,之后共同进行调试。然后就出现了许许多多的看起来无法解释的现象:执行XORWF指令后STATUS的Z位无论如何都不变;存储红外码的地址莫名其妙被突然清零,而在单步执行时就不会被清零;明明应从子程序FANGBO返回原处却无限循环 我们反反复复画框图,看书,看代码,怎么也没有发现有哪一步是错误的,在时间的压力下我们只好暂时放弃,打算若焊接完后还有时间的话再来研究。于是在最后一天我突然发现,其实每一步都确实没有错,只是我们忽略了正确设置体!检查了一遍程序,纠正了这一点之后功能就立刻实现了。4. 焊接过程中的调试在进行了认真的规划后我们开始了焊接,由于规划的十分合理,因此整体很顺利,主要问题有:第一,不小心焊错要重焊,结果将电路板上用来将竖排的三个孔连接起来的焊锡也熔掉了,只得在再次焊接时用焊锡将孔再连起来,在美观性上有些损失;第二,焊接完后完全没有效果,逐点检查电压时发现了和编写EEPROM模块时相似的问题:每点的电压完全不合乎常理,有的甚至为负或者超过了供电电压,我和XXX都调侃说这岂不是可以造永动机了。电路的连接也没有问题,最后终于发现是开关的四个引脚接错了,在更换连接引脚后我们的音乐播放器顺利的实现了各部分功能。五.参考文献:PIC单片机实用教程基础篇李学海北京航空航天大学出版社使用说明:的确是一本不可或缺的教材,本书列举了很多实用的具有实战意义的例子,单片机入门就是通过把这本书里的好例子一字一行敲进电脑去来实现的。PIC单片机实用教程提高篇李学海北京航空航天大学出版社使用说明:继承了前面基础篇的风格,例子也具有实战意义,主要讲RA、TMR2的使用和CCP模块的PWM脉宽调制功能。六.实验心得体会小学期刚开始时,我对单片机是一窍不通,第一节理论课也是听得云里雾里,看书的感觉就像是“老虎啃天,无从下口”,终于看了一遍基础篇之后还是感觉自己什么都不会。而在逐步调试书上的实例代码,自己逐步编写代码的过程中,我才真正理解了单片机的使用方法,才真正将课本知识点连成线。我再一次明白了,只有理论与实践相结合,才能真正学到东西。在调试过程中,如EEPROM模块的调试和焊接过程的调试,出现了许多莫名其妙的问题。我和XXX在起初时难以相信这种离奇的结果而一遍又一遍的检测,因而浪费了很多时间,最后才发现问题根本就不出在我们检查的地方。我明白了,当出现这种百思不得其解的问题时,要学会换个角度去思考,或许能更快的发现解决办法。在我们小组看完书之后,我们曾打算每个部分都是三人一起做,却发现这样会大大增加工作量,而且会增加很多无意义的讨论,于是打算每个人负责一个模块的编写与调试。在工作后期又发现,这样做的坏处是一旦出现问题就只能自己解决,要知道一般别人发现代码问题的速度是要比编写者快的,因此我们又采取了每个模块由一个人主要负责编写,还有一个人负责协同后期调试的方法。因此我又学到了分工与合作的知识。总而言之,这三周对我来说是大学入学以来最棒的三周。我们三个人每天在一起,为了同一个目标而拼命努力,互相支持鼓舞,我觉得比任何班级活动都更能加深同学之间的情谊。谢谢老师让我们拥有这个小学期,谢谢同组的组员们,谢谢老师的指导与鼓励!七.程序代码;*定义*;-RAM特殊功能寄存器-TMR0EQU 01HOPTION_REGEQU 81HPCL EQU 02HSTATUSEQU 03HPORTB EQU 06H;RB0连红外,RB4连扬声器PORTC EQU 07H ;C端连发光二极管PORTD EQU 08H;D端连显示屏的D0-D7PORTE EQU 09H;E端连显示屏的特殊功能端TRISB EQU 86HTRISC EQU 87HTRISD EQU 88HTRISE EQU 89HADCON1 EQU 9FHINTCON EQU 0bHPIR2EQU0dHEECON1 EQU 18CH;这四个是EEPROM录音用EECON2 EQU 18DHEEADR EQU 10DHEEDATA EQU 10CH;-RAM通用寄存器-;播放器部分用COUNT1 EQU 23H ;延时TEMP0 EQU 24H ;频率COUNT2 EQU 25HCOUNT3 EQU 26HCOUNT4 EQU 27HCOUNT10 EQU28H;EEPROM录音用ADDR2 EQU 72HDATA3 EQU 73HT EQU 74HTEMP_SAVE EQU 75H;红外部分用COUNT5EQU30H;count都是循环计数用COUNT6EQU31HCOUNT7EQU32HCOUNT8EQU33HCOUNT9EQU34HCODE0EQU35H;记录遥控器发射的32位码的4个地址位CODE1EQU36HCODE2EQU37HCODE3EQU38HCODE0_TEMPEQU39H;为了防止记录时出现错误,在进行记录动作的时候使用的是这四个,最后将这四个的内容转至上面进行保存CODE1_TEMPEQU3aHCODE2_TEMPEQU3bHCODE3_TEMPEQU3cHW_TEMPEQU3dHSTATUS_TEMP EQU3eHTEMPEQU76H;红外与其它部分的接口,内容是数据码;LCD部分用CYCLE1EQU50HCYCLE2EQU51HCOM_REG EQU52H LCD_REG1EQU53H LCD_REG2EQU54H ADDR EQU 55HDATA1 EQU 56H ;延时变量寄存器DATA2 EQU 57H#DEFINE LCD_RS PORTE,0#DEFINE LCD_E PORTE,2#DEFINE LCD_RW PORTE,1;-寄存器单元中的位(即数字)-;STATUS里的CEQU.0ZEQU.2RP0EQU.5RP1EQU.6;INTCON里的GIEEQU.7PEIE EQU.6INTE EQU.4T0IF EQU.2INTF EQU.1;OPTION_REG里的INTEDGEQU.6;TRISB里的RB0EQU0RB2EQU.2RB3EQU.3RB4EQU.4RB5EQU.5RB7EQU.7;PIR2里的EEIFEQU.4;EECON1里的EEPGD EQU 7HWREN EQU 2HWR EQU 1HRD EQU 0H;-普通数字-WEQU.0;指令用符号FEQU.1;指令用符号;*定义结束* ORG 0x0000NOP GOTO STARTUP ORG 0x0004GOTOINTERR;*中断程序(接收红外信号)*;-现场保护及初始化-INTERRMOVWFW_TEMPSWAPFSTATUS,WCLRFSTATUSMOVWFSTATUS_TEMP ;-判断是否是由RB0(INT)电平变化而引起的中断?-BTFSSINTCON,INTFGOTOFANHUI;若否,执行这一步:返回main程序BCFINTCON,GIE;若是,执行这一步:屏蔽所有中断;-引导码检测部分-;思路:先进行低电平检测,因引导码的低电平是9ms,因此我采用的方法是每隔0.8ms检测一次,共检测10次(使用循环方式),只要有某一次不是低电平,则说明是错误信号,返回main程序。高电平检测同理。;另外,若接收到的是连发码(由9ms低电平+2.5ms高电平+0.56ms低电平+97.94ms高电平组成),每隔0.3ms检测一次高电平,因此在也能判断出这不是需要处理的信号。CHECKLOWCALLDELAY0_8;DELAY0_8是0.8ms延时子程序,即每隔0.8ms检测一次BTFSCPORTB,0;判断当前电平是否为低电平?GOTOFANHUI;若否,执行这一步:返回main程序DECFSZCOUNT5,F;若是,执行这一步:判断有没有循环完9次GOTOCHECKLOW;若没有循环完,则返回继续循环检测,共循环9次(9*0.8=7.29ms)WAITHIGHNOPNOPNOPNOPNOPBTFSCPORTB,0;若循环完,则说明低电平正确,不再循环,然后等待9ms低电平过去,方法是循环判断目前是否是低电平。GOTOCHECKHIGH_1;若否,则说明现在是高电平,转至检测高电平GOTOWAITHIGH;若是,则继续循环判断CHECKHIGH_1CALLDELAY0_3;DELAY0_3是0.3ms延时子程序,即每隔0.3ms检测一次BTFSSPORTB,0;判断当前电平是否为高电平?GOTOFANHUI;若否,执行这一步:返回MAIN程序DECFSZCOUNT6,F;若是,执行这一步:判断有没有循环完10次GOTOCHECKHIGH_1;若没有循环完,则返回继续循环检测,共循环10次(10*0.3=34.5ms)WAITCODENOPNOPNOPNOPNOPBTFSCPORTB,0;若循环完,则说明高电平正确,不再循环,然后等待4.5ms高电平过去。方法是循环判断目前是否是高电平。GOTOWAITHIGH1;若否,则说明到了32位码的部分,进行接受并记录GOTOWAITCODE;若是,则继续循环判断;-接收&记录32位码部分-;思路:32位码要使用RAM中的四个地址位进行记录。而且,输入信号0和1的区别就体现在高电平长度的不同,0的高电平长度为0.56ms,1的高电平长度为1.685ms,还要注意长度有一定误差,因此判断方法是:;首先,跳过低电平,即像上面的WAITHIGH一样循环检测低电平,到出现高电平的时候跳出循环;;其次,因为高电平信号的长度肯定有误差,所以选择延时0.8ms,再进行一次电平检测。若为低电平,则说明之前的高电平长度0.8ms,显然之前的信号是0,转到记录0的程序;若为高电平,则之前的信号是1,转到记录1的程序。;记录方法是令STATUS的C位为0/1,然后让CODE_TEMP带着C左移,左移正好高位保存到高位上。;最后,记录完成之后返回“首先”,检测下一个信号。注意此时不是处在这个“下一个信号”的低电平开始部分,而是在低电平的中间部分。;对一个变量地址循环8次,循环完之后正好记录完成8个信号,然后进入下一个地址继续记录。循环检测32位后跳出循环,转到核对正误的程序。;-记录系统码1-WAITHIGH1MOVLW0x08MOVWFCOUNT8;令COUNT8=8,使用这个地址来计数循环8次LOOP3BTFSCPORTB,0;等待低电平过去GOTOCHECKHIGH1;若变为高电平,转至判断信号部分GOTOLOOP3;若还是低电平,则继续循环判断CHECKHIGH1CALLDELAY0_9;延时0.9msBTFSCPORTB,0;检测当前的电平GOTOWRITE1_1;若是高电平,则转到记录1的子程序;GOTOWRITE0_1;若是低电平,则转到记录0的子程序。WRITE1_1BSFSTATUS,C;令C位为1 RLFCODE0_TEMP,F;带着C位循环左移,结果存入FCALLDELAY1_0;等待高电平过去DECFSZCOUNT8,F;记录目前的循环次数,判断现在COUNT8是否为0?GOTOLOOP3;若否,说明系统码1这8位还没记录完,继续记录;GOTOWAITHIGH2;若是,说明已经循环了8次,这个内存单元记录完毕,接下来进行系统码2的记录。WRITE0_1BCFSTATUS,C;令C位为0RLFCODE0_TEMP,F;带着C位循环左移,结果存入FDECFSZCOUNT8,F;同上GOTOLOOP3GOTOWAITHIGH2;接下来各步骤意义同上。;-记录系统码2-WAITHIGH2MOVLW0x08MOVWFCOUNT8LOOP4BTFSCPORTB,0GOTOCHECKHIGH2GOTOLOOP4CHECKHIGH2CALLDELAY0_9BTFSCPORTB,0 GOTOWRITE1_2GOTOWRITE0_2WRITE1_2BSFSTATUS,C RLFCODE1_TEMP,FCALLDELAY1_0DECFSZCOUNT8,FGOTOLOOP4GOTOWAITHIGH3 WRITE0_2BCFSTATUS,CRLFCODE1_TEMP,FDECFSZCOUNT8,FGOTOLOOP4GOTOWAITHIGH3;-记录数据码-WAITHIGH3MOVLW0x08MOVWFCOUNT8LOOP5BTFSCPORTB,0GOTOCHECKHIGH3GOTOLOOP5CHECKHIGH3CALLDELAY0_9BTFSCPORTB,0 GOTOWRITE1_3GOTOWRITE0_3WRITE1_3BSFSTATUS,C RLFCODE2_TEMP,FCALLDELAY1_0DECFSZCOUNT8,FGOTOLOOP5GOTOWAITHIGH4 WRITE0_3BCFSTATUS,CRLFCODE2_TEMP,FDECFSZCOUNT8,FGOTOLOOP5GOTOWAITHIGH4;-记录数据反码-WAITHIGH4MOVLW0x08MOVWFCOUNT8LOOP6BTFSCPORTB,0GOTOCHECKHIGH4GOTOLOOP6CHECKHIGH4CALLDELAY0_9BTFSCPORTB,0 GOTOWRITE1_4GOTOWRITE0_4WRITE1_4BSFSTATUS,C RLFCODE3_TEMP,FCALLDELAY1_0DECFSZCOUNT8,FGOTOLOOP6GOTOCHECKALL WRITE0_4BCFSTATUS,CRLFCODE3_TEMP,FDECFSZCOUNT8,FGOTOLOOP6GOTOCHECKALL;接下来校验系统码,即确认是否是该遥控器发出的红外信号;还有校验数据码和数据反码是否相反,只要有一个不符合就清空所有数据,返回MAIN程序。;-存储-CHECKALLMOVFCODE0_TEMP,WMOVWFCODE0MOVFCODE1_TEMP,WMOVWFCODE1MOVFCODE2_TEMP,WMOVWFCODE2MOVFCODE3_TEMP,WMOVWFCODE3;32位码已经保存完毕,接下来使用CODE?_TEMP里面的数据进行校验。;-校验-MOVLWB10000000;对比系统码1XORWFCODE0_TEMP,WBTFSSSTATUS,Z;判断系统码1是否=00000000?GOTOFANHUI;若否,执行这一步:返回主程序MOVLWB01111110;若是,继续对比系统码2,注释类似上面就不写了XORWFCODE1_TEMP,WBTFSSSTATUS,ZGOTOFANHUICOMFCODE3_TEMP,W;若是,继续对比数据码和数据反码XORWFCODE2_TEMP,W BTFSSSTATUS,ZGOTOFANHUIMOVFCODE2,WMOVWFTEMPGOTOFANHUI;-FANHUI-;返回主程序。在这之前需要做一系列工作。FANHUIMOVLW.9;再次设初值,供下次使用MOVWFCOUNT5MOVLW.10MOVWFCOUNT6CLRFCODE0;清除记录的信号。数据码已经存入TEMP中了。CLRFCODE1CLRFCODE2CLRFCODE3CLRFCODE0_TEMPCLRFCODE1_TEMPCLRFCODE2_TEMPCLRFCODE3_TEMPSWAPFSTATUS_TEMP,W;现场还原,恢复STATUSMOVWFSTATUSSWAPFW_TEMP,F;现场还原,恢复WSWAPFW_TEMP,WBCFINTCON,INTF;清除INT的标志位BSFINTCON,GIE;开启总中断RETFIE;下面是中断程序要调用的子程序;-DELAY0_8(延时0.8ms子程序)-DELAY0_8MOVLW.100MOVWFCOUNT7LOOP1NOPNOPNOPNOPNOPDECFSZCOUNT7,1GOTOLOOP1RETURN;-DELAY0_3(延时0.3ms子程序)-DELAY0_3MOVLW.99MOVWFCOUNT9LOOP2DECFSZCOUNT9,1GOTOLOOP2RETURN;-DELAY1_0(延时1.0ms子程序)-DELAY1_0MOVLW.100MOVWFCOUNT7LOOP7NOPNOPNOPNOPNOPNOPNOPDECFSZCOUNT7,1GOTOLOOP7RETURN;-DELAY0_9(延时0.9ms子程序)-DELAY0_9MOVLW.100MOVWFCOUNT7LOOP8NOPNOPNOPNOPNOPNOPDECFSZCOUNT7,1GOTOLOOP8RETURN;*中断程序结束*;*主程序*STARTUP BSF STATUS,RP0 ;选择体1MOVLW B00000001 MOVWF TRISB;RB0设为输入,RB25、RB7设为输出 MOVLW B00000001 MOVWF OPTION_REG;TMR0的分频比设为1:4,INT端口的下降沿触发有效MOVLW B00001111 MOVWF TRISC ;RC47设为输出 MOVLW 06H MOVWFADCON1;将RA脚全部设置为数字I/O脚BCF STATUS,RP0;选择体0BCFPORTB,RB7;初始化端口数据寄存器BCFPORTB,RB2 BCFPORTB,RB3BCFPORTB,RB4BCFPORTB,RB5 CLRF PORTC CALL LCDINITIATE ;LCD初始化 CALL START ;LCD开机界面 BSF STATUS,RP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 动物保护事件的记叙作文11篇
- 食品科学与工程食品安全控制知识测试卷及答案
- 产品需求表格-产品研发团队
- 提升能源学科基础研究与应用研究的平衡
- 《高中数学代数公式记忆与运用教案》
- 2025年物联网技术应用知识考试试题及答案
- 2025年数据分析师职业水平考试题及答案
- 2025年跨文化交流与管理课程期末考试题及答案
- 2025年公共艺术与设计实践能力测试卷及答案
- 2025年供应链管理师职业考试试题及答案
- 2023年湖南省常德市中考地理试卷【附答案】
- 单位干部积分制管理考核制度(五篇)
- 医学公共基础知识试题
- 小孩上学房屋租赁合同小孩上学房屋租赁合同
- 古诗5首赏析《登幽州台歌》(望岳)《已亥杂诗》《游山西村》《登飞来峰》
- 广西河池市三新学术联盟2022-2023学年高二下学期期中联考政治试题
- 公路损坏分类和识别专题培训课件
- 国家开放大学应用写作(汉语)形考任务1-6答案(全)
- 幼儿园食育环境创设的实践研究 论文
- 电机学知到章节答案智慧树2023年东北电力大学
- 气候变化科学概论试题及答案
评论
0/150
提交评论