联系方式

深圳市腾辉炫星电子科技有限公司
地址:广东省深圳市宝安区松岗罗田第三工业区龙山六路八号
经营:超薄遥控器、中九遥控器、大型遥控器、LED灯套件与零配件
手机:18588207127(吴经理)

0755-23703965

Q Q1:1648395713
Q Q2:   3214927102
遥控器生产厂家

当前位置: 网站首页 > 资讯动态
资讯动态

遥控器汇编码-遥控器生产厂家

org 00h main: 

 mov keydata,#0 // 清零 

 mov tmod ,#09h       ;//设置定时0方式1GATE=1       

mov  r7,#0  ;//计数器,用来计数是否满8 

 mov  r6,#0  ;//计数器,用来计数是否满2字节(解16位编码)  

jb p3.2,$  ;//是否为低电平 

again:    ;//如果为低,继续往下面执行  

mov tl0,#0  ;//清零TL0  

mov th0,#0  ;//清零TH0 

 setb tr0  ;//开启定时器

 jnb p3.2,$  ;//等待高电平到来 

 jb p3.2,$ //高电平到来,此时开始计数  

clr tr0 //高电平结束,停止计数 

 mov a,th0 //读取th0 值,TL0忽略不计   

clr c  ;//  subb a,#12 // 

 jc again //th0<12则转,即小于3.4ms,你可以算一下这个时间 

 mov a,#14 //  

clr c  ;// 

 subb a,th0 //14比较,如果TH0>14则大于3.8ms        

 jc again    ;//大于3.8ms,从新再检测 

nextbit:  ;//起始位找到了,然后下一位  

mov tl0,#0 //  

mov th0,#0 // 

 setb tr0 //启动定时器  

jnb p3.2,$ //等待高电平 

 jb p3.2,$  ;//高电平到来,此时开始计数  

clr tr0 //高电平结束,停止计数 

 mov a,th0 //读取计数值,TL0忽略不计  

clr c  ;// 

 subb a,#8 //th08比较 

 jc next  ;;;;// <2.2ms则转,再判断是否大于0.84ms  

mov a,#10 //再跟10比较  

clr c  ;//  

subb a,th0 // 

 jc again ;;;;;;// >2.7ms,则放弃,从新检测 

 mov a,keydata // 符合大于2.2ms 小于2.7ms,即为“1  

setb c        ;//C = 1  

rrc a  ;//1移位进A  

mov keydata,a //保存  

inc r7  ;//计数器加

 cjne r7,#8,nextbit //是否满8  

inc r6   ;//计数加

 cjne r6,#2,last8 //是否满两字节 

 sjmp seach  ;//不满两字节,再新采集 

last8:    ;//1字节,再接下来第二字节 

 mov keydata+1,a //把第一字节编码数据保存到31h  

mov r7,#0  ;//计数器R7清零  

sjmp nextbit  ;//继续采集数据 

next:      ;//小于2.2ms时转到这里  

mov a,th0  ;//读取计数值

TH0  swap a   ;//4位与低4位对换  

mov r1,a  ;//保存到R1 

 anl tl0,#0f0h  ;//TL04位,低4位忽略不计  

mov a,tl0  ;//  

clr c   ;//  

rrc a  ;//  

rrc a  ;//  

rrc a  ;//  

rrc a  ;//  

add a,r1 //

mov r1,a // 

 subb a,#30 //以上几行是把TH0的低4位和TL0的高4位合并为1字节作为计数值  

jc nextbit  //判断是否 <0.84ms,是则放弃,继续采集  

mov a,r1 //  

clr c  ;// 

 cjne a,#64,continue   ;//64比较 

continue:  ;// 

 jnc nextbit   //a>64表示采样值 >1.11ms  放弃  

mov a,keydata  ;//否则 ,符合位“0  

clr c          ;//C  = 0  rrc a   ;//把零右移进A  

mov keydata,a  ;//保存  

inc r7   ;//计数器加

 cjne r7,#8,nextbit //是否满8 

 inc r6   ;//计数器加

 cjne r6,#2,last_8 //是第一字节已经满  

sjmp seach  ;// 

last_8:    ;//如果为第二字节 

 mov keydata+1,a //则保存第一字节到31h 

 mov r7,#0  ;//清零R7  

sjmp nextbit  ;// 

seach:    ;//匹配按键编码 

 mov r0,#-2  ;//按键编码字节个数计数器  

mov r1,#-1  ;//按键顺序计数器

 seach1:   ;// 

inc r0  ;// 

seach2:   ;//  

inc r0   ;//  

inc r1   ;// 

 cjne r1,#29,compare //是否R1=29   

sjmp exit0  ;// 

compare:   ;//开始匹配   

mov a,r0  ;// 

 mov dptr,#keycode //地址指针指向码表首址  

movc a,@a+dptr //取码  

cjne a,keydata,seach1 //比较 

 inc r0   ;//R0+1,再比较下一字节(每个按键编码为2字节)  

mov a,r0  ;// 

mov dptr,#keycode //  

movc a,@a+dptr //比较 

 cjne a,keydata+1,seach2 //是否匹配,不匹配则继续跟下一字节比较  

mov p1,r1         ;//如果匹配,把按键顺序号输出到p1 

send:    ;// 

 mov tmod,#20h     ;   //设置timer 1,mode 2

mov tl1,#0fdh  ;//设置定时器初值  

mov th1,#0fdh  ;// 

 mov scon,#01010000b;//以上设置,即设置串口波特率系数为:9600,8,1,0  

setb tr1  ;//启动定时器

loop_s:  ;// 

 mov sbuf,r1    ;//R1(按键顺序号)输出到串口 

 jnb ti,$  ;//等待是否发送完毕  

clr ti   ;//发送完毕,清零

TI exit0:    ;// 

ljmp main   ;//循环  

keycode:   ;//每两字节代表一个按键的编码 

db 11111000b,00000000b,    11111100b,00000000b,    11111001b,11000000b db 11111100b,11000000b,    11111010b,00000000b,    11111010b,00100000b db 11111010b,01000000b,    11111010b,01100000b,    11111010b,10000000b db 11111010b,10100000b,    11111010b,11000000b,    11111010b,11100000b db 11111011b,00000000b,    11111011b,00100000b,    11111011b,01000000b db 11111011b,01100000b,    11111111b,01100000b,    11111111b,10100000b db 10001100b,10001110b,    10001101b,11101110b,    10001100b,10101110b db 10001101b,11001110b,    11111000b,11100000b,    11111100b,10000000b db 11111100b,01000000b,    11111001b,10100000b,    11111100b,10100000b db 11111100b,01100000b  end

    腾辉炫星电子科技有限公司的咨询第一时间会呈现给用户最新资讯,让大家见证不一样的小类型电子产品,咨询是个消息媒体,让每个用户对腾辉炫星有进一步了解。
分享到:
点击次数:  更新时间:2014-12-03 14:15:10  【打印此页】  【关闭