[单片机课程设计]MCS51与SPI串行接口语音芯片连接

上传人:仙*** 文档编号:33937878 上传时间:2021-10-19 格式:DOC 页数:28 大小:228KB
返回 下载 相关 举报
[单片机课程设计]MCS51与SPI串行接口语音芯片连接_第1页
第1页 / 共28页
[单片机课程设计]MCS51与SPI串行接口语音芯片连接_第2页
第2页 / 共28页
[单片机课程设计]MCS51与SPI串行接口语音芯片连接_第3页
第3页 / 共28页
点击查看更多>>
资源描述
MCS-51与SPI串行接口语音芯片连接一、实验目的(1) 进一步理解SPI串行总线传输协议。(2) 理解ISD4000系列语音芯片工作原理,放音、录音控制过程。(3) 理解MCS-51与SPI总线外设(如ISD4000系列语音芯片)的硬件连接、读写方式。二、实验设备与器材仿真器及附件、图0-1所示实验电路板各一套。三、实验电路本实验涉仅仅涉及实验板上的U101、U103、U104、U401(ISD4002语音芯片)、U404(集成功率放大器),而与其他元器件无关。接通电源前,将JP103的1-2引脚短路,使ISD4002语音芯片的中断输出端引脚与MCS-51外中断(P3.2)引脚相连。由于多数MCS-51芯片没有内置SPI串行总线接口部件,因此只能用软件模拟SPI总线时序方式读写SPI总线接口器件。四、实验原理(ISD4000系列语音芯片简介)ISD4000系列语音芯片包括ISD4002、ISD4003、ISD4004三个子系列芯片,电源电压为3V,单片录音时间在216分钟之间,音质中上,广泛用于公共汽车语音报站系统、移动及自动应答电话设备、语音复读机等电子产品中。该系列语音芯片采用CMOS工艺,内含振荡器、防混淆滤波器、平滑滤波器、音频放大器、自动静噪及高密度多电平Flash ROM存贮器阵列。通过串行通信接口(SPI或Microwire总线协议)与微控制器(如MCS-51芯片)相连,所有操作均由微控制器控制。内部采用多电平直接模拟量存储技术, 每个采样值直接存贮在片内Flash ROM存贮器中,因此能逼真、自然地再现语音、音乐、音调等声响效果,避免了一般固体录音电路因量化和压缩造成的量化噪声和金属声。可选4.0,5.3,6.4,8.0kHz等多个采样频率,采样频率越低,录放时间就越长(但音质会略有下降),片内信息存放在Flash ROM存贮器中,在断电状态下可保存100年(典型值),能反复录音10万次以上。(一) 主要参数ISD4000系列语音芯片主要参数如表13-1所示。表13-1 主要参数型号存储时间(秒)最大段数信息分辩率(毫秒)采样频率(HZ)滤波器带宽(HZ)控制码+地址位长度ISD4002-1201206002008.0K3.4K5+11ISD4002-1801806003005.3k2.3k5+11ISD4002-2402406004004.0k1.7k5+11ISD4003-0424012002008.0K3.4K5+11ISD4003-0636012003005.3K2.3K5+11ISD4003-0848012004004.0K1.7K5+11ISD4004-0848024002008.0K3.4K8+16ISD4004-1696024004004.0K1.7K8+16(二) 封装及引脚排列ISD4000系列语音芯片采用28引脚TSOP、PDIP或SOIC封装方式,其中PDIP或SOIC封装方式引脚排列如图13-1所示。图13-1 PDIP或SOIC封装引脚排列引脚功能:VCCD芯片内部数字电路电源引脚,VSSD芯片内部数字电路地线引脚;VCCA芯片内部模拟电路电源引脚,VSSA芯片内部模拟电路地线引脚。为减小噪声,芯片内部模拟、数字电路具有各自的电源、地线总线,以方便在印制板上实现数字、模拟电路电源和地线分开走线,形成单点接地的布线规则。ANA IN+、ANA IN-分别是录音输入放大器的同相输入端和反相输入端。输入放大器可用单端或差分方式之一驱动。采用单端驱动时,信号由耦合电容输入,最大为32mV(峰峰值)。耦合电容与本端内部的3K串联电阻构成的输入阻抗决定了芯片频带的低端截止频率。采用差分驱动时,最大为16mV(峰峰值)。XCLK外部采样时钟输入端,可选的采样频率如表10所示。一般使用芯片内部采样频率(在出厂前已调校,误差在+1%以内),除非对采样精度要求很高。当不用外部采样时钟信号时, XCLK引脚必须接地。AM CAP自动静噪输入端。当录音信号电平下降到内部设定的某一阈值以下时,自动静噪功能使信号衰弱,这样有助于养活无信号(静音)时的噪声。一般情况系情况下,改引脚对地接1F电容,构成内部信号电平峰值检测电路的一部分。检出的峰值电平与内部设定的阈值作比较,决定自动静噪功能的翻转点。大信号时,自动静噪电路不衰减,静音时衰减6dB。1F电容也影响自动静噪电路对信号幅度的响应速度。当AM CAP引脚接VCCA时,则禁止自动静噪。AUD OUT音频输出,可驱动5K的负载。MOSI命令及数据信息的串行输入端。MIS0状态信息的串行输出端。SCLK串行时钟输入端,由SPI总线主设备(一般为MCU)提供。片选信号输入端,输入,低电平有效。当片选信号无效时,芯片处于待用状态,静态电流典型值为1uA。中断输出端,漏极开路(OD)输出,低电平有效。在放音(包括快进)、录音操作过程中,遇到到段结束(EOM)、存储器末尾(OVF)时,引脚输出低电平并保持,直到SPI总线主设备向ISD芯片写入新的命令。RAC行地址时钟输出端,漏极开路(OD)。每个RAC周期表示ISD存储器的操作进行了一行(ISD4003系列中的存贮器有1200行)。该信号高电平时间为200ms,低电平为25ms。快进模式下,RAC的218.75s是高电平,31.25s为低电平。该端可用于存储管理技术。(三) 控制命令及SPI端口控制寄存器位ISD4000系列语音芯片控制命令如表13-2所示,SPI端口控制寄存器位含义如图13-2所示。表13-2 控制命令指令5位控制码操作摘要POWERUP00100上电:等待TPUD后器件可以工作SET PLAY11100从指定地址开始放音。必须后跟PLAY指令使放音继续PLAY11110从当前地址开始放音(直至EOM或OVF)SET REC10100从指定地址开始录音。必须后跟REC指令录音继续REC10110从当前地址开始录音(直至OVF或停止)SET MC11101从指定地址开始快进。必须后跟MC指令快进继续MC11111执行快进,直到EOM.若再无信息,则进入OVF状态STOP 0X110停止当前操作(C3没有定义)STOP WRDN0X01X停止当前操作并掉电(C3、C0没有定义)RINT0X110读OVF和EOM标志(C3没有定义)图13-2 SPI端口控制寄存器位及含义1. 放音过程(1) 执行上电命令(POWER UP)。(2) 延迟等待上电结束(当采样频率为8KHz时,上电延迟时间约为25mS)。(3) 执行“SET PLAY”命令,设置放音段起始地址。录音、放音段起始地址与每段最短时间及放音长度有关。例如,对ISD4002-120芯片来说,最多有600段(段地址编号为000599),每段最短录音时间为200mS。如果每段记录一个单音,长度为400mS(即每个单音占用两段),则第n个单音对应的段地址为(n2)。(4) 执行“PLAY”命令,从当前地址开始放音,遇到段结束标志EOM或存储器末尾标志OVF时停止放音,同时引脚输出低电平,指示当前段播放结束。当需要播放两段或两段以上时,如果段与段之间间隔很小时,可在上一段播放结束后,延迟一段时间(需通过试听确定延迟时间的长短,一般为数十mS)后再播放下一段。放音过程如图13-3(a)所示。在放音操作过程中,执行“STOP”或“STOP WRDN”命令时,将终止当前放音操作。2. 录音过程(1) 执行上电命令(POWER UP)。(2) 延迟等待上电结束(当采样频率为8KHz时,上电延迟时间TPUD约为25mS)。(3) 再执行上电命令(POWER UP)。(4) 延迟两倍上电等待时间(即延迟2TPUD时间)。(5) 执行“SET REC”命令,设置录音段的起始地址。(6) 执行“REC”命令,从当前地址开始录音,直到出现存储器末尾标志OVF信号。在录音过程中,未录到存储器末尾时,就执行“STOP”或“STOP WRDN”命令,将终止当前录音操作,并产生EOM标志。因此,可利用这一特性在芯片上录制多段语音信息。可见,录音过程与放音过程相似,只是每次录音操作操作只能录一段,如图13-3(b)所示。图13-3 放音、录音流程(四) SPI总线接口时序及命令格式芯片支持8位、16位命令格式,传输时序如图13-4所示,ISD4000系列语音芯片SPI总线参数如表13-3所示。从ISD4000系列语音芯片SPI总线时序可以看出:其SPI总线时序与SPI总线接口存储器EEPROM 25C01/02/04兼容。在接收控制命令时,先接收LSB(这要求SPI总线控制器先输出LSB);空闲时,SCLK为低电平,在SCLK上升沿锁存器MOSI引脚上的信息。表13-3 ISD4000系列语音芯片SPI总线参数符号参数最小典型最大单位TSSS片选信号建立时间500nsecTSSH片选信号保持时间500nsecTDIS串行输入数据DI建立时间200nsecTDIH串行输入数据DI保持时间200nsecTPD输出延迟500nsecTDF输出延迟到高阻态500nsecTSSmin片选信号高电平时间1secTSCKhiSCLK 高电平时间400nsecTSCKlowSCLK低电平时间400nsecF0SCLK频率1000kHz(a) 传输时序(b) 8位命令格式(c) 16位命令格式图13-4 命令格式(五) 典型应用电路及与MCS-51的连接MCS-51芯片一般没有内置SPI总线部件,可通过软件方式模拟SPI总线操作时序控制ISD4000系列语音芯片的操作,典型连接线路如图13-5所示。图13-5 与MCS-51芯片的典型连接(六) 参考驱动程序根据图13-5连接方式,下面给出了与SPI模拟总线驱动程序、组合播放、从指定段连续播放、单段录音有关的参考程序段,完整程序参阅磁盘文件实验十三(ISDN4000系列语音驱动程序).ASM。MOSI BIT P1.5MISO BIT P1.6SCLK BIT P1.7ISDSS BIT P1.4;片选信号MIC_C BIT P1.3 ;功放电源控制,同时也作放音/录音标志(0-放音、1-录音)ISDBUF DATA 50H ;ISD语音芯片命令缓冲区 ;50H单元存放命令码(C4-C0)及段高3位地址(A10-A8) ;51H单元存放段低8位地址(A7-A0)ISDBUFSP DATA 52H ;播放指针TASK3 DATA 53H ;语音播放状态,b2-b0记录放音或录音状态ISDTIME DATA 54H ;语音播放延迟时间XmtDat DATA 60H ;段缓冲区RECNO EQU 0F0H ;可录音的最小段号;初始化外中断INT0SETB IT0 ;下降沿触发(采用查询方式检测);-从指定段连续播放初始化 CLR MIC_C ;设置放音标志 MOV ISDBUFSP, #0 ;设置播放的起始段号 MOV TASK3, #05H ;启动标志(未上电标志)HERE1: LCALL ISD_RD_A ;调用逐段播放过程 MOV A, TASK3CJNE A, #0, HERE1SJMP $ ;虚拟等待;-段组合播放初始化 ;把待播放的段编号(一次最多可播放16段)装入播放缓冲区内 ;当待播放的段号不足16时,在播放段后放0FFH,作为结束标志 MOV R0, #XmtDat MOV R0, #02h ;初始化语音段缓冲区 INC R0 MOV R0, #01H INC R0 MOV R0, #22hINC R0 CLR MIC_C ;设置放音标志 MOV ISDBUFSP, #0 ;初始化播放指针 ;-段组合播放启动 MOV TASK3, #05H ;启动标志(未上电标志)HERE2: LCALL ISD_RD ;调用段组合播放过程 MOV A, TASK3 CJNE A, #0, HERE2SJMP $ ;虚拟等待 ;-单段录音初始化 MOV R0, #XmtDat MOV R0, #xxh ;段地址送缓冲区首字节 INC R0 MOV R0, #xx ;录音时间送缓冲区第二字节 SETB MIC_C ;设置录音标志 ;-单段录音过程启动 MOV TASK3, #05H ;启动标志(未上电标志)HERE3: LCALL ISD_WR ;调用单段录音过程 MOV A, TASK3 CJNE A, #0, HERE3SJMP $ ;虚拟等待;把语音缓冲区语音段送IDS4000芯片播放子程序PROC ISD_RD;入口参数:TASK3置为05H ;b2-b0记录放音或录音状态 ;000-空闲 ;001-执行上电延迟(25ms) ;010-段播放延迟 ;011-段间延迟 ;101-未上电标志ISD_RD: JNB MIC_C, RUN ;录音状态,不执行! JMP EXIT ;退出RUN: MOV A, TASK3 ANL A, #07H ;保留标志位b2b0 CJNE A, #000B, NEXT1 ;b2b0为000,空闲 JMP EXIT ;退出NEXT1: CJNE A, #101B, NEXT2 ;b2b0为101,未上电,先执行上电操作 ;执行“POWER UP” (上电)命令 MOV R0, #ISDBUF ;语音命令缓冲首地址送R0 MOV R0, #20H ;00100XXX,执行上电操作 LCALL SPIBW ;调用SPI总线控制命令写入子程序 MOV ISDTIME, #5 ;延迟时间为5*5ms(即25ms) MOV TASK3, #1 ;进入上电延迟状态 JMP EXITNEXT2: CJNE A, #001B, NEXT3 ;b2b0为001,处于上电延迟期间,检查延迟时间NEXT30: MOV A, ISDTIME JZ NEXT31 ;不是0,上电延迟时间未到,等待 SJMP EXITNEXT31: MOV A, #XmtDat ADD A, ISDBUFSP MOV R0, A MOV A, R0 ;取出待放音段编号 MOV B, #2 ;假设每一单音占用两个最小段 MUL AB ;计算段首地址 MOV R0, #ISDBUF+1;语音命令缓冲首地址送R0 MOV R0, A ;段地址低8位送命令缓冲 DEC R0 MOV A, B ;段地址高位送A ORL A, #11100000B;形成地址控制码11100(SET PLAY) MOV R0, A ;命令码送命令缓冲区 LCALL SPIBW ;调用SPI总线控制命令写入子程序 ;执行PLAY命令 MOV R0, #ISDBUF ;语音命令缓冲首地址送R0 MOV A, #0F0H ;11110XXX,执行PLAY/REC命令 MOV R0, A ;命令码送命令缓冲区 LCALL SPIBW ;调用SPI总线控制命令写入子程序 ;开始放音 MOV TASK3, #02H ;b2b0置为010态(修改作业号) CLR IE0 ;清除INT0中断标志(采用查询方式确定段 ;播放是否已结束) SJMP EXITNEXT3: CJNE A, #2, NEXT4 ;b2b0置为010 ;属于段播放期间延迟 JB IE0, NEXT41 ;INT0中断无效,即未遇到EOF或VOF标志 SJMP EXIT ;等待NEXT41: CLR IE0 ;清除INT0中断标志 INC ISDBUFSP ;指针加+1 MOV A, ISDBUFSP CJNE A, #16, NEXT42NEXT42: JC NEXT43 ;指针大于或等于16,缓冲区所有段已播放结束 SJMP NEXT441NEXT43: MOV A, #XmtDat ADD A, ISDBUFSP MOV R0, A MOV A, R0 ;取出将要播放的段编号 CJNE A, #0FFH, NEXT44 ;尽管指针=F0H,退出 MOV R0, #ISDBUF ;语音命令缓冲首地址送R0 MOV R0, #10H ;0001X XXX,执行STOP WRDN命令,停止当前操作 LCALL SPIBW ;调用SPI总线控制命令写入子程序 SETB MIC_C ;关闭功率放大器电源 MOV TASK3, #0 ;将b2b0置为000,结束播放 SJMP EXITNEXT43: MOV TASK3, #3 ;进入段间延迟状态 MOV ISDTIME, #10 ;延迟时间为10*5ms(即50ms) SJMP EXITNEXT4: CJNE A, #3, EXIT ;b2b0置为011 ;属于段间延迟 JMP NEXT30 ;处理方式与上电延迟相同EXIT: RETEND;从指定地址开始录音(单段录音)PROC ISD_WR ;从指定地址开始录音(单段录音);入口参数:TASK3置为05H ;b2-b0记录放音或录音状态 ;000-空闲 ;001-执行上电延迟(25ms) ;010-录音过程的再上电延迟 ;011-录音延迟 ;101-未上电标志ISD_WR: JB MIC_C, RUN ;非录音状态,不执行! JMP EXITRUN: MOV A, TASK3 ANL A, #07H ;保留标志位b2b0 CJNE A, #00H, NEXT1 ;b2b0为000,空闲 JMP EXITNEXT1: CJNE A, #101B, NEXT2 ;b2b0为101,未上电,先执行上电操作 ;执行“POWER UP” (上电)命令 MOV R0, #ISDBUF ;语音命令缓冲首地址送R0 MOV R0, #20H ;00100XXX,执行上电操作 LCALL SPIBW ;调用SPI总线控制命令写入子程序 MOV ISDTIME, #5 ;延迟时间为5*5ms(即25ms) MOV TASK3, #1 ;进入上电延迟状态 JMP EXITNEXT2: CJNE A, #001B, NEXT3 ;b2b0为001,处于上电延迟期间 MOV A, ISDTIME JZ NEXT31 ;不是0,上电延迟时间未到 SJMP EXIT ;退出,继续等待NEXT31: ;再执行“POWER UP” (上电)命令 MOV R0, #ISDBUF ;语音命令缓冲首地址送R0 MOV R0, #20H ;00100XXX,执行上电操作 LCALL SPIBW ;调用SPI总线控制命令写入子程序 MOV ISDTIME, #10 ;延迟时间为10*5ms(即50ms) MOV TASK3, #2 ;进入再上电延迟状态(时间50ms) SJMP EXIT ;退出NEXT3: CJNE A, #010B, NEXT4 ;b2b0为010,处于再上电延迟期间 MOV A, ISDTIME JZ NEXT41 ;不是0,再上电延迟时间未到 SJMP EXIT ;退出,继续等待NEXT41: MOV R0, #XmtDat MOV A, R0 CJNE A, #RECNO, NEXT42NEXT42: JNC NEXT43 ;小于允许录音段地址,关闭电源退出 SJMP NEXT51NEXT43: MOV B, #2 ;假设前面每一单音占用两个最小段 MUL AB ;计算段首地址 MOV R0, #ISDBUF+1;语音命令缓冲首地址送R0 MOV R0, A ;段地址低8位送命令缓冲 DEC R0 MOV A, B ;段地址高位送A ORL A, #10100000B;形成地址控制码10100(SET REC) MOV R0, A ;命令码送命令缓冲区 LCALL SPIBW ;调用SPI总线控制命令写入子程序 ;执行REC命令 MOV R0, #ISDBUF ;语音命令缓冲首地址送R0 MOV A, #0B0H ;10110XXX,执行REC命令 MOV R0, A ;命令码送命令缓冲区 LCALL SPIBW ;调用SPI总线控制命令写入子程序 ;从地址开始开始录音 MOV TASK3, #03H ;b2b0置为011态(修改作业号) MOV R0, #XmtDat+1;取录音时间 MOV ISDTIME, R0 ;录音时间送计时单元 CLR IE0 ;清除INT0中断 SJMP EXITNEXT4: CJNE A, #3, EXIT ;b2b0为011,处于录音等待期间 JB IE0, NEXT51 ;INT0中断效,即遇到VOF ;检查延迟时间是否为0? MOV A, ISDTIME JZ NEXT51 ;录音已经结束 SJMP EXIT ;录音尚未结束,退出!NEXT51: CLR IE0 ;清除中断 MOV R0, #ISDBUF ;语音命令缓冲首地址送R0 MOV R0, #10H ;0001X XXX,执行STOP WRDN命令,停止当前操作 LCALL SPIBW ;调用SPI总线控制命令写入子程序 SETB MIC_C ;关闭功率放大器电源 MOV TASK3, #00 ;将b7、b6置为00,结束播放EXIT: RETEND;控制命令送ISD4000语音芯片(16位命令格式)PROC SPIBW ;SPI总线控制命令写入子程序;入口参数:16位命令码(两字节)存放在ISDBUF缓冲区内;出口参数:无;使用资源:R0、R6、R7及Acc、PSW、DPTR(使用进位标志C)SPIBW: CLR EA CLR SCLK ;空闲时SCLK处于高电平,以减小功耗。而,ISD采用 ;正极性SCLK脉冲头。因此,在片选信号SS为低电平前 ; 先将SCLK置为低电平 CLR ISDSS ;片选信号为低 MOV R0, #ISDBUF+1 ;取命令码低位字节 MOV R6, #2 ;传送两字节LOOP2: MOV A, R0 MOV R7, #08H ;移动次数LOOP1: RRC A ;带Cy右移。 MOV MOSI, C ;CPU输出数据。 SETB SCLK ;利用SCLK上升沿锁存输入的数据。 NOP ;由于SCLK信号时钟频率最高为1MHz,即高低 ;电平时间必须大于400uS,可根据晶振频率插入 ;0-2条NOP指令(对于晶振频率在12MHz以内时,不用) CLR SCLK ;时钟信号为低电平 DJNZ R7,LOOP1 DEC R0 ;指针减1,指向下一字节 DJNZ R6, LOOP2 SETB ISDSS ;执行结束后将SS引脚置为高电平。 SETB SCLK ;空闲时SCLK处于高电平,以减小功耗。 SETB EA RETEND五、实验内容1. 写出ISD4002语音芯片的读写控制程序,逐段播放实验板上ISD4002语音芯片内已录好的语音信息。2. 在空白处录制5S左右的语音信息。3. 在实验九(1)基础上,实现每按下一个按键时,通过语音芯片报出键名。实验15 无线解码接收一、实验目的(1) 理解无线收发系统组成、工作原理。(2) 理解PT2262或与之兼容的固定编码芯片信息帧格式;理解软件解码原理、实现方法以及软件解码程序编写要领。(3) 初步掌握自适应软件解码程序设计规则。(4) 理解MCS-51芯片内PCA模块的功能和使用方法。二、实验设备与器材仿真器及附件、图0-1所示实验电路板各一套(需带ASK无线接收模块),PT2262编码遥控器或门磁一只、导线一批。三、实验原理与电路1. 无线收发系统典型无线收发系统如图15-1所示,由ASM无线接收/解调模块、一个或多个PT2262编码遥控器(或无线探头)组成。图15-1 典型无线收发系统2. PT2262编码芯片信息帧格式PT2262或与之兼容的固定编码芯片性能稳定,价格低廉,是无线探头、廉价遥控器的首选编码芯片。这类芯片编码长度为24位,一信息帧由同步头、地址码、数据码三部分组成,如图15-2所示。同步头高电平持续时间为4(是编码芯片振荡周期,在25s120s之间,由振荡电阻决定),间歇期为124;编码位采用PWM调制,脉宽比为1:3,“0”码高电平持续时间为4,低电平持续时间为12;而“1”码高电平持续时间为12,低电平持续时间为4。一信息帧总长为,即512。发送时,先输出编码的最低位。图15-2 PT2262编码芯片信息帧格式3. 自适应软件解码方法为降低成本、提高灵活性,在含有MCU的无线接收系统中,一般不用硬件解码芯片PT2272实现PT2262编码信息的解码,而采用软件解码方式。本实验借助MCS-51RX系列MCU芯片内置的可编程计数器阵列(PCA)上下沿捕获功能测量脉冲信号高、低电平持续时间;用脉冲间隔时间比作为脉冲宽度测量依据实现可适应不同脉冲头宽度的自适应软件解码方式。根据编码芯片信息帧特点,当取25s120s时,信息帧内高电平最长时间为12(300s1.44ms之间);低电平时间最长为同步头低电平持续时间124(3.1ms14.88ms)。因此,当系统时钟频率为11.092MHz时,在6时钟/机器周期模式下,PCA计数器溢出时间为,即35.55ms,即信息帧内相邻两次捕获时间间隔小于定时器溢出时间。(1) 资源及状态分配为简化软件解码判别过程,缩短PCA中断执行时间,使用字节变量STU记录解码状态,各位定义如下:b2b0记录信息帧状态,如图15-3所示。000为起始状态,下降沿时刻,如果相邻两次捕获间隔不在100us1.44ms20%范围内,则返回000态;上升沿后,如果时间间隔不在允许范围内,则置为001态;而101、110分别表示编码位高、低电平状态。图15-3b3位作信息帧连续有效标志。b4位是解码成功标志。以PT2262作编码芯片的编码器会连续发送4帧以上信息,为提高可靠性,采用双循环校验,即只有接收到两相邻的信息帧编码相同时,b4位置1。因此b4b3描述的解码状态含义为:00表示尚未接收到完整信息帧;01表示已收到了一完整信息帧;11表示已连续接收了两个相同的信息帧,解码有效标志置1;10表示接收缓冲区数据有效,但未处理。用字变量TIME记录相邻两次捕获时间间隔,字变量TIMEB记录基本时间(4)。(2) 自适应软件解码过程自适应软件解码过程如图15-4(a)(d)所示。为保证能够接收基本时间只有100us左右的高速编码信息,主控程序中除了将PCA中断优先级置为最高外,还必须保证PCA中断服务程序执行时间尽可能短,即最好用汇编语言指令编写PCA中断服务程序。由于MCS-51指令系统没有双字节除法指令,解码过程中涉及到的除法运算,可采用减法或多项式除法完成。图15-4 自适应解码软件过程四、实验内容、过程及要求本实验主要涉及实验板上的U101、U103、U402等芯片。接通电源前,板上各跳线状态如表15-1所示。表15-1 跳线设置JP103JP104JP107JP201JP202JP203JP204JP205JP402JP403SWDIP1-2开路2-3开路1-2开路2-3开路短路1-2 短路2-3 开路1-2 短路2-3 开路1-2 短路2-3 开路1-2 短路2-3 开路1-2 短路2-3 开路1-2 开路2-3短路1-2 开路2-3短路OFF与自适应软件解码有关程序段如下,完成程序可参阅实验十五.ASM。;*定义软件解码变量*WUSTU DATA 2EH;b2-b0作无线接收状态标志 ;000-开始;001-同步头高电平;010-同步头低电平 ;101-数据位高电平;110-数据位低电平LXJIE BIT WUSTU.3 ;信息帧连续标志JIEMA BIT WUSTU.4 ;接收数据有效标志(可以利用数据有效标志作为;数据处理标志) ;数据有效,而信息帧连续标志无效时,即认为接收无效HDATAB BIT 01H ;高电平时间,码长标志(4a为0,12a为1)OVERT DATA 2FH;相邻居两次捕获之间定时器溢出次数BUFF0 DATA 30H;解码接收缓冲区(30-3F)TIMEL DATA 5AH;相邻两次捕获间隔时间低8位TIMEH DATA 5BH;相邻两次捕获间隔时间高8位CNTB DATA 5CH;信息帧长度(单位为bit)TIMEBCL DATA 7DH;同步头高电平时间(即4a)的低8位TIMEBCH DATA 7EH;同步头高电平时间(即4a)的高8位ORG 0000HLJMP MAINORG 0033HLJMP PCA ;PCA中断服务程序入口地址(用于解码接收)ORG 0050HPROC MAIN ;主程序开始MAIN: ;-PCA模块初始化 ;模块0工作在16位上下沿捕获方式,作解码定时器。 MOV CMOD, #00000001B ;计数脉冲为内部时钟信号/6,允许CH、CL溢出中断 MOV CH, #0 ;从0开始计数 MOV CL, #0 MOV CCON, #40H ;启动CH、CL计数 MOV CCAPM0, #00100001B ;模块0工作在16位上沿捕获方式,允许模块0中断 ;开始时先用上沿捕获,中断后上下交替捕获 SETB PPC ;PCA中断优先级置为高 SETB EC ;允许PCA中断 SETB EA ;开中断NEXT1: JNB JIEMA, NEXT1 NOP ;虚拟等待解码有效 SJMP NEXT1END;PCA中断服务程序PROC PCAPCA: PUSH PSW PUSH ACC PUSH B ORL PSW, #18H; SETB RS1; SETB RS0 ;使用工作寄存器区3 JBC CF, TNEXT1 ;不是定时器溢出引起 SJMP CANEXTTNEXT1: ;定时器T溢出引起中断 INC OVERT MOV A, WUSTU JB ACC.0, TNEXT2 ;低电平,检查溢出次数 MOV A, OVERT CJNE A, #2, TNEXT21TNEXT21: JC TOEXIT ;小于2,退出! ;溢出次数大于2,肯定是错误! MOV OVERT, #2 ANL WUSTU, #0D0H ;解码状态清0,清除连续有效标志 SJMP TOEXITTNEXT2: ;在高电平期间,发现溢出次数大于指定值 MOV A, OVERT CJNE A, #2, TNEXT22TNEXT22: JC TOEXIT ;小于2,退出! ;大于2 MOV OVERT, #2 ANL WUSTU, #0F0H ;清除连续有效标志,解码状态置为011(即等幅干扰状态) ORL WUSTU, #03H ;置为011态!TOEXIT: JMP RETURNCANEXT: ;捕获中断引起 MOV R3, CCAP0L MOV R4, CCAP0H ;取捕获发生的时刻 CLR C MOV A, R3 SUBB A, TIMEL MOV TIMEL, A MOV A, R4 SUBB A, TIMEH MOV TIMEH, A ;计算并保存相邻两次捕获时间间隔到TIMEH、TIMEL中 MOV A, CCAPM0 MOV C, ACC.5 ;上升沿触发捕获标志送C XRL CCAPM0, #30H ;与30异或,强迫CAPP、CAPN取反 ANL CCON, #0FEH ;清除CCF0中断标志 MOV OVERT, #0 ;捕获时清除溢出次数 ;判别捕获原因 JC HNEXT ;下沿触发引起; CLR C MOV A, TIMEL SUBB A, #140 ;PCA模块计数脉冲为系统时钟信号的6分频(晶振频率为11.0592MHz) MOV A, TIMEH ;140对应的时间为(1/11.0592)*6*140,约76us SUBB A, #0 JNC LNEXT0 ;高电平时间太短, ANL WUSTU, #0F0H ;重置为000态,清除连续标志 JMP RETURN ;没有必要记录LNEXT0: LJMP LNEXT;上边沿触发HNEXT: MOV A, WUSTU ANL A, #07H CJNE A, #0, HNEXT1 ;000态, 说明尚未开始 ORL WUSTU, #21H ;置为001态 JMP CAEND ;记录捕获时间后退出HNEXT1: CJNE A, #2, HNEXT2 ;原来处于010态,计算同步头时间,计算同步头脉冲相对宽度; CLR C MOV A, TIMEL SUBB A, #51H MOV A, TIMEH ;假设a在25us120us(允许存在25%的误差)之间 SUBB A, #16H ;124a对应计数器读数为571334174,即1651H857EH JNC HNEXT20 ;小于最小值,错误 JMP HERROR ;上升沿出错处理HNEXT20: ;CLR C MOV A, TIMEL SUBB A, #7EH MOV A, TIMEH SUBB A, #85H JC HNEXT201 ;大于124a的上限(即最大值),错误 JMP HERROR ;上升沿出错处理HNEXT201: ;在同步头间歇期时间最小值与最大值之间 LCALL CAL1 ;当被除数较大时,用多项式除法可有效缩短运算时间 CJNE R6, #29, HNEXT21HNEXT21: JNC HNEXT22 ;小于29,同步头高、低电平时间比太小!错!
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!