《HT6221 发码的接收.docx》由会员分享,可在线阅读,更多相关《HT6221 发码的接收.docx(6页珍藏版)》请在三一文库上搜索。
1、HT6221 发码的接收HT6221 发码的接收文件编码:HA0040s简介:HT6221 的应用电路图如下:VDD 1.8V3.5V47F/16V330100pF100pF1k455kHzLEDceramicresonator981165X1X2LEDVDDDOUT7D706$VSSInfrared4780501051k 8C1 C2 C3 C4 C5 C6 C7 C8 R1 R2 R3 R4 AIN19 18 17 16 15 14 13 12 123420K1 K5 K9 K13 K17 K21 K25 K29K2 K6 K10 K14 K18 K22 K26 K30K3 K7 K11
2、K15 K19 K23 K27 K31K4 K8 K12 K16 K20 K24 K28 K32 1N4148 8HT6221 发码的接收HT6221 是 Holtek 公司生产的多功能编码芯片,采用 PPM(Pulse Position Modulation)进行编码,1.12ms为 0,2.24ms 为 1,如下图:Zero38kHzcarier0.56ms dataperiod(1.12ms)38kHzcarierOne dataperiod(2.24ms)每发送一个码,HT6221 会先送出一个 9ms 的头码和 4.5ms 的间隙,然后依次送出 16 位的地址码(18ms36ms)、
3、8 位数据码(9ms18ms)和 8 位数据反码,如下图:4.5ms0.56ms0.56msDOUT38kHz,33% dutycarier45ms63ms2.5ms2.5ms9ms (A0A15+D0D7+D0D7)9ms9ms108ms108ms本文主要介绍用 HT48R30A-1 来进行解码的程序。HT6221 通过红外发射管发出信号,红外接收管接到 HT48R30A-1 的外部中断输入脚。;File name:6221receiver.asm;作者: KELVEN;说明: 程序开始时,先清除 RAM 区,然后打开主中断、外部中断及定时计数器中断。通;过计算中断之间的时间间隔来解码,当接
4、收到有效码后,会置标志位。在主程序中判;断标志位是否置位来判断有效码的接收。掩膜选择系统时钟为 4000kHz。include ht48r30a-1.inc; *; * Filename: 6221RECEIVER.asm*; * Function: DECODER HT6221*; * Microprocessor: HT48R30A-1*; * Crystal : 4MHz*; *data .section datacard_no0equ060h;card_no1equ061hcard_no2equ062hcard_no3equ063h;记录最终的数据tempequ07ehcintdb?;
5、记录收数据 bit 个数的变量HT6221 发码的接收countdb?count_bufdb?int_accdb?;中断保护变量right_toudbity_bitdbit;-code .section at 0000 codeorg 00hjmpstartorg04h;中断入口地址jmpdo_waiorg08hjmpdo_tmr;有 time 中断发生org20hstart:setpgc;中断口设为输入状态callinitmova, 81h;fsys/4 1Mmovtmrc, amova, 56movtmr, a;200s 中断一次mova, 6movintc, asettmrc.4;-sl
6、eep:setintc.0snzy_bit;判断是否有外部中断发生?jmpsleep;没有外部中断发生则继续等待calldecode_1;解码snzright_tou;解码不正确,返回重来jmpstartmova, cintsuba, 32;准备收数据的 bit 个数snzc;判断数据是否已收完jmpsleepclrtmrc;收码完毕clrintccplacard_no2xora, card_no3;校验所收码是否正确HT6221 发码的接收snzzjmperror1jmpstart;正确error1:jmpstart;错误;-do_wai :clrtmrc.4clrintc.0movint_
7、acc, a;入中断保护,push acc 值暂存mova, countmovcount_buf, aclrcountsety_bitover_int:mova, 56movtmr, amova, int_acc;pop acc 值settmrc.4setintc.0reti;-do_tmr:inccountreti;decode_1 procclrintc.0clry_bitsnzright_toujmpjudge_toumamova, count_bufsuba, 4snzcjmperror;data 值小于 200s*4=800s 判断错误mova, count_bufsuba, 13s
8、zcjmperror;data 值大于 200s*13=2.6ms 判断错误mova, count_buf;data 值大于 200s*8=1.6mssuba, 8;c=1, data=1;data 值小于 200s*8=1.6ms c=0, data=0rrccard_no3HT6221 发码的接收rrccard_no2rrccard_no1rrccard_no0inccint;记录收到的 BIT 位数reterror:clrcountclrright_touretjudge_touma:clrright_tou;头码判断 13.50msmova, count_bufsuba, 70;200
9、*70=14msszcret;头码大于 14ms 判断错误mova, count_bufsuba, 63;63*200=12.6mssnzcret;头码小于 12.6ms 判断错误setright_touretdecode_1 endp;Function : init;Purpose: clear ram value;Parameter:;Return:;Modified : acc, status;init procclrintc;清中断mova, 20hmovmp0, amova, 5fhmovtemp, aram_clr:;清 RAMclrr0incmp0sdztempjmpram_clrretinit endp